oracle 日常维护工作内容

在ORACLE中,我们可以通过file_id与block_id去定位一个数据库对象。例如,我们在10046生成的trace文件中file#=4
block#=266 blocks=8,那么我可以通过下面两个SQL去定位对象

oracle 日常维护工作内容oracle 日常维护工作内容
ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控:

SQL 1:此SQL效率较差,执行时间较长。

 
(1).
每天对ORACLE数据库的运行状态,日志文件,备份情况,数据库的空间使用情况,系统资源的使用情况进行检查,发现并解决问题。 

SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME FROM DBA_EXTENTS WHERE FILE_ID =&FILE_ID AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;

(2).
每周对数据库对象的空间扩展情况,数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。 

SQL 2:此SQL效率较快(ORACLE 10g 中没有CACHEHINT字段)

(3).
检查表空间碎片,提出下一步空间管理计划。对ORACLE数据库状态进行一次全面检查。 

SELECT OBJD, FILE#, BLOCK#, CLASS#, TS#, CACHEHINT, STATUS, DIRTY FROM V$BH WHERE FILE# = &FILE_ID AND BLOCK# = &BLOCK_ID; SELECT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_ID=&OBJECT_ID;

====================

下面通过一个例子来演示一下,详情如下所示

★每天的工作★ 

SQL> COL OWNER FOR A12;SQL> COL SEGMENT_NAME FOR A32;SQL> SELECT OWNER , 2 SEGMENT_NAME , 3 HEADER_FILE , 4 HEADER_BLOCK 5 FROM DBA_SEGMENTS 6 WHERE OWNER='TEST' AND SEGMENT_NAME='EMPLOYEE';OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK------------ -------------------------------- ----------- ------------TEST EMPLOYEE 4 266SQL> SQL> SELECT OWNER, 2 SEGMENT_NAME, 3 SEGMENT_TYPE, 4 TABLESPACE_NAME 5 FROM DBA_EXTENTS 6 WHERE FILE_ID = 4 7 AND 266 BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME------------ -------------------------------- ------------------ -----------------TEST EMPLOYEE TABLE USERSSQL> SQL> SELECT OBJD, 2 FILE#, 3 BLOCK#, 4 CLASS#, 5 TS#, 6 CACHEHINT, 7 STATUS, 8 DIRTY 9 FROM V$BH 10 WHERE FILE# = 4 11 AND BLOCK# = 266; OBJD FILE# BLOCK# CLASS# TS# CACHEHINT STATUS D---------- ---------- ---------- ---------- ---------- ---------- ---------- - 76090 4 266 4 4 15 cr N 76090 4 266 4 4 15 cr N 76090 4 266 4 4 15 cr NSQL> SELECT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_ID=76090;OWNER OBJECT_NAME------------ ------------------------------------------------------------TEST EMPLOYEEclip_image001

====================

昨天在群里讨论一个关于空闲块的问题时,我验证测试时,发现一个奇怪的现象,使用下面SQL找到了一个最大空闲块。

(1).确认所有的INSTANCE状态正常.登陆到所有数据库或例程,检测ORACLE后台进程: 

SELECT UPPER AS "表空间名", D.TOT_GROOTTE_MB AS "表空间大小", D.TOT_GROOTTE_MB - F.TOTAL_BYTES AS "已使用空间", TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') AS "使用比", F.TOTAL_BYTES AS "空闲空间", F.MAX_BYTES AS "最大空闲块"FROM (SELECT TABLESPACE_NAME, ROUND /  TOTAL_BYTES, ROUND /  MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F, (SELECT DD.TABLESPACE_NAME, ROUND /  TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME ) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME;SELECT FILE_ID,BLOCK_ID, BYTES,BLOCKS FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME=&TABLESPACE_NAME ORDER BY BYTES DESC;

$ps –-ef|grep ora

然后我发现使用上面两个SQL查不到对应的对象。如下截图所示:

