《深入解析Oracle》书评

当前位置:首页 > 计算机网络 > 数据库 > 深入解析Oracle

出版社:人民邮电出版社
出版日期:2009-1-1
ISBN:9787115190772
作者:盖国强
页数:527页

笔记

startup nomount 仅仅启动了实例,参数文件相关记录可查询v$processspfile@.oraspfile.orainit@.orabackgroud_dump_destoracle的instance由SGA和一组后台进程共同组成,进程名由ORACLE_SID决定一个实例可以MOUNT并打开任何数据库,但是同一时间只能一个一个数据库可以被一个或多个实例MOUNT并打开alter database mount; 控制文件被读取alter database open;lsnrctl starttnsping orclalter system set service_names='orcl' scope=both;close dismount shutdownselect current_scn from v$database;alter user scott default tablespace block;alter user scott quota unlimited on block;create spfile from pfile;alter system 参数scope 三个可选值 memory当前重启失效 spfile重启生效 bothsql.bsq dba_objectsselect * from v$version where rownum<2;select table_name ,tablespace_name from user_tables;gv$和v$试图是数据库创建过程中建立的,内置于数据库中,oracle通过V$fixed_view_definition视图为用户展示这些定义。catalog.sqlgrant create session to scott;grant select_catalog_role to scott;grant create procedure to scott;alter procedure userlist complie;set serveroutput on exec userlistoracle访问view优先,然后同义词,v$视图不能授予其他用户。可变PGA通过内存heap分配,包含会话内存和私有SQL区。会话内存共享服务器下共享,SQL区共享服务器在SGA分配,游标。UGA由会话数据,游标状态和索引区组成,共享下是shared pool和large pool一部分,专用下PGA一部分show parameter area_size;sql执行:optimal,onepass,multipass。db_cache_sizemount -t tmpfs shmfs -o size=3192M /dev/shm每个bucket上chunk多于2000个,就被认为shared pool碎片太多。alter session set events 'immediate trace name headdump level 2'v$sqlareav$latch alter system switch logfie;select * from v$log;slect * from emp where empno=7788;archive log list;v$session_wait日志四种类型 current active incactive unusedalter database add logfile group 4 '' size 1 M;alter system archive log sequence 80;alter system set "_allow_resetlogs_corruption"=true scope=spfile;select count(*) from v$event_name;等待事件 log file switch, log file sync,log file single write, log file parallel write, log uffer spaceTX锁,TM锁;MR锁和AE

对得起这个书名

对有一定Oracle基础的人来说,确实是本好书。这本书讲了一些非常internal的东西,有助于深入理解Oracle。比如对SCN的解析非常透彻,对控制文件中SCN和数据文件头的SCN的讲解让我恍然大悟,有一种相见恨晚的感觉。非常值得一读!

深入解析个P

看到这本书 我想到了皇帝的新装,有oracle功力的人稍微看看 就知道这本书写得其实很糟糕,然而介于盖国强的名气都附和称好。大段的trace黏贴,原来简单的东西必须先给你dump一下,一定要搞出那种二进制的,枯燥的dump文件,才能开始讲,OK 要真好好分析下这些trace也算了,很多都是提了下 这样搞搞trace就可以出来了,但具体东西不分析的,直接就跳结论了。所谓深入,也就是拿着dsi的东西转述下。我建议看看tom的书,用简单的东西讲述复杂的问题,不要沉迷于oracle那些独门工具使用,管理数据库是一种思想。其实仔细想想,这和现在社会一样,啥玩意都要搞的人家不懂 才能表现出自己的深奥。神乎奇乎的debug,大段的trace ,大搞个人崇拜,大贴个人照片。一切的一切只为扩大影响力 为拿单子做宣传。我建议所有初学oracle的朋友,大神的书看看便是,千万别钻牛角尖 这样对成长很不好。

读书笔记:深入解析Oracle(作者:盖国强)

