DBA的7点建议

在不断完善的数据库管理工作之外,向更广阔体系层面延伸,包括应用(Application )、系统( System )、存储( Storage )、网络( Network )、架构( Architecture 等方面,为企业提供更深远的架构与决策支持,促进企业向更全面合理的可持续性 IT 架构方向发展。


DBA日常工作职责——我对DBA7点建议:
1. 实时监控数据库告警日志
2. 实时监控数据库的重要统计信息
3. 部署自动的Statspack/AWR报告生成机制
4. 每天至少优化和熟悉一个Top SQL
5. 部署完善的监控和数据采样系统
6. 全面深入地了解应用架构
7. 撰写系统架构、现状、调整备忘录


DBA警世录——有些习惯DBA须要养成:
1. 经常使用hostname命令
2. 使用pwd确认路径
3. 确认instance_name等数据库重要信息
   select instance_name, host_name from v$instance;
4. 通过id命令确认用户信息
5. DDL语句心存敬畏


************************************************************************
使用ERRORSTACK进行错误跟踪及诊断:
设置errorstack主要有有4个级别:
仅转储错误堆栈(0级已经被逐渐废弃)
转储错误堆栈和函数调用堆栈
2 Level 1 + ProcessState
3 Level 2 + Context area (
显示所有cursors,着重显示当前cursor)

如设置ORA-01438事件的跟踪:
alter system set events='1438 trace name errorstack forever,level 3';

alter system set events='1438 trace name errorstack off';
************************************************************************


************************************************************************************************************************
Shared Pool可以被分割为多个子缓冲池(SubPool)进行管理,以提高并发性,减少竞争。

子缓冲池的数量受一个新引入的隐含参数_KGHDSIDX_COUNT影响。

alter session set events 'immediate trace name heapdump level 2';
alter system set "_kghdsidx_count"=2 scope=spfile;
startup force;
alter session set events 'immediate trace name heapdump level 2';

以下是概要输出,注意在前者的跟踪文件中,sga heap(1,0)指共享池只存在一个子缓冲,后者则存在sga heap(1,0)以及sga heap(2,0)两个子缓冲池:
[oracle@jumper udump]$ grep "sga heap" eygle_ora_25766.trc
HEAP DUMP heap name="sga heap" desc=0x5000002c
HEAP DUMP heap name="sga heap(1,0)" desc=0x5001ef0c

[oracle@jumper udump]$ grep "sga heap" eygle_ora_25786.trc
HEAP DUMP heap name="sga heap" desc=0x5000002c
HEAP DUMP heap name="sga heap(1,0)" desc=0x5001ef0c
HEAP DUMP heap name="sga heap(2,0)" desc=0x50023c04

一些Bug以及内部测试表明500MBSubPool可能会带来更好的性能,所以从Oracle 11g开始,每个SubPool至少为512MB

Oracle 10g中,Oracle仍然对共享池的管理做出了进一步改进,那就是对单个子缓冲池进行进一步的细分。现在默认,Oracle 10g会将单个缓冲池分割为4个子分区进行管理(这可能是因为通常4CPU才分配一个SubPool),使用类似如上的方法在Oracle 10gR2中进行测试:

alter session set events 'immediate trace name heapdump level 2';
alter system set "_kghdsidx_count"=2 scope=spfile;
startup force;
alter session set events 'immediate trace name heapdump level 2';

分析得到的日志,当仅有一个子缓冲池时,Shared Pool被划分为sga heap(1,0)sga heap(1,3)4个子分区:
[oracle@eygle udump]$ grep "sga heap" eygle_ora_13577.trc
HEAP DUMP heap name="sga heap" desc=0x2000002c
HEAP DUMP heap name="sga heap(1,0)" desc=0x2001b550
HEAP DUMP heap name="sga heap(1,1)" desc=0x2001c188
HEAP DUMP heap name="sga heap(1,2)" desc=0x2001cdc0
HEAP DUMP heap name="sga heap(1,3)" desc=0x2001d9f8

当使用两个子缓冲池时,Shared Pool则被划分为8个子分区进行管理如下:
[oracle@eygle udump]$ grep "sga heap" eygle_ora_13618.trc
HEAP DUMP heap name="sga heap" desc=0x2000002c
HEAP DUMP heap name="sga heap(1,0)" desc=0x2001b550
HEAP DUMP heap name="sga heap(1,1)" desc=0x2001c188
HEAP DUMP heap name="sga heap(1,2)" desc=0x2001cdc0
HEAP DUMP heap name="sga heap(1,3)" desc=0x2001d9f8
HEAP DUMP heap name="sga heap(2,0)" desc=0x20020640
HEAP DUMP heap name="sga heap(2,1)" desc=0x20021278
HEAP DUMP heap name="sga heap(2,2)" desc=0x20021eb0
HEAP DUMP heap name="sga heap(2,3)" desc=0x20022ae8

select addr,indx,kghluidx,kghludur,kghluops,kghlurcr from x$kghlu;

select a.ksppinm, b.ksppstvl from x$ksppi a, x$ksppsv b where a.indx = b.indx and a.ksppinm = '_kghdsidx_count';
************************************************************************************************************************


查看操作系统信号量
ipcs -sa


移除操作系统信号量
ipcrm -s 1245195


Logmnr简单而强大的工具:
SQL> exec dbms_logmnr.add_logfile('/opt/oracle/oradata/mmstest/redo02.log',dbms_logmnr.new);
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
SQL> select sql_redo from v$logmnr_contents;
SQL> exec dbms_logmnr.end_logmnr


要了解数据字典需要关注的一个重要文件是$ORACLE_HOME/rdbms/admin/sql.bsq,这个文件在数据库创建时(CREATE DATABASE)被调用,用于创建一系列的内部数据字典,该文件的调用由一个隐含参数设定:
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ FROM SYS.x$ksppi x, SYS.x$ksppcv y WHERE x.indx = y.indx AND x.ksppinm ='_init_sql_file';


OBJECT_ID可以看做是对象的一个逻辑ID,在对象创建时分配,一经分配即不再改变;而DATA_OBJECT_ID则是一个物理ID,在对象物理存储发生变化时可能会发生改变。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值