(2).
检查文件系统的使用(剩余空间)。如果文件系统的剩余空间小于20%,需删除不用的文件以释放空间。

后面查了一下资料,发现在Oracle Database
10g引入了回收站功能后,会将回收站中的空间计算为自由空间,加入到dba_free_space字典中。在$ORACLE_HOME/rdbms/admin/catspace.sql中,你可以找到视图DBA_FREE_SPACE的定义,脚本如下:

对于太平洋业务交易生产系统,要特别关注: /u01  和 
数据库日志归档目录,当空间不足,请急时清理.

ORACLE 10g中DBA_FREE_SPACE的定义:

$df -k 

create or replace view DBA_FREE_SPACE (TABLESPACE_NAME, FILE_ID, BLOCK_ID, BYTES, BLOCKS, RELATIVE_FNO)asselect ts.name, fi.file#, f.block#, f.length * ts.blocksize, f.length, f.file#from sys.ts$ ts, sys.fet$ f, sys.file$ fiwhere ts.ts# = f.ts# and f.ts# = fi.ts# and f.file# = fi.relfile# and ts.bitmapped = 0union allselect /*+ ordered use_nl */ ts.name, fi.file#, f.ktfbfebno, f.ktfbfeblks * ts.blocksize, f.ktfbfeblks, f.ktfbfefnofrom sys.ts$ ts, sys.x$ktfbfe f, sys.file$ fiwhere ts.ts# = f.ktfbfetsn and f.ktfbfetsn = fi.ts# and f.ktfbfefno = fi.relfile# and ts.bitmapped <> 0 and ts.online$ in  and ts.contents$ = 0union allselect /*+ ordered use_nl */ ts.name, fi.file#, u.ktfbuebno, u.ktfbueblks * ts.blocksize, u.ktfbueblks, u.ktfbuefnofrom sys.recyclebin$ rb, sys.ts$ ts, sys.x$ktfbue u, sys.file$ fiwhere ts.ts# = rb.ts# and rb.ts# = fi.ts# and u.ktfbuefno = fi.relfile# and u.ktfbuesegtsn = rb.ts# and u.ktfbuesegfno = rb.file# and u.ktfbuesegbno = rb.block# and ts.bitmapped <> 0 and ts.online$ in  and ts.contents$ = 0union allselect ts.name, fi.file#, u.block#, u.length * ts.blocksize, u.length, u.file#from sys.ts$ ts, sys.uet$ u, sys.file$ fi, sys.recyclebin$ rbwhere ts.ts# = u.ts# and u.ts# = fi.ts# and u.segfile# = fi.relfile# and u.ts# = rb.ts# and u.segfile# = rb.file# and u.segblock# = rb.block# and ts.bitmapped = 0/ORACLE 11g中DBA_FREE_SPACE的定义:create or replace view DBA_FREE_SPACE (TABLESPACE_NAME, FILE_ID, BLOCK_ID, BYTES, BLOCKS, RELATIVE_FNO)asselect ts.name, fi.file#, f.block#, f.length * ts.blocksize, f.length, f.file#from sys.ts$ ts, sys.fet$ f, sys.file$ fiwhere ts.ts# = f.ts# and f.ts# = fi.ts# and f.file# = fi.relfile# and ts.bitmapped = 0union allselect /*+ ordered use_nl */ ts.name, fi.file#, f.ktfbfebno, f.ktfbfeblks * ts.blocksize, f.ktfbfeblks, f.ktfbfefnofrom sys.ts$ ts, sys.x$ktfbfe f, sys.file$ fiwhere ts.ts# = f.ktfbfetsn and f.ktfbfetsn = fi.ts# and f.ktfbfefno = fi.relfile# and ts.bitmapped <> 0 and ts.online$ in  and ts.contents$ = 0union allselect /*+ ordered use_nl */ ts.name, fi.file#, u.ktfbuebno, u.ktfbueblks * ts.blocksize, u.ktfbueblks, u.ktfbuefnofrom sys.recyclebin$ rb, sys.ts$ ts, sys.x$ktfbue u, sys.file$ fiwhere ts.ts# = rb.ts# and rb.ts# = fi.ts# and u.ktfbuefno = fi.relfile# and u.ktfbuesegtsn = rb.ts# and u.ktfbuesegfno = rb.file# and u.ktfbuesegbno = rb.block# and ts.bitmapped <> 0 and ts.online$ in  and ts.contents$ = 0union allselect ts.name, fi.file#, u.block#, u.length * ts.blocksize, u.length, u.file#from sys.ts$ ts, sys.uet$ u, sys.file$ fi, sys.recyclebin$ rbwhere ts.ts# = u.ts# and u.ts# = fi.ts# and u.segfile# = fi.relfile# and u.ts# = rb.ts# and u.segfile# = rb.file# and u.segblock# = rb.block# and ts.bitmapped = 0/