深入解析Oracle注1:该笔记为未完成版(最后修改日期为2010.5.4) 注2:转帖请注明出处(笔记作者:城市行走者) 第1章 数据库的启动和关闭1.1 数据库的启动1.1.1 启动数据库到NOMOUNT状态的过程1. 实例及进程的创建2. V$PROCESS视图3. 参数文件的选择4. 实例启动最小参数需求5. ORACLE_SID的含义6. INSTANCE_NAME的含义7.DB_NAME8.RMAN的缺省实例1.1.2 启动数据库到MOUNT状态1. 控制文件的定位2. 数据文件的存在性判断3. 控制文件的HeartBeat(略)4. 口令文件的作用(略)5. lk<ORACLE_SID>文件及作用(略)6. MOUNT相同DB_NAME的数据库(略)1.1.3 启动数据库OPEN阶段1. OPEN阶段的一致性校验2. Oracle 11g Automatic Diagnostic Repository新特性(略)3. Oracle 11g Fault Diagnosability Infrastration 新特性(略)4. 关于诊断的建议1.2 数据库的访问1.2.1 客户端的tnsnames.ora文件配置1.2.2 服务器端的监听器文件listener.ora配置1.2.3 通过不同服务名对数据库访问1.2.4 动态监听器注册服务1.3 数据库的关闭第2章 控制文件与数据库初始化2.1 控制文件的内容2.2 SCN(系统改变号)2.2.1 SCN的定义2.2.2 SCN的获取方式2.2.3 SCN的进一步说明2.3 CHECKPOINT(检查点)2.3.1 Checkpoint(检查点)的工作原理2.3.2 常规检查点(完全检查点)与增量检查点(略)2.3.3 LOG_CHECKPOINT_TO_ALERT参数2.3.4 控制文件与数据文件头信息2.3.5 数据库的启动验证2.3.6 使用备份的控制文件(略)2.3.7 FAST_START_MTTR_TARGET(略)2.3.8 关于检查点执行的案例(略)2.3.9 Oracle 10g自动检查点设置(略)2.3.10 检查点信息及恢复起点(略)2.3.11 正常关闭数据库的状况2.3.12 异常关闭数据库的情况2.3.13 数据库并行恢复案例一则(略)2.3.14 判断一个死事务的恢复进度(略)2.4 数据库的初始化(略)第3章 参数及参数文件3.1 初始化参数的分类3.1.1 推导参数(Derived Parameters)3.1.2 操作系统依赖参数3.1.3 可变参数3.1.4 初始化参数的获取3.2 参数文件3.2.1 PFILE和SPFILE3.2.2 获取参数的视图3.2.3 SPFILE的创建3.2.4 参数文件的搜索顺序3.2.5 使用PFILE/SPFILE启动数据库3.2.6 修改SPFILE文件的参数3.2.7 解决SPFILE参数修改的错误3.2.8 重置SPFILE中设置的参数3.2.9 判断是否使用了SPFILE3.2.10 SPFILE的备份与恢复1. 设置控制文件自动备份2. 更改自动备份的位置3. 检查自动备份4. 记录数据库变化5. 测试3.2.11 Oracle 11g参数文件恢复3.2.12 如何设置Events事件(略)3.2.13 导出SPFILE参数文件3.3 案例诊断之一:参数文件3.4 案例诊断之二:RAC环境参数文件第4章 数据字典4.1 数据字典概述4.2 内部RDBMS(X$)表(略)4.3 数据字典表(略)4.4 静态数据字典视图4.4.1 静态数据字典视图的分类4.4.2 静态数据字典视图的内部实现(略)4.4.3 常用的数据字典视图举例1. DICT/DICTIONARY2. DICT_COLUMES3. OBJ$/DBA_OBJECTS/OBJ4. DBA_SOURCE4.5 动态性能视图(V$)4.5.1 GV$和V$视图4.5.2 GV_$、V_$视图和GV$、V$同义词(略)4.5.3 进一步说明(略)4.5.4 动态性能视图与数据库启动4.6 最后的验证(略)第5章 内存管理5.1 PGA管理5.1.1 什么是PGA5.1.2 UGA与CGA5.1.3 PGA管理技术变迁5.1.4 参数的设置与内存分配5.1.5 自动PGA管理实现原理(略)5.1.6 PGA的调整建议5.1.7 PGA的转储(略)5.2 SGA管理5.2.1 SGA的组成1. 固定区域2. Buffer Cache3. Shared Pool4. Redo Log Buffer5. 其他内存组件(有疑问)5.2.2 SGA与共享内存(略)5.2.3 SGA管理的变迁1. 8i中的静态SGA管理(略)2. 9i中的静态SGA管理3. 10g中的自动共享内存调整4. 11g中的自动内存管理5.3 ORACLE的内存分配和使用5.3.1 案例诊断一:SGA和SWAP5.3.2 案例诊断二:SGA设置过高导致的系统故障5.3.3 案例诊断三:如何诊断和解决CPU高度消耗问题第6章 BUFFER CACHE与SHARE POOL原理(略)6.1 BUFFER CACHE原理6.1.1 LRU与Dirty List第7章 重做(RODO)7.1 RODO的作用7.2 REDO的原理7.3 REDO与LATCH(略)7.4 ORACLE 9I REDO的增强(略)7.5 ORACLE 10G REDO的增强(略)7.6 REDO的内容(TRACE文件还是看不懂)7.7 产生多少REDO7.8 REDO写的触发条件7.8.1 每3秒超市(Timeout)7.8.2 阈值达到7.8.3 用户提交7.8.4 在DBWn写之前(不懂)7.9 REDO LOG BUFFER的大小设置7.10 COMMIT做了什么7.11 日志的状态7.12 日志的块大小(略)7.13 日志文件的大小(本节没有讲具体的优化原则、方法)7.14 如何调整日志文件大小7.15 热备份期间的REDO(略)7.16 能否不生成REDO(暂时略,需结合后面章节一起看)7.17 REDO故障的恢复7.17.1 丢失非活动日志组的故障恢复7.17.2 丢失活动或当前日志文件的恢复7.18 案例一:通过CLEAR日志恢复数据库7.19 案例二:日志组过度激活的诊断7.20 数值在ORACLE内部存储第1章 数据库的启动和关闭通常所说的Oracle Server主要有两个部分组成:Instance和Database。Instance是指一组后台进程和一块共享内存区域。Database是指存储在磁盘上的一组物理文件。通过Instance和Database的协同,Oracle才能形成一个动态的可访问的关系数据库模型。1.1 数据库的启动启动过程: NOMOUNT:启动实例(这个步骤只和参数文件相关)。 MOUNT:打开控制文件;并进行数据文件的存在性判断。 OPEN:打开所有控制文件中描述的文件;并进行检查点及完整性检查。1.1.1 启动数据库到NOMOUNT状态的过程1. 实例及进程的创建启动过程:SQL> startup nomountORACLE 例程已经启动。Total System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytesOracle根据参数文件内容,创建了Instance,分配了相应的内存区域,启动了相应的后台进程。告警日志文件:Sun Mar 21 00:18:13 2010Starting ORACLE instance (normal)LICENSE_MAX_SESSION = 0LICENSE_SESSIONS_WARNING = 0Picked latch-free SCN scheme 2KCCDEBUG_LEVEL = 0Autotune of undo retention is turned on. Dynamic strands is set to TRUERunning with 1 shared and 18 private strand(s). Zero-copy redo is FALSEIMODE=BRILAT =18LICENSE_MAX_USERS = 0SYS auditing is disabledStarting up ORACLE RDBMS Version: 10.1.0.2.0.System parameters with non-default values:processes = 150shared_pool_size = 83886080large_pool_size = 8388608java_pool_size = 0control_files = D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL03.CTLdb_block_size = 8192db_cache_size = 25165824compatible = 10.1.0.2.0log_archive_dest_1 = location=d:\oracle\archive1\log_archive_dest_2 = location=d:\oracle\archive2\db_file_multiblock_read_count= 16db_recovery_file_dest = D:\oracle\product\10.1.0\flash_recovery_areadb_recovery_file_dest_size= 2147483648undo_management = AUTOundo_tablespace = UNDOTBS1remote_login_passwordfile= EXCLUSIVEdb_domain = local_listener = LISTENER_OCP10Gjob_queue_processes = 10background_dump_dest = D:\ORACLE\PRODUCT\10.1.0\ADMIN\OCP10G\BDUMPuser_dump_dest = D:\ORACLE\PRODUCT\10.1.0\ADMIN\OCP10G\UDUMPcore_dump_dest = D:\ORACLE\PRODUCT\10.1.0\ADMIN\OCP10G\CDUMPsort_area_size = 65536db_name = OCP10Gopen_cursors = 300pga_aggregate_target = 25165824PMON started with pid=2, OS id=2712MMAN started with pid=3, OS id=2164DBW0 started with pid=4, OS id=3296LGWR started with pid=5, OS id=3640CKPT started with pid=6, OS id=2568SMON started with pid=7, OS id=2360RECO started with pid=8, OS id=692CJQ0 started with pid=9, OS id=7362. V$PROCESS视图通过V$PROCESS视图,可以找到对应于操作系统的每个进程信息。3. 参数文件的选择启动过程中Oracle选择参数文件的顺序为:spfile<ORACLE_SID>.oraspfile.orainit<ORACLE_SID>.ora如果三个文件都不存在,则Oracle无法启动实例。4. 实例启动最小参数需求在参数文件中,通常需要最少的参数是DB_NAME.5. ORACLE_SID的含义当Oracle实例启动时,在操作系统上fork的进程就是一句这个ORACLE_SID来创建,这就是ORACLE_SID的作用。后台进程的名称是通过ORACLE_SID决定的。参数文件的名称是通过ORACLE_SID决定的。6. INSTANCE_NAME的含义INSTANCE_NAME用于标识数据库实例的名称,其缺省值通常是ORACLE_SID。INSTANCE_NAME的另一个作用是,在监听器动态注册时作为缺省的服务名注册。监听器(listener)配置文件中的SID_NAME就是来自INSTANCE_NAME参数,监听器通过INSTANCE_NAME才能确定将连接请求注册到哪一个实例上。SID_LIST_LISTENER2 =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = ocp10g)(SID_NAME = ocp10g))7.DB_NAMEDB_NAME代表了实例即将挂接的数据库的名称,关系到具体的物理文件。通常数据库缺省的INSTANCE_NAME和DB_NAME可以设置相同。(在RAC环境下,由于多个实例对应一个数据库,所以INSTANCE_NAME和DB_NAME不同)。总结:一个实例(INSTANCE_NAME)可以mount并打开任何数据库(DB_NAME),但是同一时间一个实例只能打开一个数据库;一个数据库(DB_NAME)可以为任何实例(INSTANCE_NAME)所打开(但是在非OPS/RAC情况下,同时只能被一个实例打开)8.RMAN的缺省实例在使用RMAN时,Oracle允许在不存在参数的情况下启动一个实例,数据库的DB_NAME会被缺省的命名为DUMMY。1.1.2 启动数据库到MOUNT状态 MOUNT:打开控制文件;并进行数据文件的存在性判断。加载过程:SQL> alter database mount;数据库已更改。告警日志:Sun Mar 21 01:18:02 2010alter database mountSun Mar 21 01:18:03 2010Controlfile identified with block size 16384Sun Mar 21 01:18:07 2010Setting recovery target incarnation to 2Sun Mar 21 01:18:07 2010Successful mount of redo thread 1, with mount id 3562458506Sun Mar 21 01:18:07 2010Database mounted in Exclusive Mode.Completed: alter database mount1. 控制文件的定位涉及到参数文件恢复的问题。2. 数据文件的存在性判断如果数据文件不存在,则后台进程将在告警日志文件中记录文件缺失信息,并却在动态视图(比如v$recover_file)中记录这些信息。3. 控制文件的HeartBeat(略)HeartBeat表明实例已经被特定的例程所Mount,这个属性主要用于OPS/RAC环境。SQL> select event#,event_id,name from v$event_name where name like '%heartbeat%';EVENT# EVENT_ID NAME---------- ---------- -------------------------175 40893507 control file heartbeat755 1299431751 ASM mount : wait for heartbeat4. 口令文件的作用(略)5. lk<ORACLE_SID>文件及作用(略)6. MOUNT相同DB_NAME的数据库(略)1.1.3 启动数据库OPEN阶段打开所有控制文件中描述的文件;并进行检查点及完整性检查。打开过程:SQL> alter database open;数据库已更改。告警日志:Sun Mar 21 01:20:34 2010alter database openSun Mar 21 01:20:35 2010Maximum redo generation record size = 120832 bytesMaximum redo generation change vector size = 116476 bytesPrivate_strands 4 at log switchThread 1 opened at log sequence 681Current log# 3 seq# 681 mem# 0: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOGCurrent log# 3 seq# 681 mem# 1: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOGSuccessful open of redo thread 1Sun Mar 21 01:20:35 2010MTTR advisory is disabled because FAST_START_MTTR_TARGET is not setSun Mar 21 01:20:35 2010SMON: enabling cache recoverySun Mar 21 01:20:36 2010Successfully onlined Undo Tablespace 1.Sun Mar 21 01:20:36 2010SMON: enabling tx recoverySun Mar 21 01:20:36 2010Database Characterset is ZHS16GBKSun Mar 21 01:20:36 2010Published database character set on system events channelSun Mar 21 01:20:36 2010All processes have switched to database character setSun Mar 21 01:20:39 2010Starting background process QMNCQMNC started with pid=11, OS id=2068Sun Mar 21 01:20:40 2010replication_dependency_tracking turned off (no async multimaster replication found)Sun Mar 21 01:20:41 2010Starting background process MMONStarting background process MMNLMMNL started with pid=13, OS id=120Sun Mar 21 01:20:41 2010Completed: alter database openMMON started with pid=12, OS id=2308Sun Mar 21 01:20:46 2010db_recovery_file_dest_size of 2048 MB is 0.15% used. This is auser-specified limit on the amount of space that will be used by thisdatabase for recovery-related files, and does not reflect the amount ofspace available in the underlying filesystem or ASM diskgroup.1. OPEN阶段的一致性校验在数据库的OPEN阶段过程中,Oracle进行的检查包括以下两项:1、第一次检查数据文件头中的检查点计数(Checkpoint CNT)是否和控制文件中的检查点计数(Checkpoint CNT)相一致。此步骤检查用已确认数据文件是来自同一版本,而不是从备份中恢复而来的(因为检查点计数Checkpoint CNT不会被冻结,会一直被修改)。2、第二次检查数据文件头的开始SCN和控制文件中记录的该文件的结束SCN是否一致,如果一致,则不需对该文件恢复。对每个数据文件完成检查后,打开数据库,锁定数据文件,同时将每个数据文件的结束SCN设置为无穷大。本节的例子不全面,后面有详细的介绍:2.3.5(P66),后面的例子是完整的启动过程。2. Oracle 11g Automatic Diagnostic Repository新特性(略)3. Oracle 11g Fault Diagnosability Infrastration 新特性(略)4. 关于诊断的建议注意:在数据库出现问题的时候,首先检查告警日志文件,研究其中的告警信息或者提供给他人寻求帮助,这是通常解决问题的第一个步骤。启动日志中的每条信息都是值得研究的。1.2 数据库的访问1.2.1 客户端的tnsnames.ora文件配置一段典型的配置如下:v2p =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.32.40)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = v2p)))v2ptj =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = *.*.32.36)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = v2p)))SERVICE_NAME用于标识访问的数据库服务配置完成后,可以通过tnsping工具进行连通性测试:C:\Documents and Settings\Owner>tnsping v2ptjTNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 24-3月 -2010 22:08:28Copyright (c) 1997, 2003, Oracle. All rights reserved.已使用的参数文件:D:\oracle\product\10.1.0\db_1\network\admin\sqlnet.ora已使用 TNSNAMES 适配器来解析别名Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = *.*.32.36)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = v2p)))OK (20 毫秒)如果能够顺利通信,则可以通过SQL*Plus或其他工具通过网络服务名进行数据库网络访问:C:\Documents and Settings\Owner>sqlplus username/password@v2ptjSQL*Plus: Release 10.1.0.2.0 - Production on 星期三 3月 24 22:12:11 2010Copyright (c) 1982, 2004, Oracle. All rights reserved.连接到:Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit ProductionWith the Partitioning optionJServer Release 9.2.0.6.0 - ProductionSQL>1.2.2 服务器端的监听器文件listener.ora配置查看Oracle数据库的service_name参数:SQL> show parameter service_nameNAME TYPE VALUE---------- ------- -----------service_names string v2p一段典型的监听器文件listener.ora配置:$ hostnameP570A$ pwd/oracle2/app/oracle/product/9.2.0/network/admin$ more listener.ora# LISTENER.ORA.P570A Network Configuration File: /oracle2/app/oracle/product/9.2.0/network/admin/listener.ora.P570A# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = P570A)(PORT = 1521)))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = /oracle2/app/oracle/product/9.2.0)(PROGRAM = extproc)))第一部分LISTENER信息,这部分包含了监听的协议、地址、端口等信息。第二部分SID_LIST_LISTENER信息,这部分信息用于提供对外的数据库服务列表。第一个SID_DESC部分(SID_NAME = PLSExtProc)是数据库缺省就包含的对外部存储过程提供的本地监听。oracle1@P570A/oracle1#lsnrctl statusLSNRCTL for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - Production on 24-MAR-2010 23:31:28Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=P570A)(PORT=1521)))STATUS of the LISTENER------------------------Alias LISTENERVersion TNSLSNR for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - ProductionStart Date 25-MAY-2009 22:41:02Uptime 303 days 0 hr. 50 min. 26 secTrace Level offSecurity OFFSNMP OFFListener Parameter File /oracle1/app/oracle/product/9.2.0/network/admin/listener.oraListener Log File /oracle1/app/oracle/product/9.2.0/network/log/listener.logListening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=P570A)(PORT=1521)))Services Summary...Service "PLSExtProc" has 1 instance(s).Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...Service "his" has 1 instance(s).Instance "his", status READY, has 1 handler(s) for this service...Service "v2p" has 2 instance(s).Instance "v2p", status BLOCKED, has 1 handler(s) for this service...Instance "v2p", status READY, has 1 handler(s) for this service...The command completed successfully1.2.3 通过不同服务名对数据库访问1.2.4 动态监听器注册服务所谓当台注册是指,当实例启动之后,有后台进程PMON在监听器中注册数据库服务信息。动态注册的服务名,由于监听器确切地知道实例的状态,所以正常状态通常显示为READY,而对于静态注册的服务名,则状态显示为UNKNOW。Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=P570A)(PORT=1521)))Services Summary...Service "PLSExtProc" has 1 instance(s).Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...Service "v2p" has 2 instance(s).Instance "v2p", status BLOCKED, has 1 handler(s) for this service...Instance "v2p", status READY, has 1 handler(s) for this service...如果监听器具有缺省的名称、端口及协议,则无需任何特殊的配置,Oracle就能够执行动态注册。例如:SQL> show parameter local_listenerNAME TYPE VALUE------------------------ ---------- ------------local_listener string 但是如果监听器具有非缺省配置,则需要设置local_listener参数。关于共享服务器模式和RAC环境的部分,暂时略。1.3 数据库的关闭shutdown immediate是一种最为常见的数据库关闭方式。需补充如果不得不用非常规方式关闭数据库,可以在关闭数据库之前执行一次checkpoint(alter system checkpoint),如果此后再使用ABORT方式关闭数据库,那么在下次启动恢复时,需要恢复的数据就可以减少。第2章 控制文件与数据库初始化2.1 控制文件的内容控制文件中保存着下列信息:。。。检查点及SCN信息P51由于控制文件是个二进制文件,无法直接打开查阅,但是可以通过下面的命令将控制文件的内容转储出来查看:alter session set events 'immediate trace name controlf level 8';2.2 SCN(系统改变号)2.2.1 SCN的定义SCN是Oracle内部的时钟机制,Oracle通过SCN来维护数据库的一致性,并通过SCN实施Oraclede恢复机制。SCN通常在系统提交或回滚时改变。2.2.2 SCN的获取方式1、从Oracle 9i开始:SQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------136992372、从Oracle 10g开始,在V$DATABASE视图中增加了current_scn字段:SQL> select current_scn from v$database;CURRENT_SCN-----------136992372.2.3 SCN的进一步说明SCN通常在系统提交或回滚时改变,在控制文件、数据文件头、数据块、日志文件头、日志文件change vector中都有SCN,但其作用各不相同。1、数据文件头中包含了该数据文件的Checkpoint SCN,表示该数据文件最近一次执行检查点操作时的SCN。2、日志文件头中包含了Low SCN和Next SCN。这两个SCN标示该日志包含有从Low SCN到Next SCN的重做信息。对于CURRENT的日志文件(当前正在使用的Redo Logfile),其最终SCN不可知,所以Next SCN被设置为无穷大,也就是ffffffff。SQL> select * from v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 715 10485760 2 NO INACTIVE 13688389 2010-3-25 52 1 716 10485760 2 NO CURRENT 13697204 2010-3-25 93 1 714 10485760 2 NO INACTIVE 13679431 2010-3-25 1SQL> select GROUP#,STATUS,FIRST_CHANGE#,FIRST_TIME from v$log;GROUP# STATUS FIRST_CHANGE# FIRST_TIME---------- ---------------- ------------- -----------1 INACTIVE 13688389 2010-3-25 52 CURRENT 13697204 2010-3-25 93 INACTIVE 13679431 2010-3-25 1SQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------13700036SQL> alter system switch logfile;System alteredSQL> select GROUP#,STATUS,FIRST_CHANGE#,FIRST_TIME from v$log;GROUP# STATUS FIRST_CHANGE# FIRST_TIME---------- ---------------- ------------- -----------1 INACTIVE 13688389 2010-3-25 52 ACTIVE 13697204 2010-3-25 93 CURRENT 13700053 2010-3-25 1SQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------13700066控制文件的转储中可以看到Low SCN和Next SCN。P56,略2.3 Checkpoint(检查点)检查点事件由CKPT后台进程触发,当检查点发生时,CKPT进程会负责通知DBWR进程将脏数据(Dirty Buffer)写出到数据文件上。Checkpoint的另外一个职责是负责更新数据文件头及控制文件上的检查点信息。检查点事件存在的根本意义在于减少崩溃恢复(Crash Recovery)的时间。参考2.3.7(P73)。2.3.1 Checkpoint(检查点)的工作原理P57-P58SQL> select dbid,name,checkpoint_change#,current_scn from v$database;DBID NAME CHECKPOINT_CHANGE# CURRENT_SCN---------- --------- ------------------ -----------3542321520 OCP10G 13715332 13715775SQL> select file#,checkpoint_change#,checkpoint_time from v$datafile;FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME---------- ------------------ ---------------1 13715332 2010-3-25 17:072 13715332 2010-3-25 17:073 13715332 2010-3-25 17:074 13715332 2010-3-25 17:075 13715332 2010-3-25 17:072.3.2 常规检查点(完全检查点)与增量检查点(略)常规检查点(完全检查点)时,CKPT进程需要写出全部脏数据,同时更新数据文件头及控制文件上的检查点信息。增量检查点时,CKPT进程进行轻量级更新,并不会更新数据文件头及控制文件上的检查点信息。而只是记录控制文件检查点SCN(Controlfile Checkpointed at scn)并且根据增量检查点的写出增进RBA(Redo Byte Address)信息。(不理解)从Oracle 8i开始,完全检查点仅在以下两种情况下出现:1、ALTER SYSTEM CHECKPOINT;2、SHUTDOWN (除了ABORT方式外)。LOG SWITCH事件同样触发的是增量检查点,但是在LOG SWITCH触发的检查点促使数据文件头与控制文件信息的同步。(作者在这里说的不明白,也没有举例)2.3.3 LOG_CHECKPOINT_TO_ALERT参数SQL> alter system set log_checkpoints_to_alert =true;System altered日志文件中信息:Thu Mar 25 11:23:57 2010ALTER SYSTEM SET log_checkpoints_to_alert=TRUE SCOPE=BOTH;... ...Thu Mar 25 15:24:26 2010Private_strands 7 at log switchBeginning log switch checkpoint up to RBA [0x2d0.2.10], SCN: 0x0000.00d13865 (也就是十进制的13711461)Thread 1 advanced to log sequence 720Current log# 3 seq# 720 mem# 0: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOGCurrent log# 3 seq# 720 mem# 1: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOGThu Mar 25 15:29:34 2010Completed checkpoint up to RBA [0x2d0.2.10], SCN: 13711461Thu Mar 25 15:33:55 2010Incremental checkpoint up to RBA [0x2d0.65.0], current log tail at RBA [0x2d0.b4.0]Thu Mar 25 16:04:42 2010Incremental checkpoint up to RBA [0x2d0.39f.0], current log tail at RBA [0x2d0.ff9.0]Thu Mar 25 16:35:28 2010Incremental checkpoint up to RBA [0x2d0.1343.0], current log tail at RBA [0x2d0.13bc.0]... ...具体的解释参考P64此时,数据库的SCN和检查点分别为SQL> select current_scn,checkpoint_change# from v$database;CURRENT_SCN CHECKPOINT_CHANGE#----------- ------------------13714637 137114612.3.4 控制文件与数据文件头信息需要进行转储SQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mountORACLE 例程已经启动。Total System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytes数据库装载完毕。SQL> alter session set events 'immediate trace name file_hdrs level 10';会话已更改。trace文件内容包含两部分,一部分来自控制文件,另一部分来自数据文件:*** 2010-03-28 16:05:39.781DUMP OF DATA FILES: 6 files in databaseDATA FILE #4: (name #8) D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.DBFcreation size=640 block size=8192 status=0xe head=8 tail=8 dup=1tablespace 4, index=5 krfil=4 prev_file=0unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00Checkpoint cnt:2885 scn: 0x0000.00d3cf84 03/28/2010 13:10:58Stop scn: 0x0000.00d3cf84 03/28/2010 13:10:58Creation Checkpointed at scn: 0x0000.00001c2c 08/05/2009 00:41:52thread:1 rba:(0x2.2114.10)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Offline scn: 0x0000.00879357 prev_range: 0Online Checkpointed at scn: 0x0000.00879358 12/29/2009 17:54:09thread:1 rba:(0x1.2.0)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Hot Backup end marker scn: 0x0000.00000000aux_file is NOT DEFINED V10 STYLE FILE HEADER:Compatibility Vsn = 168821248=0xa100200Db ID=3542321520=0xd3238970, Db Name='OCP10G'Activation ID=0=0x0Control Seq=467447=0x721f7, File size=640=0x280File Number=4, Blksiz=8192, File Type=3 DATATablespace #4 - USERS rel_fn:4 Creation at scn: 0x0000.00001c2c 08/05/2009 00:41:52Backup taken at scn: 0x0000.00000000 01/01/1988 00:00:00 thread:0reset logs count:0x2a227b41 scn: 0x0000.00879358 reset logs terminal rcv data:0x0 scn: 0x0000.00000000prev reset logs count:0x295e6b30 scn: 0x0000.00000001 prev reset logs terminal rcv data:0x0 scn: 0x0000.00000000recovered at 03/06/2010 10:35:08status:0x0 root dba:0x00000000 chkpt cnt: 2885 ctl cnt:2884begin-hot-backup file size: 0Checkpointed at scn: 0x0000.00d3cf84 03/28/2010 13:10:58thread:1 rba:(0x308.24d3.10)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Backup Checkpointed at scn: 0x0000.00000000 thread:0 rba:(0x0.0.0)enabled threads: 00000000 00000000 00000000 00000000 00000000 0000000000000000 00000000External cache id: 0x0 0x0 0x0 0x0Absolute fuzzy scn: 0x0000.00000000Recovery fuzzy scn: 0x0000.00000000 01/01/1988 00:00:00Terminal Recovery Stamp scn: 0x0000.00000000 01/01/1988 00:00:00Platform Information: Creation Platform ID: 7Current Platform ID: 7 Last Platform ID: 72.3.5 数据库的启动验证在数据库的OPEN阶段过程中,Oracle进行的检查包括以下两项:1、第一次检查数据文件头中的检查点计数(Checkpoint CNT)是否和控制文件中的检查点计数(Checkpoint CNT)相一致。此步骤检查用已确认数据文件是来自同一版本,而不是从备份中恢复而来的(因为检查点计数Checkpoint CNT不会被冻结,会一直被修改)。2、第二次检查数据文件头的开始SCN和控制文件中记录的该文件的结束SCN是否一致,如果一致,则不需对该文件恢复。对每个数据文件完成检查后,打开数据库,锁定数据文件,同时将每个数据文件的结束SCN设置为无穷大。(上一节的实验没有做到这一步alter database open)具体例子见上一节2.3.4。2.3.6 使用备份的控制文件(略)2.3.7 FAST_START_MTTR_TARGET(略)在数据库中,增量检查点是通过Fast_Start Checkpointing特性来实现的。SQL> select parameter,value from v$option2 where parameter='Fast-Start Fault Recovery';PARAMETER VALUE------------------------------------------- --------------Fast-Start Fault Recovery TRUESQL> show parameter fast_start_mttr_target NAME TYPE VALUE------------------------------- ----------- ----------fast_start_mttr_target integer 300当前的实例恢复状态可以通过v$instance_recovery视图查询得到“SQL> select target_mttr,estimated_mttr from v$instance_recovery;TARGET_MTTR ESTIMATED_MTTR----------- --------------300 7当ESTIMATED_MTTR接近或超过FAST_START_MTTR_TARGET参数设置(v$instance_recovery.TARGET_MTTR)时,系统会触发检查点,执行写出。2.3.8 关于检查点执行的案例(略)2.3.9 Oracle 10g自动检查点设置(略)生产系统没有使用这一特性。在实验系统上SQL> select TARGET_MTTR,ESTIMATED_MTTR,WRITES_AUTOTUNE,CKPT_BLOCK_WRITES2 from v$instance_recovery;TARGET_MTTR ESTIMATED_MTTR WRITES_AUTOTUNE CKPT_BLOCK_WRITES----------- -------------- --------------- -----------------0 28 120702 95327SQL> select name,value from v$sysstat where upper(name) like '%DBWR%';NAME VALUE------------------------------------------------- ----------DBWR checkpoint buffers written 122395DBWR thread checkpoint buffers written 1693DBWR tablespace checkpoint buffers written 0......具体字段值参考P762.3.10 检查点信息及恢复起点(略)参考2.3.2(P59)2.3.11 正常关闭数据库的状况常规关闭数据库(即除了shutdown abort方式之外)后,下次启动时不需要执行恢复,这是因为常规关闭数据库时执行了完全检查点(Full Checkpoint),所有脏数据已经写入到数据文件。在控制文件的数据文件信息部分,对于每一个数据文件都有一个Checkpoint SCN和Stop SCN,用于启动时校验判断。SQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。SQL> startup mountORACLE 例程已经启动。Total System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytes数据库装载完毕。SQL> alter session set events 'immediate trace name CONTROLF level 12';会话已更改。trace文件中会记录控制文件的详细内容:*** 2010-03-28 13:14:26.640*** SERVICE NAME:() 2010-03-28 13:14:26.609*** SESSION ID:(162.7) 2010-03-28 13:14:26.609DUMP OF CONTROL FILES, Seq # 467449 = 0x721f91、数据库的相关信息:***************************************************************************DATABASE ENTRY***************************************************************************(blkno = 0x1, size = 192, max = 1, in-use = 1, last-recid= 0)08/05/2009 00:41:20DB Name "OCP10G"Database flags = 0x00404000 0x00000000Controlfile Creation Timestamp 08/05/2009 00:41:20Incmplt recovery scn: 0x0000.00000000Resetlogs scn: 0x0000.00879358 Resetlogs Timestamp 12/29/2009 17:54:09Prior resetlogs scn: 0x0000.00000001 Prior resetlogs Timestamp 08/05/2009 00:41:20Redo Version: compatible=0xa100200#Data files = 5, #Online files = 5Database checkpoint: Thread=1 scn: 0x0000.00d3cf84Threads: #Enabled=1, #Open=0, Head=0, Tail=0enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Max log members = 3, Max data members = 1Arch list: Head=3, Tail=3, Force scn: 0x0000.00d3774escn: 0x0000.00a426d6Controlfile Checkpointed at scn: 0x0000.00d3c0b3 03/28/2010 11:33:23thread:0 rba:(0x0.0.0)enabled threads: 00000000 00000000 00000000 00000000 00000000 0000000000000000 000000002、Redo检查点信息***************************************************************************REDO THREAD RECORDS***************************************************************************(blkno = 0x8, size = 104, max = 8, in-use = 1, last-recid= 0)THREAD #1 - status:0xe thread links forward:0 back:0#logs:3 first:1 last:3 current:2 last used seq#:0x308enabled at scn: 0x0000.00879358 12/29/2009 17:54:09disabled at scn: 0x0000.00000000 01/01/1988 00:00:00opened at 03/21/2010 01:20:35 by instance ocp10gCheckpointed at scn: 0x0000.00d3cf84 03/28/2010 13:10:58thread:1 rba:(0x308.24d3.10)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000log history: 26033、数据文件检查点信息***************************************************************************DATA FILE RECORDS***************************************************************************DATA FILE #4: (name #8) D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.DBFcreation size=640 block size=8192 status=0xe head=8 tail=8 dup=1tablespace 4, index=5 krfil=4 prev_file=0unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00Checkpoint cnt:2885 scn: 0x0000.00d3cf84 03/28/2010 13:10:58Stop scn: 0x0000.00d3cf84 03/28/2010 13:10:58Creation Checkpointed at scn: 0x0000.00001c2c 08/05/2009 00:41:52thread:1 rba:(0x2.2114.10)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Offline scn: 0x0000.00879357 prev_range: 0Online Checkpointed at scn: 0x0000.00879358 12/29/2009 17:54:09thread:1 rba:(0x1.2.0)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Hot Backup end marker scn: 0x0000.00000000aux_file is NOT DEFINED注意:常规关闭数据库时执行了完全检查点(Full Checkpoint),所有脏数据已经写入到数据文件;数据文件处于一致状态。Checkpoint SCN和Stop SCN相等(0x0000.00d3cf84)。可以参考2.3.4以及2.3.5。例子本质都相同,虽然前面的例子是转储数据文件头file_hdr,本节的例子是转储控制文件CONTROLF。2.3.12 异常关闭数据库的情况SQL> shutdown abortORACLE 例程已经关闭。SQL> startup mountORACLE 例程已经启动。Total System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytes数据库装载完毕。SQL> alter session set events 'immediate trace name CONTROLF level 12';会话已更改。trace文件中会记录控制文件的详细内容:*** 2010-03-28 16:47:41.921*** SERVICE NAME:() 2010-03-28 16:47:41.890*** SESSION ID:(162.7) 2010-03-28 16:47:41.890DUMP OF CONTROL FILES, Seq # 467453 = 0x721fd1、数据库的相关信息:***************************************************************************DATABASE ENTRY***************************************************************************(blkno = 0x1, size = 192, max = 1, in-use = 1, last-recid= 0)08/05/2009 00:41:20DB Name "OCP10G"Database flags = 0x00404000 0x00000000Controlfile Creation Timestamp 08/05/2009 00:41:20Incmplt recovery scn: 0x0000.00000000Resetlogs scn: 0x0000.00879358 Resetlogs Timestamp 12/29/2009 17:54:09Prior resetlogs scn: 0x0000.00000001 Prior resetlogs Timestamp 08/05/2009 00:41:20Redo Version: compatible=0xa100200#Data files = 5, #Online files = 5Database checkpoint: Thread=1 scn: 0x0000.00d3cf85Threads: #Enabled=1, #Open=1, Head=1, Tail=1enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Max log members = 3, Max data members = 1Arch list: Head=3, Tail=3, Force scn: 0x0000.00d3774escn: 0x0000.00a426d6Controlfile Checkpointed at scn: 0x0000.00d3cffa 03/28/2010 16:45:16thread:0 rba:(0x0.0.0)enabled threads: 00000000 00000000 00000000 00000000 00000000 0000000000000000 000000002、Redo检查点信息***************************************************************************REDO THREAD RECORDS***************************************************************************(blkno = 0x8, size = 104, max = 8, in-use = 1, last-recid= 0)THREAD #1 - status:0xf thread links forward:0 back:0#logs:3 first:1 last:3 current:2 last used seq#:0x308enabled at scn: 0x0000.00879358 12/29/2009 17:54:09disabled at scn: 0x0000.00000000 01/01/1988 00:00:00opened at 03/28/2010 16:45:08 by instance ocp10gCheckpointed at scn: 0x0000.00d3cf85 03/28/2010 16:45:08thread:1 rba:(0x308.24d3.10)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000log history: 26033、数据文件检查点信息DATA FILE #4: (name #8) D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.DBFcreation size=640 block size=8192 status=0xe head=8 tail=8 dup=1tablespace 4, index=5 krfil=4 prev_file=0unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00Checkpoint cnt:2886 scn: 0x0000.00d3cf85 03/28/2010 16:45:08Stop scn: 0xffff.ffffffff 03/28/2010 13:10:58Creation Checkpointed at scn: 0x0000.00001c2c 08/05/2009 00:41:52thread:1 rba:(0x2.2114.10)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Offline scn: 0x0000.00879357 prev_range: 0Online Checkpointed at scn: 0x0000.00879358 12/29/2009 17:54:09thread:1 rba:(0x1.2.0)enabled threads: 01000000 00000000 00000000 00000000 00000000 0000000000000000 00000000Hot Backup end marker scn: 0x0000.00000000aux_file is NOT DEFINED注意此处:由于数据库是异常关闭的,数据库没有完成最后的检查点,数据文件的Stop SCN无穷大(Stop scn: 0xffff.ffffffff)。在以上的信息中,各部分的Checkpoint SCN信息都一致(scn: 0x0000.00d3cf85),但是数据文件的Stop SCN无穷大(Stop scn: 0xffff.ffffffff),不等于Checkpoint SCN,这意味着上一次关闭没有执行完全检查点,是异常关闭。此时启动数据库需进行恢复。4、数据库实例恢复P81 实例恢复的两个步骤:???在alert中如何体现???Sun Mar 28 17:01:47 2010alter database openSun Mar 28 17:01:47 2010Beginning crash recovery of 1 threadsSun Mar 28 17:01:47 2010Started first pass scanSun Mar 28 17:01:47 2010Completed first pass scan290 redo blocks read, 74 data blocks need recoverySun Mar 28 17:01:47 2010Started redo application atThread 1: logseq 776, block 9428, scn 0.0Recovery of Online Redo Log: Thread 1 Group 2 Seq 776 Reading mem 0Mem# 0 errs 0: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02.LOGMem# 1 errs 0: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02B.LOGSun Mar 28 17:01:48 2010Completed redo applicationSun Mar 28 17:01:48 2010Completed crash recovery atThread 1: logseq 776, block 9718, scn 0.1390143674 data blocks read, 74 data blocks written, 290 redo blocks readSun Mar 28 17:01:49 2010Thread 1 advanced to log sequence 777Maximum redo generation record size = 120832 bytesMaximum redo generation change vector size = 116476 bytesPrivate_strands 7 at log switchThread 1 opened at log sequence 777Current log# 3 seq# 777 mem# 0: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOGCurrent log# 3 seq# 777 mem# 1: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOGSuccessful open of redo thread 1Sun Mar 28 17:01:49 2010MTTR advisory is disabled because FAST_START_MTTR_TARGET is not setSun Mar 28 17:01:49 2010SMON: enabling cache recoverySun Mar 28 17:01:50 2010Incremental checkpoint up to RBA [0x309.3.0], current log tail at RBA [0x309.17.0]Sun Mar 28 17:01:51 2010Successfully onlined Undo Tablespace 1.Sun Mar 28 17:01:51 2010SMON: enabling tx recoverySun Mar 28 17:01:52 2010Database Characterset is ZHS16GBKSun Mar 28 17:01:52 2010Published database character set on system events channelSun Mar 28 17:01:52 2010All processes have switched to database character setSun Mar 28 17:01:53 2010Starting background process QMNCQMNC started with pid=10, OS id=3828Sun Mar 28 17:01:55 2010replication_dependency_tracking turned off (no async multimaster replication found)Sun Mar 28 17:01:56 2010Starting background process MMONStarting background process MMNLMMNL started with pid=14, OS id=1452Sun Mar 28 17:01:56 2010Completed: alter database openMMON started with pid=12, OS id=3724Sun Mar 28 17:02:02 2010db_recovery_file_dest_size of 2048 MB is 0.15% used. This is auser-specified limit on the amount of space that will be used by thisdatabase for recovery-related files, and does not reflect the amount ofspace available in the underlying filesystem or ASM diskgroup.2.3.13 数据库并行恢复案例一则(略)2.3.14 判断一个死事务的恢复进度(略)2.4 数据库的初始化(略)第3章 参数及参数文件3.1 初始化参数的分类按照参数得出方式的不同可以分为:推导参数、操作系统依赖参数、可变参数。按周参数修改方式的不同可以分为:静态参数、动态参数。3.1.1 推导参数(Derived Parameters)推导参数通常来自于其他参数的推导运算,依赖于其他参数得出。所以这类参数通常不需要修改。注意:通常在创建数据库时,建议将processes参数值(其默认值为150)修改为500或500以上(生产系统的值为1024)SQL> show parameter processesNAME TYPE VALUE------------------------------------ ----------- ------------------------------processes integer 10243.1.2 操作系统依赖参数某些参数的有效值或者取值范围依赖于或者受限于操作系统,比如db_cache_size。SQL> show parameter db_caNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_advice string ONdb_cache_size big integer 25G3.1.3 可变参数3.1.4 初始化参数的获取show parameter命令或者v$parameter视图。通过在SQL*Plus提示符下进行如下设置,我们可以减少错误删除的可能性。SQL> set sqlprompt "_user'@'_connect_identifier> "SYS@OCP10G> conn eygle/eygle已连接。EYGLE@OCP10G>在ORACLE_HOME/sqlplus/admin目录内的glogin.sql文件中植入前面给出的命令,就可以为所有的SQL*Plus会话自动设置SQL提示符。3.2 参数文件参数文件是一个包含一系列参数及其对应值的操作系统文件。分为两类:1、初始化参数文件PFILE(Initialization Parameter File)。9i之前使用,文本文件,可以手工修改。2、服务器参数文件SPFILE(Server Parameter File)。从9i开始使用,二进制格式,不能手工修改。3.2.1 PFILE和SPFILEOracle强烈推荐使用SPFILE,应用其新特性来存储和维护初始化参数。P108,使用DBCA创建数据库时的脚本。3.2.2 获取参数的视图V$SYSTEM_PARAMETER:对于实例(Instance)级别生效的参数设置。V$PARAMETER:对于会话(Session)级别生效的参数设置。3.2.3 SPFILE的创建P111语法案例3.2.4 参数文件的搜索顺序启动过程中Oracle选择参数文件的顺序为:spfile<ORACLE_SID>.oraspfile.orainit<ORACLE_SID>.ora如果三个文件都不存在,则Oracle无法启动实例。3.2.5 使用PFILE/SPFILE启动数据库如果想使用PFILE启动数据库,可以在启动时指定PFILE或者将原SPFILE重命名。SQL> startup pfile='...\INITocpq0g.ora'SQL> startup pfile=$ORACLE_HOME/DBS/INITocpq0g.ora不能以同样的方式指定SPFILE,但是可是常见一个包含SPFILE的PFILE。即,在PFILE中链接SPFILE,同时在PFILE中定义其他或者需要修改的参数。如果参数重复设置,后读取的参数将取代先前的设置。例如:新建一个参数文件initnew.ora,这个文件只包含两行:SPFILE=’...\ SPFILEOCP10G.ORA’db_cache_size=123456789然后就可以用这个新的PFILE启动数据库了。(这是修改参数的方法一,请对比方法二在3.2.6)3.2.6 修改SPFILE文件的参数语法:ALTER SYSTEM SET <parameter_name>=<value> SCOPE= ... SID= ...其中SCOPE选项有三个可选值:MEMORY、SPFILE、BOTH。如果不指定,则相当于BOTH。在RAC环境中,不同实例的undo_tablespace设置是不同的,当修改一个实例的undo表空间时,一定要注意制定相应的实力,以免修改错误。在关闭数据库状态修改SPFILE:1、由SPFILE生成PFILE:create pfile from spfile;2、修改新生成的PFILE;3、由PFILE生成SPFILE:create spfile from pfile;然后就可以启动数据库了:startup(这是修改参数的方法二,请对比方法一在3.2.5)3.2.7 解决SPFILE参数修改的错误参考前两节。3.2.8 重置SPFILE中设置的参数ALTER SYSTEM RESET parameter_name <SCOPE=...> SID=...;3.2.9 判断是否使用了SPFILEshow parameter命令或者v$parameter视图中查找参数spfile。SQL> show parameter spfileNAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string D:\ORACLE\PRODUCT\10.1.0\DB_1\DATABASE\SPFILEOCP10G.ORASQL> select name,value from v$parameter where name='spfile';NAME VALUE-----------------------------------------------------------------spfile D:\ORACLE\PRODUCT\10.1.0\DB_1\DATABASE\SPFILEOCP10G.ORA3.2.10 SPFILE的备份与恢复1. 设置控制文件自动备份注意:控制文件自动备份功能是关闭的,强烈推荐大家打开该功能!RMAN> configure controlfile autobackup on;查询该功能是否打开,通过视图V$RMAN_CONFIGRATION:SQL> select * from v$rman_configuration where name like upper('%control%');CONF# NAME VALUE---------- ----------------------------------------------------------------- 1 CONTROLFILE AUTOBACKUP ON2. 更改自动备份的位置P1223. 检查自动备份检查自动备份,通过视图v$backup_spfile:SQL> select * from v$backup_spfile;......RECID STAMP SET_STAMP SET_COUNT MODIFICATION_TIME BYTES COMPLETION_TIME---------- ---------- ---------- ---------- ----------------- ---------- ---------------25 707353738 707353738 52 2009-11-23 17:36: 2 2010-1-3 23:08:26 707354793 707354793 53 2009-11-23 17:36: 2 2010-1-3 23:26:26 rows selected列出备份集:RMAN> list backup of spfile;备份集列表===================BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间------- ---- -- ---------- ----------- ------------ ----------52 Full 0 DISK 00:00:01 03-1月 -10BP 关键字: 52 状态: AVAILABLE 已压缩: NO 标记: TAG20100103T232633段名:D:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA\OCP10G\AUTOBACKUP\2010_01_03\O1_MF_S_707354793_5N1FSB98_.BKP包含的 SPFILE: 修改时间: 23-11月-094. 记录数据库变化5. 测试RMAN> restore controlfile to 'd:\temp\control01.ctl' from autobackup;启动 restore 于 01-4月 -10使用通道 ORA_DISK_1恢复区域目标: D:\oracle\product\10.1.0\flash_recovery_area用于搜索的数据库名 (或锁定名称空间): OCP10G通道 ORA_DISK_1: 在恢复区域中找到自动备份通道 ORA_DISK_1: 已找到的自动备份: D:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA\OCP10G\AUTOBACKUP\2010_01_03\O1_MF_S_707354793_5N1FSB98_.BKP通道 ORA_DISK_1: 从自动备份复原控制文件已完成完成 restore 于 01-4月 -10RMAN> restore spfile to 'd:\temp\spfile01.ora' from autobackup;启动 restore 于 01-4月 -10使用通道 ORA_DISK_1恢复区域目标: D:\oracle\product\10.1.0\flash_recovery_area用于搜索的数据库名 (或锁定名称空间): OCP10G通道 ORA_DISK_1: 在恢复区域中找到自动备份通道 ORA_DISK_1: 已找到的自动备份: D:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA\OCP10G\AUTOBACKUP\2010_01_03\O1_MF_S_707354793_5N1FSB98_.BKP通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成完成 restore 于 01-4月 -10P124数据库无法MOUNT或者NOMOUNT的情况,没有上机实验。set linesize 120set pagesize 999set heading offset feedback offspool d:\temp\inittmp.oraselect '*.' ||name||' = '||value from v$parameter where isdefault='FALSE';spool off生成的临时参数文件格式如下:*.db_block_size = 8192*.db_cache_size = 25165824*.compatible = 10.1.0.2.0*.log_archive_dest_1 = location=d:\oracle\archive1\*.log_archive_dest_2 = location=d:\oracle\archive2\... ...3.2.11 Oracle 11g参数文件恢复Oracle 11g引入了新的命令:SQL> create <spfile|pfile> from memory;3.2.12 如何设置Events事件(略)P1283.2.13 导出SPFILE参数文件本节的方法比较罗嗦,比如了前面给出的两种方法好(参考3.2.5以及3.2.6)。3.3 案例诊断之一:参数文件3.4 案例诊断之二:RAC环境参数文件第4章 数据字典4.1 数据字典概述数据字典包括以下内容:P138总之,数据字典是数据库核心,通过数据字典,Oracle数据库基本可实现自解释。(通过后面的4.4.3小节可以看出来)数据字典由4部分组成:内部RDBMS(X$)表、数据字典表、动态性能视图(V$)和数据字典视图。4.2 内部RDBMS(X$)表(略)4.3 数据字典表(略)4.4 静态数据字典视图4.4.1 静态数据字典视图的分类DBA_视图包含ALL_视图;ALL_视图包含USER_视图。即:DBA_视图>ALL_视图>USER_视图通过3类视图在本质上是为了实现权限控制。4.4.2 静态数据字典视图的内部实现(略)4.4.3 常用的数据字典视图举例1. DICT/DICTIONARYDICT/DICTIONARY用以检索数据字典。SQL> select * from dict where table_name in('DICT','DICTIONARY');TABLE_NAME COMMENTS------------------ -------------------------------------------DICTIONARY Description of data dictionary tables and viewsDICT Synonym for DICTIONARYSQL> select owner,object_name,object_type2 from dba_objects where object_name in ('DICT','DICTIONARY');OWNER OBJECT_NAME OBJECT_TYPE--------------------- ------------------- ------------------SYS DICTIONARY VIEWPUBLIC DICTIONARY SYNONYMPUBLIC DICT SYNONYMDICT'/DICTIONARY对象的内容非常简单,只包含两个字段SQL> desc dictionaryName Type Nullable Default Comments ---------- -------------- -------- ------- ----------------------TABLE_NAME VARCHAR2(30) Y Name of the object COMMENTS VARCHAR2(4000) Y Text comment on the object 注意:不要被TABLE_NAME这个描述所迷惑了,这里应该用OBJECT_NAME更合适。SQL> select * from dict where table_name like 'DBA%COLUMNS';TABLE_NAME COMMENTS------------------------ ------------------------------------ DBA_CLU_COLUMNS Mapping of table columns to cluster columnsDBA_IND_COLUMNS COLUMNs comprising INDEXes on all TABLEs and CLUSTERsDBA_JOIN_IND_COLUMNS Join Index columns comprising the join conditionsDBA_TAB_COLUMNS Columns of user's tables, views and clusters通过上面这些表,很容易可以实现一些统计,比如:数据库中字段最多的表和索引等等。2. DICT_COLUMESDICT_COLUMES记录了数据字典的列。SQL> select * from dict_columns where table_name='DICT';TABLE_NAME COLUMN_NAME COMMENTS------------------- -------------- --------------------- DICT TABLE_NAME Name of the objectDICT COMMENTS Text comment on the object3. OBJ$/DBA_OBJECTS/OBJOBJ$是一个底层的字典表,记录了数据库中的所有对象的信息;DBA_OBJECTS视图基于OBJ$建立。OBJ是USER_OBJECTS的同义词SQL> select owner,object_name,object_type2 from dba_objects 3 where object_name in('OBJ$','DBA_OBJECTS','OBJ');OWNER OBJECT_NAME OBJECT_TYPE------------------------------ --------------- -------------------SYS DBA_OBJECTS VIEWSYS OBJ$ TABLEPUBLIC DBA_OBJECTS SYNONYMPUBLIC OBJ SYNONYM类似的字典表还有:TAB$/DBA_TABLES/TAB;IND$/DBA_INDEXS/IND等等。SQL> select owner,object_name,object_type2 from dba_objects where object_name in ('TAB$','DBA_TABLES','TAB');OWNER OBJECT_NAME OBJECT_TYPE----------------------- --------------- -------------------SYS TAB VIEWSYS DBA_TABLES VIEWSYS TAB$ TABLEPUBLIC TAB SYNONYMPUBLIC DBA_TABLES SYNONYMSYSTEM TAB SYNONYM6 rows selected4. DBA_SOURCE*_SOURCE用以保存存储对象(Stored Object)的源码。存储对象包括FUNCTION、PACKAGE、PROCEDURE、TRIGGER、TYPE等等。SQL> select column_name,comments from dict_columns where table_name='DBA_SOURCE';COLUMN_NAME COMMENTS----------------------- ---------------OWNER NAME Name of the objectTYPE Type of the object LINE Line number of this line of sourceTEXT Source textSQL> select distinct(type) from dba_source;TYPE------------FUNCTIONPACKAGEPACKAGE BODYPROCEDURETRIGGERTYPETYPE BODY7 rows selected4.5 动态性能视图(V$)动态性能视图(V$)记录了数据库运行时的信息和统计数据。这是我们研究和管理数据库的主要依据。4.5.1 GV$和V$视图在OPS/RAC环境中,GV$视图返回有所有实例的信息;而每个V$视图只返回当前连接实例的信息。SQL> select inst_id,instance_name,status,version from gv$instance;INST_ID INSTANCE_NAME STATUS VERSION---------- ---------------- ------------ -----------------1 ngact1 OPEN 10.2.0.4.02 ngact2 OPEN 10.2.0.4.0SQL> select instance_name,status,version from v$instance;INSTANCE_NAME STATUS VERSION---------------- ------------ -----------------ngact1 OPEN 10.2.0.4.04.5.2 GV_$、V_$视图和GV$、V$同义词(略)4.5.3 进一步说明(略)4.5.4 动态性能视图与数据库启动P1574.6 最后的验证(略)第5章 内存管理5.1 PGA管理PGA指的是程序全局区(Program Global Area),PGA是服务器进程使用的一块内存区域,PGA是非共享内存。PGA在服务器进程启动或创建时分配,并为服务器进程排他访问。5.1.1 什么是PGA进程的创建通常有两种模式:专用服务器模式(Dedicated Server)以及共享服务器模式(Shared Server)。通常数据库口应当运行在专用服务器模式下。PGA的创建过程游标P163PGA分为: 固定PGA 可变PGA。可变PGA由两部分组成: 会话内存 私有SQL区私有SQL区由两部分组成: 永久区域 运行时区域5.1.2 UGA与CGA5.1.3 PGA管理技术变迁从9i开始,Oracle提供了一种新的PGA管理方法:自动化SQL执行内存管理,也称为自动PGA管理。5.1.4 参数的设置与内存分配SQL在工作区以3中方式执行:workarea executions - optimal workarea executions - onepass workarea executions - multipassP168PGA性能指标(生产系统):SQL> select name, value,2 100*round((value/(select sum(value) from v$sysstat where name like 'workarea executions%')),4) PCT3 from v$sysstat where name like 'workarea executions%' ;NAME VALUE PCT------------------------------- ---------- ----------workarea executions - optimal 18340525 99.95workarea executions - onepass 7919 0.04workarea executions - multipass 906 05.1.5 自动PGA管理实现原理(略)5.1.6 PGA的调整建议SQL> select name, round(value/1024/1024,2) PGA_MB from v$parameter where name like '%pga%';NAME PGA_MB-------------------------------------------------------- ----------pga_aggregate_target 119.37视图v$pga_target_advice的字段意义需上网查。SQL> select round(p.PGA_TARGET_FOR_ESTIMATE/1024/1024,2) PGA_MB, p.PGA_TARGET_FACTOR, p.ESTD_PGA_CACHE_HIT_PERCENTAGE,p.ESTD_OVERALLOC_COUNT2 from v$pga_target_advice p order by PGA_MB;PGA_MB PGA_TARGET_FACTOR ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT---------- ----------------- ----------------------------- --------------------14.92 0.125 27 1132129.84 0.25 27 519459.68 0.5 28 70389.53 0.75 29 50119.37 1 45 0143.24 1.2 45 0167.11 1.4 46 0190.99 1.6 46 0214.86 1.8 46 0238.73 2 48 0358.1 3 51 0477.47 4 53 0716.2 6 61 0954.94 8 61 014 rows selectedOEM界面上可以直观的看到这些建议信息。5.1.7 PGA的转储(略)5.2 SGA管理SGA指的是系统全局区(System Global Area),是一块共享内存;在数据库启动时分配,当实例关闭时释放。当实例启动到NOMOUNT状态时,SGA已分配,同时启动后台进程。SYSTEM @ OCP10G> show sgaTotal System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytesSYSTEM @ OCP10G> select * from v$sga;NAME VALUE-------------------- ----------Fixed Size 787748Variable Size 95419100Database Buffers 25165824Redo Buffers 2621445.2.1 SGA的组成1. 固定区域这部分内存分配和特定的数据库版本以及平台有关,不受用户控制,而这些信息对数据库来说非常重要,但是——用户通常不需要关心。2. Buffer CacheBuffer Cache(缓冲区高速缓存)用于存储近期使用的数据块,这些数据块有可能是被修改过的,也可能是未经修改过的。Oracle管理Buffer Cache使用的是LRU算法。除此之外,Oracle还使用了多缓冲池技术。将Buffer Cache分为Default、Keep、和Recycle池3个部分。在默认情况下,所有表都使用Default池,它的大小就是数据缓冲区(Buffer Cache)的大小,由初始化参数db_cache_size决定。SQL> show parameter db_cacheNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_advice string ONdb_cache_size big integer 25GSQL> select id, name, block_size, current_size, target_size from v$buffer_pool;ID NAME BLOCK_SIZE CURRENT_SIZE TARGET_SIZE---------- ---------------- ---------- ------------ -----------1 KEEP 8192 2048 20483 DEFAULT 8192 25600 256003. Shared PoolShared Pool,共享池,大小由参数shared_pool_size决定。SQL> show parameter shared_poolNAME TYPE VALUE----------------------------- ---------- ----------- shared_pool_reserved_size big integer 161061273shared_pool_size big integer 3G4. Redo Log BufferRedo Log Buffer,日志缓冲区存储重做日志条目(redo entries)5. 其他内存组件(有疑问)Large Pool(大池)、Java Pool(Java池)、Streams Pool(10g中引入)。SQL> select * from v$sga;NAME VALUE-------------------- ----------Fixed Size 2147144Variable Size 5,335,157,944Database Buffers 2,899,102,924Redo Buffers 31,404,032SQL> select * from v$sgainfo;NAME BYTES RESIZEABLE-------------------------------- ---------- ----------Fixed SGA Size 2147144 NoRedo Buffers 31404032 NoBuffer Cache Size 2899102924 YesShared Pool Size 3221225472 YesLarge Pool Size 536870912 YesJava Pool Size 536870912 YesStreams Pool Size 0 YesGranule Size 16777216 NoMaximum SGA Size 3435973836 NoStartup overhead in Shared Pool 1308622848 NoFree SGA Memory Available 1040187392 11 rows selectedSQL> show parameter db_cache_sizeNAME TYPE VALUE------------------------------------ ----------- db_cache_size big integer 25GSQL> select value from v$parameter where name ='db_cache_size';VALUE--------------------------------------------------------------------------------2684354560025G=25×1024×1024×1024 KB= 26,843,545,600 KB 2,899,102,924(生产系统不一致)$$$$$$$$$$$$$$$$$$$$$$$SQL> select * from v$sga;NAME VALUE-------------------- ----------Fixed Size 752592Variable Size 989855744Database Buffers 6,006,243,328Redo Buffers 52703232SQL> select value from v$parameter where name ='db_cache_size';VALUE--------------------------------------------------------------------------------6,006,243,328SQL> show parameter db_cache_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_size big integer 6,006,243,328(旧生产系统一致)$$$$$$$$$$$$$$$$$$$$$$$SQL> select * from v$sga;NAME VALUE-------------------- ----------Fixed Size 787748Variable Size 95,419,100Database Buffers 25165824Redo Buffers 262144在9i中,Variable Size包括shared_pool_size、java_pool_size和large_pool_size部分,sga_max_size去除db_cache_size部分也被归入可变部分。SQL> select2 (select value from v$parameter where name ='shared_pool_size')+3 (select value from v$parameter where name ='java_pool_size')+4 (select value from v$parameter where name ='large_pool_size') Vsize5 from dual;VSIZE----------92,274,688Database Buffers指的是Buffer Cache的设置SQL> show parameter db_cache_sizeNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_size big integer 24M24M = 24×1024×1024KB = 25165824KB。(实验环境一致)Redo Buffers指的是缓冲日志区分配的内存大小,这个数值通常比比参数log_buffers略大。SQL> show parameter log_bufferNAME TYPE VALUE------------------------------------ ----------- ------------------------------log_buffer integer 262144SQL> select * from v$sgainfo;NAME BYTES RESIZEABLE-------------------------------- ---------- ----------Fixed SGA Size 787748 NoRedo Buffers 262144 NoBuffer Cache Size 25165824 YesShared Pool Size 83886080 YesLarge Pool Size 8388608 YesJava Pool Size 0 YesStreams Pool Size 0 YesGranule Size 4194304 NoMaximum SGA Size 121634816 NoStartup overhead in Shared Pool 25165824 NoFree SGA Memory Available 0 11 rows selectedSQL> select value from v$parameter where name ='shared_pool_size';VALUE--------------------------------------------------------------------------------83886080SQL> select sum(bytes) from v$sgastat where pool='shared pool';SUM(BYTES)----------838860805.2.2 SGA与共享内存(略)5.2.3 SGA管理的变迁1. 8i中的静态SGA管理(略)2. 9i中的静态SGA管理sga_max_size参数。P191SQL> show parameter db_cache_adNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_advice string ONselect * from v$db_cache_advice;--当size_factor=1时,size_for_estimate=24select value from v$parameter where name = 'db_cache_size'; --25165824(24M)select * from v$shared_pool_advice;--当shared_pool_size_factor=1时,shared_pool_size_for_estimate=80select value from v$parameter where name = 'shared_pool_size'; --83886080(80M)也即:SQL> select d.SIZE_FOR_ESTIMATE sfe, d.SIZE_FACTOR sf,2 d.ESTD_PHYSICAL_READ_FACTOR eprf, d.ESTD_PHYSICAL_READS epr3 from v$db_cache_advice d;SFE SF EPRF EPR---------- ---------- ---------- ----------4 0.1667 4.915 3632748 0.3333 3.7738 27892912 0.5 1.6716 12355016 0.6667 1.5419 11396620 0.8333 1.3074 9662924 1 1 7391128 1.1667 0.5855 4327732 1.3333 0.5568 4115136 1.5 0.5486 4054640 1.6667 0.5415 4002244 1.8333 0.5366 3966248 2 0.5222 3859912 rows selectedSQL> select value from v$parameter where name = 'db_cache_size';VALUE--------------------------------------------------------------------------------25165824SQL> select s.SHARED_POOL_SIZE_FOR_ESTIMATE spsfe, s.SHARED_POOL_SIZE_FACTOR spsf,2 s.ESTD_LC_TIME_SAVED_FACTOR eltsf, s.ESTD_LC_MEMORY_OBJECT_HITS elmoh3 from v$shared_pool_advice s;SPSFE SPSF ELTSF ELMOH---------- ---------- ---------- ----------32 0.4 0.995 8076740 0.5 0.9983 8106248 0.6 1 8131356 0.7 1 8140264 0.8 1 8145572 0.9 1 8146880 1 1 8146888 1.1 1 8146896 1.2 1 81468104 1.3 1 81468112 1.4 1 81468120 1.5 1 81468128 1.6 1 81468136 1.7 1 81468144 1.8 1 81468152 1.9 1 81468160 2 1 8146817 rows selectedSQL> select value from v$parameter where name = 'shared_pool_size';VALUE--------------------------------------------------------------------------------83886080用户的选择在于在db_cache_size的设置和physical_size之间寻找一个边际效益最高点,使用可以接受的内存设置获得尽量低的物理读。也即:(只显示一行结果不能体现该视图的意义,用户的选择在于在db_cache_size的设置和physical_size之间寻找一个边际效益最高点,使用可以接受的内存设置获得尽量低的物理读。)SQL> select size_for_estimate, size_factor from v$db_cache_advice where size_factor=1;SIZE_FOR_ESTIMATE SIZE_FACTOR----------------- -----------24 1SQL> select value from v$parameter where name ='db_cache_size';VALUE--------------------------------------------------------------------------------25165824SQL> select shared_pool_size_for_estimate, shared_pool_size_factor from v$shared_pool_advice where shared_pool_size_factor=1;SHARED_POOL_SIZE_FOR_ESTIMATE SHARED_POOL_SIZE_FACTOR----------------------------- -----------------------80 1SQL> select value from v$parameter where name ='shared_pool_size';VALUE--------------------------------------------------------------------------------83886080注意:虽然在9i中Oracle提供了动态内存修改功能,但是仍然建议在系统规划时做好设置,尽量避免运行时的动态调整。3. 10g中的自动共享内存调整10g中进入了一个新的初始化参数sga_target,P197:SQL> show parameter sga_targetNAME TYPE VALUE------------------------------------ ----------- ------------------------------sga_target big integer 0生产系统没有使用“自动共享内存调整”这一特性。使用“自动共享内存调整”这一特性前提,statistics_level为TYPICAL或ALL:SQL> show parameter statistics_levelNAME TYPE VALUE------------------------------------ ----------- ------------------------------statistics_level string TYPICAL4. 11g中的自动内存管理10g中进入了一个新的初始化参数memory_target,P200:图5-15,P201 (这个图很重要,但是不理解,需上网查)5.3 Oracle的内存分配和使用5.3.1 案例诊断一:SGA和SWAP5.3.2 案例诊断二:SGA设置过高导致的系统故障5.3.3 案例诊断三:如何诊断和解决CPU高度消耗问题第6章 Buffer Cache与Share Pool原理(略)6.1 Buffer Cache原理当一个进程需要访问数据时,P2156.1.1 LRU与Dirty List第7章 重做(Rodo)7.1 Rodo的作用Oracle通过Redo来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。Redo的功能主要通过个组件来实现:Redo log buffer、LGWR后台进程和Redo log file(在归档模式下,Redo log file最终由ARCn进程写出为归档日志文件)。图7-2说明了Redo log buffer、LGWR后台进程和Redo log file三者之间的关系。P3007.2 Redo的原理盖国强在本节讲解得非常有条理,来龙去脉非常清晰。P3017.3 Redo与Latch(略)7.4 Oracle 9i Redo的增强(略)7.5 Oracle 10g Redo的增强(略)7.6 Redo的内容(trace文件还是看不懂)7.7 产生多少Redo本节内容很重要,实践中会用到。P3107.8 Redo写的触发条件7.8.1 每3秒超市(Timeout)7.8.2 阈值达到7.8.3 用户提交后面在7.10小节有详细的介绍。7.8.4 在DBWn写之前(不懂)7.9 Redo Log Buffer的大小设置从10g开始,LOG_BUFFER的分配算法有所改变。P316如果不是有明显的性能问题,一般缺省的设置是足够的。7.10 commit做了什么P3177.11 日志的状态SQL> select group#, status, first_change# from v$log;GROUP# STATUS FIRST_CHANGE#---------- ---------------- -------------1 CURRENT 157009872 INACTIVE 156831933 INACTIVE 15692072常见的日志状态有4种:1、CURRENT2、ACTIVE:该状态意味着,。。。严重的等待事件“checkpoint incomplete”P3183、INACTIVE:如果数据库处于归档模式,在未完成。。。P3204、UNUSED7.12 日志的块大小(略)7.13 日志文件的大小(本节没有讲具体的优化原则、方法)P324第2段7.14 如何调整日志文件大小具体命令P324alter database add logfile group 4 ‘/.../redo04.dbf’ size 1024m;alter database drop logfile group 1;7.15 热备份期间的Redo(略)7.16 能否不生成Redo(暂时略,需结合后面章节一起看)需要使用NOLOGGING选项的操作有:P3297.17 Redo故障的恢复7.17.1 丢失非活动日志组的故障恢复因为实验环境使用的是Windows系统,无法在不关闭Oracle数据库的情况下删除redo日志,所以本节所举的例子不是恰当的(其实相当于下一小节:在损失当前日志时,如果数据库是正常关闭的)。第一种情况:如果丢失非活动日志组中的一个成员,那么数据库不会奔溃,只会在告警日志中写入如下信息:Fri Apr 30 16:04:50 2010Errors in file d:\oracle\product\10.1.0\admin\ocp10g\bdump\ocp10g_lgwr_2788.trc:ORA-00313: open failed for members of log group 3 of thread 1ORA-00312: online log 3 thread 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG'ORA-27041: unable to open fileOSD-04002: 无法打开文件O/S-Error: (OS 2) 系统找不到指定的文件。Fri Apr 30 16:04:50 2010Errors in file d:\oracle\product\10.1.0\admin\ocp10g\bdump\ocp10g_lgwr_2788.trc:ORA-00321: log 3 of thread 1, cannot update log file headerORA-00312: online log 3 thread 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG'Private_strands 7 at log switchFri Apr 30 16:04:50 2010Errors in file d:\oracle\product\10.1.0\admin\ocp10g\bdump\ocp10g_lgwr_2788.trc:ORA-00313: open failed for members of log group 3 of thread 1Thread 1 advanced to log sequence 1074Current log# 3 seq# 1074 mem# 1: D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG第二种情况:1、如果丢失非活动日志组中的所有成员,当时用到该组时,数据库会奔溃。通过删除REDO03.LOG以及REDO03B.LOG模拟故障2、此时,启动数据库,数据库会提示日志丢失:SYS AS SYSDBA@ OCP10G> startupORACLE 例程已经启动。Total System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytes数据库装载完毕。ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员ORA-00312: 联机日志 3 线程 1:'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG'ORA-00312: 联机日志 3 线程 1:'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG'3、此时,数据库将处于MOUNT状态,可以查看日志组及各日志的情况:SYS AS SYSDBA@ OCP10G> select instance_name, status from v$instance;INSTANCE_NAME STATUS---------------- ------------ocp10g MOUNTEDSQL> select * from v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS ---------- ---------- ---------- ---------- ---------- -------- ---------1 1 1075 10485760 2 NO INACTIVE 2 1 1076 10485760 2 NO CURRENT 3 1 0 10485760 2 NO UNUSED SQL> select * from v$logfile;GROUP# STATUS TYPE MEMBER ---------- ------- ------- ------------------------------------------------------1 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG 2 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02.LOG 3 INVALID ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG 1 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01B.LOG 2 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02B.LOG 3 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG 6 rows selected4、清除该日志组后即可启动数据库。SYS AS SYSDBA@ OCP10G> alter database clear logfile group 3;数据库已更改。SQL> select * from v$logfile;GROUP# STATUS TYPE MEMBER ---------- ------- ------- -------------------------------------------------------1 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG 2 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02.LOG 3 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG 1 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01B.LOG 2 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02B.LOG 3 ONLINE D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG 6 rows selectedSYS AS SYSDBA@ OCP10G> alter database open;数据库已更改。如果数据库处于归档模式,并且该日志组未完成归档,则需要用如下命令强制清除,详见。。。小节需结合后面的章节一起看7.17.2 丢失活动或当前日志文件的恢复1. 在损失当前日志时,如果数据库是正常关闭的参考1.3小节(数据库的关闭)由于正常关闭数据库前,Oracle会执行全面检查点,当前日志在实例恢复中不再需要。需结合后面的章节一起看在9i中,可能无法对当前日志进行clear,需要通过Until Cancel恢复后,以Resetlogs方式打开,例子如下:SQL> startupORACLE 例程已经启动。Total System Global Area 121634816 bytesFixed Size 787748 bytesVariable Size 95419100 bytesDatabase Buffers 25165824 bytesRedo Buffers 262144 bytes数据库装载完毕。ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员ORA-00312: 联机日志 1 线程 1:'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01B.LOG'ORA-00312: 联机日志 1 线程 1:'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG'SQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 5 NO INACTIVE 15825696 2010-4-30 12 1 6 NO INACTIVE 15825698 2010-4-30 13 1 7 NO CURRENT 15825700 2010-4-30 1SQL> alter database clear logfile group 1;Database alteredSQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 0 NO UNUSED 15825696 2010-4-30 12 1 6 NO INACTIVE 15825698 2010-4-30 13 1 7 NO CURRENT 15825700 2010-4-30 1SQL> alter database clear logfile group 2;Database alteredSQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 0 NO UNUSED 15825696 2010-4-30 12 1 0 NO UNUSED 15825698 2010-4-30 13 1 7 NO CURRENT 15825700 2010-4-30 1SQL> alter database clear logfile group 3;alter database clear logfile group 3ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG'ORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 2) 系统找不到指定的文件。ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG'ORA-27041: 无法打开文件OSD-04002: 无法打开文件O/S-Error: (OS 2) 系统找不到指定的文件。SQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 0 NO UNUSED 0 2010-4-30 12 1 0 NO UNUSED 15825698 2010-4-30 13 1 0 NO CLEARING_CURRENT 15825700 2010-4-30 1SQL> recover database until cancel;Medie recover compelete. (完成介质恢复。)SQL> alter database open resetlogs;Database alteredSQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 0 YES UNUSED 0 2 1 0 YES UNUSED 0 3 1 1 NO CURRENT 15826091 2010-4-30 1SQL> alter system switch logfile;System alteredSQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 2 NO CURRENT 15826543 2010-4-30 12 1 0 YES UNUSED 0 3 1 1 NO ACTIVE 15826091 2010-4-30 1SQL> alter system switch logfile;System alteredSQL> select * from v$log;GROUP# THREAD# SEQUENCE# ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME---------- ---------- ---------- -------- ---------------- ------------- -----------1 1 2 NO INACTIVE 15826543 2010-4-30 12 1 3 NO CURRENT 15826551 2010-4-30 13 1 1 NO INACTIVE 15826091 2010-4-30 1SQL>2. 在损失当前日志时,如果数据库是异常关闭的需结合后面的章节一起看本节作者介绍的处理方法不详细,只是说与上面的介绍的方法类似,不再赘述P3377.18 案例一:通过Clear日志恢复数据库7.19 案例二:日志组过度激活的诊断7.20 数值在Oracle内部存储


 深入解析Oracle下载


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024