深入浅出Oracle:DBA入门、进阶与诊断案例(读书笔记1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深⼊浅出Oracle:DBA⼊门、进阶与诊断案例(读书笔记1)
⼀、数据库的启动和关闭
Oracle Server共有2部分组成:Instance和Database.
Instance是指⼀组后台进程/线程和⼀块共享内存区域,⽽Database是指存储在磁盘上的⼀组物理⽂件。

1.1数据库的启动
数据库的启动主要分为3个步骤:
(1)启动数据库到nomount状态;
(2)启动数据库到mount状态;
(3)启动改数据库到open状态;
1.1.1启动数据库到nomount状态
Oracle⾸先会寻找参数⽂件(pfile/spfile),然后根据参数⽂件中的设置,创建实例,分配内存,启动后台进程!
该步只要拥有了1个参数⽂件,就可凭它重启实例(Instance). 该步不需要控制⽂件和数据⽂件的参与。

Oracle选择参数⽂件的顺序:
在Oracle9i⾥,Oracle⾸选spfile.ora⽂件作为启动参数⽂件;如果该⽂件不存在,Oracle选择spfile.ora⽂件;
如果前⼆者都不存在,Oracle将会选择init.ora⽂件;如果以上3个⽂件都不存在,Oracle将⽆法创建和启动Instance.
show parameter spfile:检查数据库是否使⽤了spfile⽂件,如果value不为null,说明使⽤了该⽂件;
在参数⽂件中,通常需要最少的参数是db_name,设置了这个参数之后,数据库实例就可以启动。

缺省情况下,如果不设置,background_dump_dest⽬录(警报⽇志⽂件alert_.log的存放地点)位于
$ORACLE_HOME/rdbms/log⽬录下。

在使⽤RMAN(Recovery Manager)时存在更为特殊的情况,Oracle允许在不存在参数⽂件的情况下启动⼀个实例,数据库的db_name会被缺省的命名为DUMMY.
1.1.2启动数据库到mount状态
启动到nomount状态时,Oracle就可通过参数⽂件找到控制⽂件的位置信息。

Oracle会默认创建3个控制⽂件,3个控制⽂件的内容完全⼀致。

最后将这3个控制⽂件放在不同的磁盘上。

在nomount状态时,可v parameter视图,获取参数⽂件信息;在mount状态时,可查询v controlfile视图,获取控制⽂件信息;
在mount数据库的过程中,Oracle需要找到控制⽂件并锁定控制⽂件;
如果丢失了1~2个控制⽂件,可通过复制完好的控制⽂件,并修改名称,来启动数据库;
如果3个控制⽂件全部丢失,就需要恢复或重建控制⽂件,来启动数据库。

在这⼀步骤中,数据库需要计算Mount_id并将记录在控制⽂件中,然后开始启动⼼跳,每3秒更新⼀次控制⽂件。

启动到mount状态,数据库必须具备的另⼀个重要⽂件是⼝令⽂件,该⽂件位于$ORACLE_HOME/dbs⽬录下,缺省名称为orapw. ⼝令⽂件中存放sysdba/sysoper⽤户的⽤户名和⼝令。

在数据库没有启动之前,数据库内建⽤户是⽆法通过数据库本⾝来验证⾝份的,通过⼝令⽂件,Oracle可实现对⽤户的⾝份认证,在数据库未启动之前登录,进⽽启动数据库。

对于⼝令⽂件,缺省查找orapw⽂件,如果该⽂件不存在,则继续查找orapw⽂件,如果⼆者都不存在,则数据库报错。

如果⼝令⽂件丢失,可通过orapw⼯具重建,所以备份策略中必须包含⼝令⽂件;
1.1.3启动数据库open阶段
由于控制⽂件中记录了数据库中数据⽂件、⽇志⽂件的位置信息,检查点信息等重要信息,所以在此阶段,Oracle可根据控制⽂件这些⽂件进⾏检查点和完整性检查。

第⼀次检查数据⽂件头中的检查点计数是否和控制⽂件中的检查点计数⼀致。

此步骤是为了确认数据⽂件来⾃同⼀版本。

第⼆次检查数据⽂件头的开始SCN和控制⽂件中记录的该⽂件的结束SCN是否⼀致。

如果控制⽂件中记录的结束SCN等于数据⽂件头的开始SCN,则不需要对那个⽂件进⾏恢复。

对每个数据⽂件都完成检查后,打开数据库,锁定数据⽂件,同时将每个数据⽂件的结束SCN设置为⽆穷⼤。

仅在open阶段,oracle才尝试打开并锁定数据⽂件。

当数据库出现故障时,应⾸先检查警告⽇志(alert_.log),该⽇志中记录详细的错误信息和错误号。

1.2进阶内容
1.2.1 SCN
(1)SCN的定义
SCN(System Change Number)就是系统改变号,是⼀种数据结构;
SCN⽤以标识数据库在某个确切时刻提交的版本;在事务提交时,它赋予⼀个唯⼀的标识事务的SCN。

(2)SCN的获取⽅式
select dbms_flashback.get_system_change_number from dual;
1.2.2 检查点
(1)检查点的本质
检查点只是⼀个数据库事件,它存在的根本意义在于减少崩溃恢复时间;
查看当前实例的恢复状态:select 实例名 from v$instance_recovery;
1.3 数据库的实例恢复
实例恢复包括两个步骤:Cache Recovery和Transaction Recovery.
在启动数据库之后可以从alert_.log⽂件中获取数据库恢复的相关信息。

Cache Recovery的过程:⾸先读取⽇志,从最后完成的检查点开始,应⽤所有重做记录。

该过程也称前滚;
在内部事务恢复中,⼀个⼤的事务可以被拆分,分配给⼏个服务器进程进⾏回滚。

可以通过初始化参数
FAST_START_PARALLEL_ROLLBACK来控制并⾏回滚,该参数有3个参数值:
FALSE:禁⽤Fast_Start_Parallel_Rollback;
LOW:限制恢复进程不能超过2倍的CPU_COUNT;
HIGH:限制恢复进程不能超过4倍的CPU_COUNT;
1.3 深⼊分析
1.3.1 获取数据库Open的跟踪⽂件
通过SQL_TRACE获得⼀个跟踪⽂件,跟踪⽂件⾥会记录从mount到open的过程中,Oracle所执⾏的后台操作;
1.3.2 bootstrap及数据库初始化过程 Oracle是在内存中创建bootstrap的结构,然后从数据⽂件的file 1 block 377 读取数据到内存中,完成第⼀次初始化;
bootstrap表中记录了⼀些数据库系统基本对象的创建语句。

Orace通过bootstrap进⾏引导,进⼀步创建相关的重要对象,从⽽启动了数据库。

bootstrap$如果被恶意修改,当数据库关闭后,将⽆法再次启动;
⼆、参数及参数⽂件
2.1 初始化参数的分类
初始化参数可分为:推导参数、操作系统依赖参数和可变参数。

2.1.1 推导参数
推导参数通常来⾃其他参数的运算,依赖其他参数得出。

该类参数⼀般不需要修改。

例如:SESSION参数;
2.1.2 操作系统依赖参数
某些参数的有效值或取值范围或者依赖于操作系统,如db_cache_size参数,设置Oracle使⽤的内存⼤⼩,该参数的最⼤值就受限于物理内存。

2.1.3 可变参数
可变参数通常都可以修改,这些参数的修改关乎于系统性能。

2.1.4 初始化参数的获取
Oracle初始化参数可通过v$PARAMETER视图查询到,经常使⽤show parameter来查询;
以"_"开头的初始化参数称为隐含参数;⼀般不建议修改;
2.2参数⽂件
参数⽂件是⼀个包含⼀系列参数及参数对应值的操作系统⽂件,它有以下两种类型:
初始化参数⽂件
Oracle9i之前⼀直使⽤pfile⽅式存储初始化参数,该⽂件为⽂本⽂件;
服务器参数⽂件
从Oralcle9i开始,Oracle引⼊的spfile⽂件,该⽂件为⼆进制格式;
使⽤pfile存储参数,参数⽂件的修改需要⼿动进⾏,这些参数⽂件在系统实例启动时读取;
通过pfile的修改需要重启实例才能⽣效;
对于spfile⽂件,使⽤spfile⽤户可以通过ALTER SYSTEM或者ALTER SESSION 来修改参数,⽽⽆需⼿⼯修改;
对于动态参数,所有修改可以⽴即⽣效,同时⽤户可以选择使更改只应⽤于当前实例还是同时应⽤到spfile;
对于静态参数,只能将变更应⽤到spfile⽂件,这些变更在数据库重启后⽣效;
另外,spfile是⼀个⼆进制⽂件,可以通过RMAN进⾏备份;
2.2.2 SPFILE的创建
默认情况下,从Oracle9i开始,使⽤spfile启动数据库;spfile必须由pfile创建,新创建的spfile在下⼀次启动数据库时⽣效;CREATE SPFILE需要SYSDBA或者SYSOPER的权限;具体语法如下:
CREATE SPFILE[='SPFILE-NAME'] FROM PFILE[='PFILE-NAME']
例如:
SQL>create spfile from pfile;
spfile默认创建如下缺省系统⽬录:
对于UNIX,⽬录为$ORACLE_HOME/dbs;
对于NT,⽬录为$ORACLE_HOME\database;
Oracel引⼊了⼀个视图来记录spfile的参数设置信息:v$spparameter
2.2.3 SPFILE的搜索顺序
重启数据库,使⽤startup命令,Oracle会按照如下顺序在缺省⽬录下搜索参数⽂件:
(1)spfile.ora,缺省⽬录如下:
UNIX:$ORACLE_HOME/dbs/
NT: %ORACLE_HOME%\database
(2)spfile.ora,缺省⽬录如下:
UNIX:$ORACLE_HOME/dbs/
NT: %ORACLE_HOME%\database
(3)init.ora,缺省⽬录如下:
UNIX:$ORACLE_HOME/dbs/
NT: %ORACLE_HOME%\database
创建了spfile,重新启动数据库,Oralce会按顺序搜索以上⽬录,spfile就会⾃动⽣效!
2.2.4 使⽤PFILE和SPFILE启动数据库
通过在pfile中调⽤spfile,使⽤后设置的参数覆盖spfile中的参数设置,是解决spfile中参数设置错误的⼀种⽅法;
2.2.5 修改参数
可以通过ALTER SYSTEM或导⼊导出来更改spfile的内容;
从Oracle9i开始,ALTER SYSTEM 命令增加了⼀个新的选项scope. scope参数有3个可选值:memory、spfile和both.
memory: 只改变当前实例运⾏,重新启动数据库后失效;
spfile: 只改变spfile的设置,不改变当前实例运⾏,重启数据库后⽣效;
both : 同时改变实例及spfile ,当前更改⽴即⽣效,重启数据库后仍然有效;
针对RAC 环境,ALTER SYSTEM 还可以指定SID参数,对不同实例进⾏不同设置。

所以,通过spfile修改参数的完整命令如下:
alter system set = scope=memory|spfile|both [sid=]
scope参数的⼏个⽤法:
(1)scope=memory
该修改,在重启数据库后即失效;
(2)scope=spfile
当指定scope=spfile时,当前实例运⾏不受影响;
该修改,在下次重启数据库后⽣效;它虽对当前实例⽆效,但可通过v$spparameter视图中查询到。

(3)scope=both
使⽤both选项是实际上等同于不带参数的ALTER SYSTEM语句;
(4)RAC环境中的修改
在RAC环境中,如果不指定SID名称,或者指定为*,那么修改缺省的对所有实例⽣效;
如果需要修改指定的实例,则需要设置相应的SID参数;
(5)在关闭数据库状态修改为spfile
可以在数据库shutdown时创建和修改spfile
如果不慎错误修改了参数导致数据库⽆法启动时,可以通过修改pfile⽂件,修改其中的参数,再由pfile创建spfile的⽅式解决,最好由spfile正常启动数据库;
由spfile创建pfile⽂件语句: create pfile from spfile;
由pfile创建spfile⽂件语句: create spfile from pfile;
由于spfile是⼆进制⽂件,所以不能⽤⼿⼯⽅式去修改。

不然,会损坏该⽂件!
2.2.6 重置spfile中设置的参数
当想要恢复某个参数为缺省值时,可⽤如下命令:
alter system reset parameter sid='sid|*'
2.2.7 是否使⽤了spfile
判断是否使⽤了spfile,可以有以下⼏种⽅法:
(1)查询v parameter动态视图,如果以下查询返回空值,那么你在使⽤pfile SQL> select name,value from v parameter where name='spfile';
(2)使⽤show命令,返回空值,说明使⽤的是pfile
SQL>show parameter spfile;
(3)查询v spparameter视图,如果如下查询结果返回0,表⽰使⽤的是pfile; SQL>select count(*) from v spparameter where value IS NOT NULL;
2.2.8 SPFILE的备份和恢复
如果配置了控制⽂件⾃动备份,那么oracle会在数据库发⽣重⼤变化时⾃动进⾏控制⽂件和spfile的备份。

(1)设置控制⽂件⾃动备份
SQL>rman target /
SQL>CONFIGURE CONTROLFILE AUTOBACKUP ON;
查询是否开启⾃动备份:select * from v$rman_configuration;
(2)使⽤⾃动备份恢复spfile⽂件
SQL>rman target /
SQL>restore spfile to '/tmp/spfileeygle.ora' from autobackup; #恢复spfile⽂件
SQL>restore controlfile to '/tmp/control01.ctl' from autobackup; #恢复控制⽂件
2.2.9 如何设置EVENTS事件
SQL>alter system set event='10841 trace name context forever' scope='spfile'; #设置event事件
SQL>alter system reset event scope=spfile sid='*'; #取消设置event事件
2.2.10 导出spfile⽂件
spfile⽂件可以导出为⽂本⽂件;
SQL>create pfile='e:\initeyglen.ora' from spfile;
2.3 诊断案例
2.3.1 登录系统检查alert.log⽂件
控制警报⽇志⽂件位置的初始化参数是BACKGROUD_DUMP_DEST; 缺省⽂件名为alert_.log
SQL>show parameter backgroud_dump_dest;
2.3.2 尝试重新启动数据库
2.3.3 检查数据⽂件
检查数据⽂件,查看UNDO表是否存在;
2.3.4 mount数据库,检查系统参数
2.3.5 检查参数⽂件
三、数据字典 3.1数据字典概述数据字典是元数据的存储地点。

数据字典包括以下内容:所有数据库Schema对象的定义(表、视图、索引、聚簇、同义词、序列、过程、函数、包、触发器等);数据库空间分配和使⽤情况;字段的缺省值;完整性约束信息; Oracle⽤户名称,⾓⾊、权限等信息;审计信息;其他数据库信息;通常所说的数据字典分为:内部RDBMS(X )表、数据字典表、动态性能(V )视图和数据字典视图。

3.2 内部RDBMS(X)表 X表⽤于跟踪内部数据库信息,维持数据库的正常运⾏。

X表是加密命名的,⽽且Oracle不做⽂档说明。

X表是Oracle数据库的运⾏基础,在数据库启动时由Oracle应⽤程序动态创建。

该表不允许sysdba以外的⽤户访问。

可以通过设置autotrace来查看这些表:set autotrace trace explain; 3.3 数据字典表数据字典表⽤于存储表、索引、约束以及其他数据库结构的信息。

这些对象通常以结尾,在创建数据库的时候通过运⾏sql.bsq脚本来创建! sql.bsq⽂件中包含了数据字典表的定义及注释说明。

该⽂件位
于ORACLE_HOME/dbms/admin⽬录下。

3.4 动态性能视图该视图记录了数据库运⾏时信息和统计数据,⼤部分动态性能视图被实时更新以反映当前数据库状态。

3.4.1 GV和V视图 GV:全局视图,针对多个实例环境; V: 针对某个实例的视图;X:是GV视图的数据来源,oracle内部表; GV_:是GV的同义词; V_: 是V的同义词;我们可以使⽤
V FIXED_VIEW_DEFINITION视图查询到V视图和GV视图的定义。

在ORACLE_HOME/rdbms/admin/catalog.sql中执⾏了cdfixed.sql脚本。

我们在这个脚本中可以找到GV、V_同义词的创建。

SQL>select view_definition from
v fixed_view_definition where view_name='V FIXED_TABLE'; SQL>select view_definition from v fixed_view_definition where view_name='GV FIXED_TABLE'; 从查询结果可以看出:V FIXED_TABLE是基于GV FIXED_TABLE创建。

在进⾏数据访问时,Oracle访问VIEW优先,然后是同义词。

3.4.3 数据字典视图数据字典视图是在X表和数据字典表之上创建的视图,在创建数据库时由catalog.sql脚本创建。

数据字典视图分为如下3类: USER_类视图:包含了⽤户所拥有的相关对象信息;ALL_类视图:包含⽼⽤户有权限访问的所有相关对象信息; DBA_类视图:包含了数据库所有相关对象的信息;通常USER_类视图不包含Owner字段。

Oracle的X表信息可以从v$fixed_table中查询到。

总结下SQL语句中Oracle对于对象名的解析顺序: (1)Oracle⾸先查看在发出命令的⽤户模式中是否存在表或视图; (2)如果表和视图不存在,Oracle检查私有同义词是否存在; (3)如果私有同义词存在,将使⽤这个同义词所引⽤的对象; (4)如果私有同义词不存在,检查同名的公共同义词是否存在; (5)如果公共同义词存在,将使⽤这个同义词所引⽤的对象; (6)如果公共同义词不存在,Oracle返回消
息“ORA-00942 table or view does not exist” 四、内存管理 4.1 SGA管理 4.1.1 什么是SGA SGA指系统全局区(System Global Area),是⼀块⽤于加载数据、对象并保存运⾏状态和数据库控制信息的⼀块内存区域,在数据库实例启动时分配,当实例关闭时释放,每个实例都拥有⾃⼰的SGA区。

当数据库启动到nomount状态,SGA已经分配,同时启动后台进程。

SGA主要有以下⼏个部分组成: (1)Buffer Cache-缓存区⾼速缓存,⽤于存储最近使⽤的数据块,这些数据块可能是被修改过的,也可能是未经修改的。

Buffer Cache的设置由3个参数决定:db_block_size、db_block_buffers、db_cache_size. Buffer Cache的⼤⼩=db_block_size * db_block_buffers. db_cache_size参数⽤于定义主Block Size的Default缓冲池⼤⼩!db_cache_size的⼤⼩取决于估计的SGA的总⼤⼩:如果估计的SGA ⼤⼩<128MB, 则值为4MB;否则值为16MB;
4.2 PGA管理
PGA管理是指程序全局区(Program Global Area),是服务器进程使⽤的⼀块包含数据和控制信息的内存区域,PGA是⾮共享的内存,在服务器进程启动或创建时分配,并为Server Process排他访问。

PGA包含私有SQL区和session信息等内容;
所有服务器进程分配的PGA总和通常被称为PGA合计。

PGA由⼀系列区域组成,这些区域包括主要由*_area_size参数控制。

主要参数有:
Sort_Area_Size;
Hash_Area_Size;
Bitmap_Merge_Size;
Create_Bitmap_Area_Size;
查看当前系统中这些参数的值:show parameter area_size;
可通过⼿⼯修改Sort_Area_Size、Hash_Area_Size等参数值来控制PGA的使⽤;
为实现⾃动的PGA管理,Oracle引⼊了⼏个新的初始化参数:
PGA_AGGREGATE_TARGET:此参数⽤来指定所有session总计可以使⽤最⼤PGA内存。

该参数可被动态修改;
WORKAREA_SIZE_POLICY: 此参数⽤于开关PGA内存⾃动管理功能,该参数有两个选择AUTO和MANUAL, Oracle9i 默认为AUTO;
PGA_AGGREGATE_TARGET参数同时限制全局PGA分配和私有⼯作区内存分配:
(1)对于串⾏操作,单个SQL操作能够使⽤的PGA内存按照如下原则分配:
MIN (5% PGA_AGGREGATE_TARGET,100 MB)
(2)对于并⾏操作:
30% PGA_AGGREGATE_TARGET /DOP (DOP=Degree Of Parallelism 并⾏度)
SQL在⼯作区中以3种⽅式执⾏:
Optimal(优化⽅式):指所有处理可以在内存中完成;
Onepass: ⼤部分操作可以在内存中完成,但是需要使⽤到磁盘操作;
Multipass: ⼤量操作需要产⽣磁盘交互,性能极差;
4.2.2 PGA的调整建议
PGA的优化建议通过v pga_target_advice和v pga_target_advice_histogram提供!
4.3 Oracle的内存分配和使⽤
Oracle数据库在系统占⽤的内存分为两个部分:SGA和PGA.
根据Oracle的建议,Oracle最多可以使⽤80%的物理内存,其余20%保留给操作系统使⽤,在这80%内存中,对于OLTP系统,Oracle建议分配20%给PGA使⽤;对于DSS系统,可以分配50%给PGA使⽤;
对于OLTP系统
PGA_AGGREGATE_TARGET=( * 80%) * 20%
对于DSS系统
PGA_AGGREGATE_TARGET=( * 80%) * 50%
进⼀步归纳⼀下就是SGA+PGA<= * 80%, 也就是:
SGA_MAX_SIZE + PGA_AGGREGATE_TARGET <= * 80%
Processing math: 0%。

相关文档
最新文档