$df -h

那么在DBA_FREE_SPACE中找到的最大空闲块是否很有可能就是回收站中曾经的一个对象呢?那么我们来测试看看。

(3).
检查日志文件和trace文件记录alert和trace文件中的错误.连接到每个需管理的系统 

SQL> show parameter recyclebin;NAME TYPE VALUE------------------------------------ ----------- ------------------------------recyclebin string onSQL> CREATE TABLE ESCMOWNER.TTT 2 AS 3 SELECT * FROM DBA_OBJECTS;Table created.SQL> COL OWNER FOR A12;SQL> COL SEGMENT_NAME FOR A32;SQL> SELECT OWNER,SEGMENT_NAME, HEADER_FILE, HEADER_BLOCK 2 FROM DBA_SEGMENTS 3 WHERE OWNER='ESCMOWNER' AND SEGMENT_NAME='TTT' ;OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK------------ -------------------------------- ----------- ------------ESCMOWNER TTT 97 113025SQL> SQL> SELECT * FROM X$KTFBFE WHERE KTFBFEFNO=97;ADDR INDX INST_ID KTFBFETSN KTFBFEFNO KTFBFEBNO KTFBFEBLKS---------------- ---------- ---------- ---------- ---------- ---------- ----------00007F57B2388CA0 222 1 9 97 524169 120SQL> DROP TABLE ESCMOWNER.TTT;Table dropped.SQL> COL ORIGINAL_NAME FOR A16;SQL> SELECT OBJ#,OWNER#,ORIGINAL_NAME,FILE#,BLOCK# ,FLAGS,SPACE FROM RECYCLEBIN$; OBJ# OWNER# ORIGINAL_NAME FILE# BLOCK# FLAGS SPACE---------- ---------- ---------------- ---------- ---------- ---------- ---------- 805429 73 TTT 97 113025 30 896SQL> PURGE DBA_RECYCLEBIN;DBA Recyclebin purged.SQL> SELECT * FROM X$KTFBFE WHERE KTFBFEFNO=97 ;ADDR INDX INST_ID KTFBFETSN KTFBFEFNO KTFBFEBNO KTFBFEBLKS---------------- ---------- ---------- ---------- ---------- ---------- ----------00007F57B2388CA0 222 1 9 97 113025 800007F57B2388CA0 225 1 9 97 524169 120SQL> clip_image003

※ 使用’telnet’ 

如上所示,清空回收站对象后,你会发现X$KTFBFE中多了一条记录,KTFBFEFNO 和
KTFBFEBNO分别为97 ,113025, 这个值显然就是删除对象TTT曾经的FILE_ID值。

※ 对每个数据库,cd
到bdump目录,通常是$ORACLE_BASE/admin/<SID>/bdump 

另外,在测试过程中发现,并不是每次的测试结果都是在X$KTFBFE中多一条记录,有时候记录不会变化,但是X$KTFBFE中某条记录的KTFBFEBNO会变化,而这个变化跟清空回收站是有关系的。如下案例所示:

※ 使用 Unix ‘tail’命令来查看alert_<SID>.log文件 

