通过外部表查看alert.log的内容
查询语句如下:DECLARE PATH_BDUMP VARCHAR2(4000); NAME_ALERT VARCHAR2(4000); INS_NAME VARCHAR2(200);BEGIN SELECT VALUE INTO PATH_BDUMP FROM SYS.V_$PARAMETER WHERE NAME = 'BACKGROUND_DUMP_DEST'; SELECT 'ALERT_' || VALUE || '.LOG' INTO NAME_ALERT FROM SYS.V_$PARAMETER WHERE NAME = 'INSTANCE_NAME'; SELECT VALUE INTO INS_NAME FROM SYS.V_$PARAMETER WHERE NAME = 'INSTANCE_NUMBER'; IF INS_NAME = '0' THEN INS_NAME := ''; END IF; EXECUTE IMMEDIATE 'CREATE OR
快速查看表空间使用情况
查询语句如下SELECT NVL(B.TABLESPACE_NAME, NVL(A.TABLESPACE_NAME, 'UNKOWN')) NAME, KBYTES_ALLOC KBYTES, KBYTES_ALLOC - NVL(KBYTES_FREE, 0) USED, NVL(KBYTES_FREE, 0) FREE ((KBYTES_ALLOC - NVL(KBYTES_FREE, 0)) / KBYTES_ALLOC) * 100 PCT_USED, NVL(LARGEST, 0) LARGEST FROM (SELECT SUM(BYTES) / 1024 KBYTES_FREE, MAX(BYTES) / 1024 LARGEST, TABLESPACE_NAME FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) A, (SE
查询数据缓冲区的命中率
该查询的返回结果如果非常接近100%,则表明数据缓冲区当前设置的空间足够使用,如果返回的数据低于95%的话,那么DBA就需要注意了。你有可能需要考虑是否加大分配数据缓冲区的内存空间,或者,调整你的SQL语句。 SELECT 1 - (SUM(DECODE(NAME, 'physical reads', VALUE, 0)) / (SUM(DECODE(NAME, 'db block gets', VALUE, 0)) + (SUM(DECODE(NAME, 'consistent gets', VALUE, 0))))) "BUFFER HIT RATIO" FROM V$SYSSTAT;[@more@]
由ROWID得出对象号、数据文件号、块号、行号
方法①,使用包DBMS_ROWID获取 SELECT ROWID, DBMS_ROWID.ROWID_OBJECT(ROWID) OBJECT_ID, DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE_ID, DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_ID, DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) NUM, T.* FROM SCOTT.EMP T方法②,创建函数,用函数获取 CREATE OR REPLACE FUNCTION GET_ROWID(L_ROWID IN VARCHAR2) RETURN VARCHAR2 IS LS_MY_ROWID VARCHAR2(200); ROWID_TYPE NUMBER; OBJECT_NUMBER NUMBER; RELATIVE_FNO NUMBER; BLOCK_NUMBER NUMBER; ROW_NUM
查找HWM的方法
/*在表的segment header里记录了一个值,叫高水位标记(High Water Mark,简称HWM)。HWM表示当前segment里使用的最后一个数据块的位置。当发生insert时,由于不断扩展数据块,因此会不断增加HWM的值。*/DECLARE L_TOTAL_BLOCKS NUMBER; --表示表里占用的数据块的总个数 L_TOTAL_BYTES NUMBER; L_UNUSED_BLOCKS NUMBER; L_UNUSED_BYTES NUMBER; L_LASTUSEDEXFILEID NUMBER; L_LAST_USED_EXTENT_BLOCK_ID NUMBER; --表里最后使用的EXTENT的起始数据块号 L_LAST_USED_BLO
设置日志缓冲区(log buffer)
在设置日志缓冲区时,可以参考这个建议的公式来计算:1.5*(平均每个事务所产生的重做记录*每秒提交的事务数量)。总事务量SQL> SELECT A.VALUE AS TRANCOUNT FROM V$SYSSTAT A ,V$STATNAME B WHERE A.STATISTIC#=B.STATISTIC# AND B.NAME='user commits';系统总共运行的时间:SQL> SELECT TRUNC(SYSDATE-STARTUP_TIME)*24*60*60 AS SECONDS FROM V$INSTANCE;产生的所有重做记录大小SQL> SELECT VALUE AS REDOBLOCKS FROM V$SYSSTAT WHERE NAME='redo blocks written';日志缓冲区大小=1.5*(redoblocks/trancount)*(trancount/secon