SQL> show parameter recyclebin;NAME TYPE VALUE------------------------------------ ----------- ------------------------------recyclebin string onSQL> CREATE TABLE TEST.TTT 2 AS 3 SELECT * FROM DBA_OBJECTS;Table created.SQL> COL OWNER FOR A12;SQL> COL SEGMENT_NAME FOR A32;SQL> SELECT OWNER,SEGMENT_NAME, HEADER_FILE, HEADER_BLOCK 2 FROM DBA_SEGMENTS 3 WHERE OWNER='TEST' AND SEGMENT_NAME='TTT' ;OWNER SEGMENT_NAME HEADER_FILE HEADER_BLOCK------------ -------------------------------- ----------- ------------TEST TTT 5 130SQL> SELECT * FROM X$KTFBFE WHERE KTFBFEFNO=5 ;ADDR INDX INST_ID KTFBFETSN KTFBFEFNO KTFBFEBNO KTFBFEBLKS---------------- ---------- ---------- ---------- ---------- ---------- ----------00002BA829B19558 150 1 6 5 1280 50675200002BA829B19558 151 1 6 5 508032 16256SQL> DROP TABLE TEST.TTT;Table dropped.SQL> SQL> COL ORIGINAL_NAME FOR A16;SQL> SELECT OBJ#,OWNER#,ORIGINAL_NAME,FILE#,BLOCK# ,FLAGS,SPACE FROM RECYCLEBIN$; OBJ# OWNER# ORIGINAL_NAME FILE# BLOCK# FLAGS SPACE---------- ---------- ---------------- ---------- ---------- ---------- ---------- 82820 85 TTT 5 130 30 1152SQL> SELECT * FROM X$KTFBFE WHERE KTFBFEFNO=5 ;ADDR INDX INST_ID KTFBFETSN KTFBFEFNO KTFBFEBNO KTFBFEBLKS---------------- ---------- ---------- ---------- ---------- ---------- ----------00002BA829B159D8 150 1 6 5 1280 50675200002BA829B159D8 151 1 6 5 508032 16256SQL> PURGE DBA_RECYCLEBIN;DBA Recyclebin purged.SQL> SELECT * FROM X$KTFBFE WHERE KTFBFEFNO=5 ;ADDR INDX INST_ID KTFBFETSN KTFBFEFNO KTFBFEBNO KTFBFEBLKS---------------- ---------- ---------- ---------- ---------- ---------- ----------00002BA829B159D8 150 1 6 5 128 50790400002BA829B159D8 151 1 6 5 508032 16256SQL> clip_image004

※ 如果发现任何新的ORA- 错误,记录并解决

如上所示,在清空回收站的表以后,你查询X$KTFBFE,就会发现其中一条记录的KTFBFEBNO的变化了,它们的关系为

(4). 检查数据文件的状态记录状态不是“online”的数据文件,并做恢复。 

1280 -1152 = 128

Select file_name from dba_data_files where status=’OFFLINE’ 

所以,你会看到KTFBFEBNO的值从1280变为了128了。此时你查看DBA_FREE_SPACE,就会看到这样的情况。所以当清空回收站时,有可能是数据库将这个表的空间标记为了空闲块,也有可能是将这个空闲块合并到其它空闲块去了。

(5). 检查表空间的使用情况 

X$KTFBFE其实是这几个单词[k]ernel [t]ablespace [f]ile [b]itmapped
[f]ree [e]xtents
的首字母。关于这个系统视图最深入的介绍,莫过于这篇文章谈谈Oracle
dba_free_space,有兴趣可以验证、测试一下。

–如果有表空间大于90%的就应该在当天清算前,增大该表空间,但对于(temp,undo)表空间除外,

以上所述是小编给大家介绍的关于ORACLE通过file_id与block_id定位数据库对象遇到的问题引发的思考,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

–重点关注HS_HIS_data 和 HS_HIS_IDX 这两个表空间.

SELECT d.tablespace_name, SPACE “SUM_SPACE(M)”, blocks sum_blocks,

       SPACE – NVL (free_space, 0) “USED_SPACE(M)”,

       ROUND ((1 – NVL (free_space, 0) / SPACE) * 100, 2)
“USED_RATE(%)”,

       free_space “FREE_SPACE(M)”

  FROM (SELECT   tablespace_name, ROUND (SUM (BYTES) / (1024 * 1024),

                                         2) SPACE, SUM (blocks) blocks

            FROM dba_data_files

        GROUP BY tablespace_name) d,

       (SELECT   tablespace_name,

                 ROUND (SUM (BYTES) / (1024 * 1024), 2) free_space

            FROM dba_free_space

        GROUP BY tablespace_name) f

WHERE d.tablespace_name = f.tablespace_name( )

UNION ALL                                                   –if have
tempfile

SELECT d.tablespace_name, SPACE “SUM_SPACE(M)”, blocks sum_blocks,

       used_space “USED_SPACE(M)”,

       ROUND (NVL (used_space, 0) / SPACE * 100, 2) “USED_RATE(%)”,

       NVL (free_space, 0) “FREE_SPACE(M)”

  FROM (SELECT   tablespace_name, ROUND (SUM (BYTES) / (1024 * 1024),

                                         2) SPACE, SUM (blocks) blocks

            FROM dba_temp_files

        GROUP BY tablespace_name) d,

       (SELECT   tablespace_name,

                 ROUND (SUM (bytes_used) / (1024 * 1024), 2)
used_space,

                 ROUND (SUM (bytes_free) / (1024 * 1024), 2)
free_space

            FROM v$temp_space_header

        GROUP BY tablespace_name) f

WHERE d.tablespace_name = f.tablespace_name( ); 

(6). 检查剩余表空间 

/* Formatted on 2007/03/01 15:56 (Formatter Plus v4.8.7) */

SELECT   tablespace_name, SUM (blocks) AS free_blk,

         TRUNC (SUM (BYTES) / (1024 * 1024)) AS free_m,

         MAX (BYTES) / (1024) AS big_chunk_k, COUNT (*) AS
num_chunks

    FROM dba_free_space

GROUP BY tablespace_name;

(7). 监控数据库性能运行AWR生成系统报告或者使用statspack收集统计数据 

※注意:TOP-5事件

(8). 检查数据库性能,记录数据库的cpu使用、IO、buffer命中率等等 

使用vmstat,iostat,glance,top等命令 

(9). 日常出现问题的处理。

====================

★每周的工作★ 

====================

(1). 监控数据库对象的空间扩展情况 

根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施

— 重点关注HS_HIS_data 和 HS_HIS_IDX 这两个表空间 

— 删除历史数据 

— 扩表空间 

alter tablespace <name> add datafile ‘<file>’ size
<size>; 

EXTENT MANAGEMENT LOCAL

SEGMENT SPACE MANAGEMENT AUTO;

(2). 监控数据量的增长情况 

根据本周每天的检查情况找到记录数量增长很快的数据库对象,并采取相应的措施 

— 重点关注HS_HIS_data 和 HS_HIS_IDX 这两个表空间

— 删除历史数据 

— 扩表空间 

alter tablespace <name> add datafile ‘<file>’ size
<size>; 

EXTENT MANAGEMENT LOCAL

SEGMENT SPACE MANAGEMENT AUTO;  

(3). 系统健康检查 

检查以下内容: 

init<sid>.ora 

controlfile 

redo log file 

archiving 

sort area size 

tablespace(system,temporary,tablespace fragment) 

datafiles(online/offline) 

object(number of extent,next extent,index) 

rollback segment 

logging &tracing(alert.log,max_dump_file_size,sqlnet) 

(4). 检查无效的数据库对象 

/* Formatted on 2007/03/01 16:04 (Formatter Plus v4.8.7) */

–look over invalid objects

SELECT owner, object_name, object_type

  FROM dba_objects

WHERE status = ‘invalid’; 

(5). 检查不起作用的约束 

/* Formatted on 2007/03/01 16:07 (Formatter Plus v4.8.7) */

SELECT owner, constraint_name, table_name, constraint_type, status

  FROM dba_constraints

WHERE status = ‘DISABLED’ AND constraint_type = ‘P’ ;

(6). 检查无效的trigger 

/* Formatted on 2007/03/01 16:08 (Formatter Plus v4.8.7) */

–look over triggers state

SELECT owner, trigger_name, table_name, status

  FROM dba_triggers

WHERE status = ‘DISABLED’;

 

====================

★每月的工作★ 

====================

(1). 检查表空间碎片 

根据本月每周的检查分析数据库碎片情况,找到相应的解决方法 

(2). 寻找数据库性能调整的机会 

比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进行调整 

(3). 数据库性能调整 

如有必要,进行性能调整 

(4). 提出下一步空间管理计划 

根据每周的监控,提出空间管理的改进方法 

======================================

======================================

||   ★★★Oracle DBA 日常管理★★★ ||

======================================

======================================

目的:这篇文档有很详细的资料记录着对一个甚至更多的ORACLE
数据库每天的,每月的,每年的运行的状态的结果及检查的结果,在文档的附录中你将会看到所有检查,修改的SQL和PL/SQL
代码。 


★目录 ★


1.日常维护程序 

A. 检查已起的所有实例 

B. 查找一些新的警告日志 

C. 检查DBSNMP 是否在运行 

D. 检查数据库备份是否正确 

E. 检查备份到磁带中的文件是否正确 

F. 检查数据库的性能是否正常合理,是否有足够的空间和资源 

G. 将文档日志复制到备份的数据库中 

H. 要常看DBA 用户手册 

2.晚间维护程序 

A.收集VOLUMETRIC 的数据 

3.每周维护工作 

A. 查找那些破坏规则的OBJECT 

B. 查找是否有违反安全策略的问题 

C. 查看错误地方的SQL*NET 日志 

D. 将所有的警告日志存档 

E. 经常访问供应商的主页 

4.月维护程序 

A. 查看对数据库会产生危害的增长速度 

B. 回顾以前数据库优化性能的调整 

C. 查看I/O 的屏颈问题 

D. 回顾FRAGMENTATION 

E. 将来的执行计划 

F. 查看调整点和维护 

5.附录 

A. 月维护过程 

B. 晚间维护过程 

C. 周维护过程 

6.参考文献 

————————————————————— 

==================

★一.日维护过程★ 

==================

A.查看所有的实例是否已起 

确定数据库是可用的,把每个实例写入日志并且运行日报告或是运行测试文件。当然有一些操作我们是希望它能自动运行的。 

可选择执行:用ORACLE 管理器中的‘PROBE’事件来查看

B.查找新的警告日志文件 

1). 联接每一个操作管理系统 

2). 使用‘TELNET’或是可比较程序 

3). 对每一个管理实例,经常的执行$ORACLE_BASE/<SID>/bdump
操作,并使其能回退到控制数据库的SID。 

4). 在提示下,使用UNIX
中的‘TAIL’命令查看alert_<SID>.log,或是用其他方式检查文件中最近时期的警告日志 

5). 如果以前出现过的一些ORA_ERRORS
又出现,将它记录到数据库恢复日志中并且仔细的研究它们,这个数据库恢复日志在〈FILE〉中 

C.查看DBSNMP 的运行情况 

检查每个被管理机器的‘DBSNMP’进程并将它们记录到日志中。 

在UNIX 中,在命令行中,键入ps –ef | grep dbsnmp,将回看到2个DBSNMP
进程在运行。如果没有,重启DBSNMP。 

D.查数据库备份是否成功

 

E.检查备份的磁带文档是否成功

 

F.检查对合理的性能来说是否有足够的资源 

1). 检查在表空间中有没有剩余空间。 

对每一个实例来说,检查在表空间中是否存在有剩余空间来满足当天的预期的需要。当数据库中已有的数据是稳定的,数据日增长的平均 

数也是可以计算出来,最小的剩余空间至少要能满足每天数据的增长。 

A) 运行‘FREE.SQL’来检查表空间的剩余空间。 

B) 运行‘SPACE.SQL’来检查表空间中的剩余空间百分率

 

2). 检查回滚段 

回滚段的状态一般是在线的,除了一些为复杂工作准备的专用
段,它一般状态是离线的。 

a) 每个数据库都有一个回滚段名字的列表。 

b) 你可以用V$ROLLSTAT 来查询在线或是离线的回滚段的现在状 态. 

c) 对于所有回滚段的存储参数及名字, 可用DBA_ROLLBACK_SEGS
来查询。但是它不如V$ROLLSTAT 准确。

 

3). 识别出一些过分的增长 

查看数据库中超出资源或是增长速度过大的段,这些段的存储参 数需要调整。 

a) 收集日数据大小的信息,
可以用‘ANALYZE5PCT.SQL’。如果你收集的是每晚的信息, 则可跳过这一步。 

b) 检查当前的范围,可用‘NR.EXTENTS.SQL’。 

c) 查询当前表的大小信息。 

d) 查询当前索引大小的信息。 

e) 查询增长趋势。

4). 确定空间的范围。 

如果范围空间对象的NEXT_EXTENT
比表空间所能提供的最大范围还要大,那么这将影响数据库的运行。如果我们找到了这个目标,可以用‘ALTER
TABLESPACE COALESCE’调查它的位置,或加另外 的数据文件。 

A)运行‘SPACEBOUND.SQL’。如果都是正常的,将不返回任何行。 

5). 回顾CPU,内存,网络,硬件资源论点的过程 

A)检查CPU的利用情况,进到x:.htm =>system 

metrics=>CPU 利用页,CPU 的最大限度为400,当CPU 的占用保持在350
以上有一段时间的话,我们就需要查看及研究出现的问题。 

G.将存档日志复制到备用数据库中如果有一个备用数据库,将适当的存档日志复制到备用数据库的期望位置,备用数据库中保存最近期的数据。 

H. 经常查阅DBA 用户手册 

如果有可能的话,要广泛的阅读,包括DBA 手册,行业杂志,新闻
组或是邮件列表。

 

————————————————————- 

====================

★二.晚间维护过程★ 

====================

大部分的数据库产品将受益于每晚确定的检查进程的运行。 

A. 收集VOLUMETRIC 数据 

  1. 分析计划和收集数据更准确的分析计算并保存结果。 

a) 如果你现在没有作这些的话,用‘MK VOLFACT.SQL’来创建测定体积的表。 

b) 收集晚间数据大小的信息,用‘ANALYZE COMP.SQL’。 

c) 收集统计结果,用‘POP VOL.SQL’。 

d) 在空闲的时候检查数据,可能的话,每周或每个月进行。 

我是用MS EXCEL 和ODBC 的联接来检查数据和图表的增长 

————————————————————- 

====================

★三.每周维护过程★ 

====================

★A. 查找被破坏的目标 

  1. 对于每个给定表空间的对象来说,NEXT_EXTENT
    的大小是相同的,如12/14/98,缺省的NEXT_EXTENT 的DATAHI 为1G,DATALO
    为500MB,

INDEXES 为256MB。 

A) 检查NEXT_EXTENT 的设置,可用‘NEXTEXT.SQL’。 

B) 检查已有的EXTENTS,可用‘EXISTEXT.SQL’。 

  1. 所有的表都应该有唯一的主键 

a) 查看那些表没有主键,可用‘NO_PK.SQL’。 

b) 查找那些主键是没有发挥作用的,可用‘DIS_PK.SQL’。 

c) 所有作索引的主键都要是唯一的,可用‘ NONUPK.SQL’来检 查。