威's profile飞翔在圣西罗PhotosBlogListsMore Tools Help
Photo 1 of 21

Occupation
Location
认识的人都知道嘿嘿

飞翔在圣西罗

爆发还是死亡
February 03

今年手气真差!

年会抽奖,没中!
抽签购买二手电脑,没中!
奥运购票第二阶段,又没中!
啊啊啊~手气真差!
February 01

一轮轮收购后,你就等着挨宰吧

北京时间2月1日消息,据国外媒体报道,微软公司提出以446亿美元(合每股31美元)价格收购雅虎公司。据PR Newswire发布的微软一份声明称,这个出价与雅虎昨天收盘价相比高出62%。微软表示,雅虎股东根据需要可以选择现金或者股票进行支付。

微软收购了雅虎

Oracle收购了BEA

Sun收购了MySql

市场趋向于被寡头垄断

以后买企业级软件就等着挨宰吧呵呵

January 14

搞定032,开始033

61/63,比想像中的简单,不过及格线和时间好像变了,由66% pass 变为73% pass,时间由90分钟变为120分钟了。
争取5月搞定033!
January 06

迟到的总结和展望

我向来是不爱写这种东西的,不过突然觉得这东西起码可以留个纪念,权且写上一笔吧。
 
07年发生的事情还真不少,总的感觉比前两年要好不少,虽然有些事情的结局并不完美。
迈出职业生涯第二步——虽然自从2年前的这个时候就确定了这件事,但没想到最终不是一次完全主动(半主动)的跳槽。跳了2次,现在安稳下来了,工作还算满意~
考完了OCA——考试前当然也背题,不过还是系统地学习了oracle。可惜证书给寄丢了,先不要了~
与vinny一起度过了一段快乐时光——虽然其间也夹杂了一些苦恼,但仍是一段非常好的记忆。Thank you,vinny~
解决未来生存问题——项目进行中,尚无定论~
健康问题——虽然还是有踢一场正式足球比赛的体力,但发现身体真是不如大学时,明白了健康的重要性。
 
08奥运年,也没有什么特别值得期待的,不过应该仍会是很充实的一年吧。
感受奥运
好好学英语
考完OCP
戒掉可乐
减掉肚子
看能不能遇到她
 
 
 
 

第十八章 在数据库之间传输数据

第十八章 在数据库之间传输数据
目标:
  描述导出和导入实用程序的使用
  描述导出和导入的概念与结构
  执行简单的导出和导入操作
  列出使用导出和导入操作的原则


要点:
1.概述
导入导出程序的作用:
  归档历史数据
  保存表定义以防止出现用户错误故障
  在计算机和数据库之间,或在不同版本的Oracle服务器之间移动数据
  在数据库之间传输表空间

调用方式:
  命令行输入
  交互式提示
  参数文件
  Oracle Enterprise Manager 数据管理向导

权限:
  要使用导出实用程序,必须对 Oracle 数据库拥有CREATE SESSION权限。要导出由另一个用户拥有的表,必须已启用了         EXP_FULL_DATABASE角色。该角色授予所有DBA。
  即使没有创建导出文件,也可以执行导入。但是,如果导出文件是由其他人创建的,则只当具有IMP_FULL_DATABASE角色的权限时,才可以     导入该文件。

导出模式:
表模式
  表模式可以导出用户方案中的指定的表,而不是导出所有表。已授权的用户可以导出其他用户所拥有的指定的表。 
用户模式
  用户模式可以导出某个用户方案的所有对象。已授权用户可以导出一组指定用户方案中的所有对象。此模式可用于执行完全数据库导出。
表空间模式
  表空间模式可用于导出指定表空间中的所有表。
  使用可移动的表空间功能,可以将一组表空间从一个 Oracle 数据库移动到另一个 Oracle 数据库。
完全数据库模式
  完全数据库模式可以导出所有数据库对象,SYS方案中的对象除外。只有已授权的用户才能在此模式中执行导出。

导出参数
  详见sg


2.直接导出
使用直接路径功能可以大大加快提取数据的速度。如果指定了DIRECT=Y参数,导出实用程序将直接从数据层读取,而不必通SQL 命令处理层。
在可以使用直接路径导出之前,必须确保已运行了 catexp.sql 脚本。它位于 $HOME/rdbms/admin/ 目录下。
机制: 
  接导出模式可以通过指定 DIRECT=Y 参数来设置。
  直接路径导出不与例程的其它资源竞争。
  在直接读取模式中,它将数据库的数据块读入由会话使用的一个专用区域中。
  行将被直接传送到双任务通信协议 (Two-Task Common, TTC) 缓冲区以供传输。
  TTC 协议缓冲区中数据的格式是导出实用程序预期的格式。
功能:
  导出的类型将显示在屏幕输出、导出转储文件和以 LOG 参数指定的日志文件中。
  数据已经是导出实用程序所预期的格式,因此避免了不必要的数据转换。数据将传送到导出客户机,该客户机随后将数据写入导出文件。
  直接路径导出使用经过优化的 SELECT * FROM 表,而不带任何谓词。
注:导出转储文件中的列数据和说明的格式与常规路径导出的相应格式不同。

限制:
  直接路径导出功能不能通过使用交互式 EXP 会话来进行调用。
  在使用直接路径选项时,客户端的字符集必须与服务器端的字符集相匹配。可以使用环境变量NLS_LANG设置为与服务器端相同的字符集。
  导出实用程序的BUFFER参数对直接路径导出不起作用;只有常规路径选项使用该参数。
  不能使用直接路径导出功能来导出包含有LOB、BFILE、REF数据类型的行或对象类型列。

第十七章 恢复目录的创建和维护

第十七章 恢复目录的创建和维护
目标:
  描述恢复目录的内容
  列出需要恢复目录的 RMAN 功能
  创建恢复目录
  通过使用 RMAN 命令来维护恢复目录
  使用 RMAN 注册、重新同步和重置数据库
  查询恢复目录以生成报告和列表
  创建、存储和运行脚本
  描述备份和恢复恢复目录的方法
要点:
1.概述
恢复目录是在单独的数据库中创建的方案。它包含从目标数据库的控制文件中获取的 RMAN 元数据。RMAN 将有关数据库结构、归档重做日志、备份集以及数据文件副本的信息从目标数据库的控制文件传播到恢复目录中。
当要管理多个目标数据库时,应该使用目录。
RMAN 存储、使用和维护恢复目录中的信息。当执行以下操作时,恢复目录是由 RMAN 维护的:
  在目录中注册目标数据库。
  重新同步该目录和目标数据库的控制文件。
  将数据库重置为以前的复本。
  更改有关备份或文件的信息。
  执行备份、还原或恢复操作。
可以使用 REPORT 和 LIST 命令从恢复目录中获取信息。可以将脚本存储在恢复目录中。
恢复目录包含关于如下内容的信息:
数据文件和归档重做日志文件备份集和备份片:
  该目录存储备份集名称和时间等信息。
数据文件副本:
  该目录记录数据文件副本的时间戳和名称。
归档重做日志文件及其副本:
  该目录维护服务器创建的归档日志以及 RMAN 制作的任何副本的记录。
目标数据库的物理结构:
  它包含的信息与目标数据库控制文件中包含的信息类似。
恢复目录还可能包含:
  在 RMAN 会话期间持续有效的配置设置,以及使用 CONFIGURE 命令设置的配置设置。
  已存储的脚本是命令的命名序列。脚本不能存储在目标数据库的控制文件中。
使用恢复目录的优点
  在一个目录中存储多个目标数据库的元数据
  单个目标数据库的多个复本的元数据
  历史记录元数据
  报告非当前时间的目标数据库 

2.创建恢复目录
步骤:
  连接到目录数据库并为该目录创建表空间
  创建恢复目录的用户和方案
  授予该用户维护恢复目录和执行备份、恢复操作的角色和权限
    SQL> grant recovery_catalog_owner to rman_db01;
    SQL> grant connect, resource to rman_db01;
  登录到操作系统上,发出 RMAN 命令以调用 RMAN 命令解释器。创建目录。
    rman catalog rman_db1/rman_db1@catdb log = catalog.log
  create catalog tablespace rman_ts;
  exit;
  连接到目标数据库。要执行所有的备份和恢复操作,必须以具有SYSDBA权限的用户身份登录到目标数据库上。
    rman target sys/oracle@db01
    RMAN-06005: connected to target database: DB01 (DBID=472633597)
    RMAN> connect catalog rman_db01/rman_db01@catdb    --?如何有多个数据库需要管理,是使用一个目录还是多个?
    RMAN-06008: connected to recovery catalog database
  在目录中注册目标数据库。如果未在恢复目录中注册目标数据库,则不能使用该目录存储有关该数据库的信息。
    RMAN> register database;

3.使用恢复目录连接
步骤:
  从目标数据库启动 RMAN 会话。
    rman target sys/oracle@db01
  连接到恢复目录数据库。
    RMAN> connect catalog rman_db01/rman_db01@catdb

4.目录维护命令
重新同步恢复目录 RESYNC CATALOG
  重新同步恢复目录可确保元数据与目标控制文件的最新状态保持一致。
  可以进行部分或完全重新同步。
  RMAN 自动检测何时需要执行完全或部分重新同步,并根据需要执行该操作。也可以通过发出RESYNC CATALOG命令强制执行完全重新同步。
  要确保目录处于最新状态,请定期运行 RESYNC CATALOG 命令。
  CONTROL_FILE_RECORD_KEEP_TIME 的设置值。因为控制文件使用一个循环重用的系统,所以最终会覆盖备份和副本记录。通过重新同步该目  录,可确保将这些记录存储在目录中,而不会丢失。
RESYNC CATALOG 命令更新以下记录:
  日志历史记录:在进行日志切换时创建。恢复管理器跟踪该信息,以便明确应该查找哪些归档日志。
  归档重做日志:与通过归档联机日志、复制现有的归档日志或还原归档日志备份集创建的归档日志相关联。
  备份历史记录:与备份集、备份片、备份集成员、代理副本和映像副本相关联。
  物理方案:与数据文件和表空间相关联。
重置数据库复本 RESET DATABASE
数据库的复本号是在将日志序列号重置为零前用于标识数据库版本的号码。它可防止将归档和联机重做日志应用到错误的数据库复本中。恢复管理器使用 RESET DATABASE 命令在恢复目录中存储数据库复本信息。所有后续备份和日志归档均与新数据库复本相关联。如果将目标数据库恢复到过去的某一时刻,则必须使用 RESETLOGS 选项打开该数据库。这种情况下,在发出 RESET DATABASE 命令前,恢复管理器无法再次使用恢复目录。这样,恢复管理器就可以区分 RESETLOGS 和旧控制文件的故障还原了。
RESET DATABASE TO INCARNATION <identifier> 命令通过还原以前的数据库复本备份来撤消 RESETLOGS 操作的影响。必须指定要还原的数据库复本的记录主键:
RMAN> reset database to incarnation <identifier>;
注:标识符是通过 LIST INCARNATION OF DATABASE 命令获取的。
恢复目录报告
REPORT 命令
  可以使用 REPORT 命令来分析备份、复制、还原和恢复操作的各个方面。
LIST 命令
  可以使用 LIST 命令显示备份集、文件副本和归档日志的相关信息(存储在恢复目录中)。
相关视图
  RC_DATABASE
     确定哪些数据库当前已在恢复目录中注册
  RC_DATAFILE
     确定哪些数据文件当前已在恢复目录中注册
  RC_STORED_SCRIPT
     确定已存储的脚本
  RC_STORED_SCRIPT_LINE
     确定已存储脚本的文本
  RC_TABLESPACE
     确定哪些表空间当前存储在目标数据库的恢复目录中
已存储的脚本
恢复管理器脚本是一组命令,它:
  可以指定频繁使用的备份、恢复和还原操作
  由 CREATE SCRIPT 命令创建的
  存储在恢复目录中
  只有通过 RUN 命令才能调用
使用 CREATE SCRIPT 存储脚本
  RMAN> create script Level0Backup {...}
使用 EXECUTE SCRIPT 运行脚本
  RMAN > run {execute script Level0Backup;}
使用 REPLACE SCRIPT 重写脚本   --必须提供整个脚本,而不仅仅是更改的行。
  RMAN> REPLACE SCRIPT Level0Backup {...}
使用 DELETE SCRIPT 删除脚本
  RMAN> DELETE SCRIPT Level0Backup;
使用 PRINT SCRIPT 显示脚本
  RMAN> PRINT SCRIPT Level0Backup;
恢复目录备份恢复
  类似与目标数据库的备份恢复(物理备份恢复,逻辑备份恢复)
  始终将恢复目录存储在不同于目标数据库的数据库中。确保将目录数据库的相关文件与目标数据库的相关文件存储在不同的磁盘上。
  当重建了恢复目录后,应该立即重新同步该目录与目标数据库的控制文件。

第十七章 恢复目录的创建和维护

第十七章 恢复目录的创建和维护
目标:
  描述恢复目录的内容
  列出需要恢复目录的 RMAN 功能
  创建恢复目录
  通过使用 RMAN 命令来维护恢复目录
  使用 RMAN 注册、重新同步和重置数据库
  查询恢复目录以生成报告和列表
  创建、存储和运行脚本
  描述备份和恢复恢复目录的方法
要点:
1.概述
恢复目录是在单独的数据库中创建的方案。它包含从目标数据库的控制文件中获取的 RMAN 元数据。RMAN 将有关数据库结构、归档重做日志、备份集以及数据文件副本的信息从目标数据库的控制文件传播到恢复目录中。
当要管理多个目标数据库时,应该使用目录。
RMAN 存储、使用和维护恢复目录中的信息。当执行以下操作时,恢复目录是由 RMAN 维护的:
  在目录中注册目标数据库。
  重新同步该目录和目标数据库的控制文件。
  将数据库重置为以前的复本。
  更改有关备份或文件的信息。
  执行备份、还原或恢复操作。
可以使用 REPORT 和 LIST 命令从恢复目录中获取信息。可以将脚本存储在恢复目录中。
恢复目录包含关于如下内容的信息:
数据文件和归档重做日志文件备份集和备份片:
  该目录存储备份集名称和时间等信息。
数据文件副本:
  该目录记录数据文件副本的时间戳和名称。
归档重做日志文件及其副本:
  该目录维护服务器创建的归档日志以及 RMAN 制作的任何副本的记录。
目标数据库的物理结构:
  它包含的信息与目标数据库控制文件中包含的信息类似。
恢复目录还可能包含:
  在 RMAN 会话期间持续有效的配置设置,以及使用 CONFIGURE 命令设置的配置设置。
  已存储的脚本是命令的命名序列。脚本不能存储在目标数据库的控制文件中。
使用恢复目录的优点
  在一个目录中存储多个目标数据库的元数据
  单个目标数据库的多个复本的元数据
  历史记录元数据
  报告非当前时间的目标数据库 

2.创建恢复目录
步骤:
  连接到目录数据库并为该目录创建表空间
  创建恢复目录的用户和方案
  授予该用户维护恢复目录和执行备份、恢复操作的角色和权限
    SQL> grant recovery_catalog_owner to rman_db01;
    SQL> grant connect, resource to rman_db01;
  登录到操作系统上,发出 RMAN 命令以调用 RMAN 命令解释器。创建目录。
    rman catalog rman_db1/rman_db1@catdb log = catalog.log
  create catalog tablespace rman_ts;
  exit;
  连接到目标数据库。要执行所有的备份和恢复操作,必须以具有SYSDBA权限的用户身份登录到目标数据库上。
    rman target sys/oracle@db01
    RMAN-06005: connected to target database: DB01 (DBID=472633597)
    RMAN> connect catalog rman_db01/rman_db01@catdb    --?如何有多个数据库需要管理,是使用一个目录还是多个?
    RMAN-06008: connected to recovery catalog database
  在目录中注册目标数据库。如果未在恢复目录中注册目标数据库,则不能使用该目录存储有关该数据库的信息。
    RMAN> register database;

3.使用恢复目录连接
步骤:
  从目标数据库启动 RMAN 会话。
    rman target sys/oracle@db01
  连接到恢复目录数据库。
    RMAN> connect catalog rman_db01/rman_db01@catdb

4.目录维护命令
重新同步恢复目录 RESYNC CATALOG
  重新同步恢复目录可确保元数据与目标控制文件的最新状态保持一致。
  可以进行部分或完全重新同步。
  RMAN 自动检测何时需要执行完全或部分重新同步,并根据需要执行该操作。也可以通过发出RESYNC CATALOG命令强制执行完全重新同步。
  要确保目录处于最新状态,请定期运行 RESYNC CATALOG 命令。
  CONTROL_FILE_RECORD_KEEP_TIME 的设置值。因为控制文件使用一个循环重用的系统,所以最终会覆盖备份和副本记录。通过重新同步该目  录,可确保将这些记录存储在目录中,而不会丢失。
RESYNC CATALOG 命令更新以下记录:
  日志历史记录:在进行日志切换时创建。恢复管理器跟踪该信息,以便明确应该查找哪些归档日志。
  归档重做日志:与通过归档联机日志、复制现有的归档日志或还原归档日志备份集创建的归档日志相关联。
  备份历史记录:与备份集、备份片、备份集成员、代理副本和映像副本相关联。
  物理方案:与数据文件和表空间相关联。
重置数据库复本 RESET DATABASE
数据库的复本号是在将日志序列号重置为零前用于标识数据库版本的号码。它可防止将归档和联机重做日志应用到错误的数据库复本中。恢复管理器使用 RESET DATABASE 命令在恢复目录中存储数据库复本信息。所有后续备份和日志归档均与新数据库复本相关联。如果将目标数据库恢复到过去的某一时刻,则必须使用 RESETLOGS 选项打开该数据库。这种情况下,在发出 RESET DATABASE 命令前,恢复管理器无法再次使用恢复目录。这样,恢复管理器就可以区分 RESETLOGS 和旧控制文件的故障还原了。
RESET DATABASE TO INCARNATION <identifier> 命令通过还原以前的数据库复本备份来撤消 RESETLOGS 操作的影响。必须指定要还原的数据库复本的记录主键:
RMAN> reset database to incarnation <identifier>;
注:标识符是通过 LIST INCARNATION OF DATABASE 命令获取的。
恢复目录报告
REPORT 命令
  可以使用 REPORT 命令来分析备份、复制、还原和恢复操作的各个方面。
LIST 命令
  可以使用 LIST 命令显示备份集、文件副本和归档日志的相关信息(存储在恢复目录中)。
相关视图
  RC_DATABASE
     确定哪些数据库当前已在恢复目录中注册
  RC_DATAFILE
     确定哪些数据文件当前已在恢复目录中注册
  RC_STORED_SCRIPT
     确定已存储的脚本
  RC_STORED_SCRIPT_LINE
     确定已存储脚本的文本
  RC_TABLESPACE
     确定哪些表空间当前存储在目标数据库的恢复目录中
已存储的脚本
恢复管理器脚本是一组命令,它:
  可以指定频繁使用的备份、恢复和还原操作
  由 CREATE SCRIPT 命令创建的
  存储在恢复目录中
  只有通过 RUN 命令才能调用
使用 CREATE SCRIPT 存储脚本
  RMAN> create script Level0Backup {...}
使用 EXECUTE SCRIPT 运行脚本
  RMAN > run {execute script Level0Backup;}
使用 REPLACE SCRIPT 重写脚本   --必须提供整个脚本,而不仅仅是更改的行。
  RMAN> REPLACE SCRIPT Level0Backup {...}
使用 DELETE SCRIPT 删除脚本
  RMAN> DELETE SCRIPT Level0Backup;
使用 PRINT SCRIPT 显示脚本
  RMAN> PRINT SCRIPT Level0Backup;
恢复目录备份恢复
  类似与目标数据库的备份恢复(物理备份恢复,逻辑备份恢复)
  始终将恢复目录存储在不同于目标数据库的数据库中。确保将目录数据库的相关文件与目标数据库的相关文件存储在不同的磁盘上。
  当重建了恢复目录后,应该立即重新同步该目录与目标数据库的控制文件。

第十六章 RMAN维护

第十六章 RMAN维护
目标:
  执行备份和副本的交叉查对
  删除备份后更新资料档案库
  更改备份和副本的可用性状态
  使备份或副本脱离保留策略
  将使用操作系统命令制作的备份列入目录


要点:
1.交叉查对 RMAN 备份和副本
执行交叉查对可以确保位于 RMAN 资料档案库中的有关备份集和映像副本的数据与磁盘上或介质管理目录中的相应数据保持同步。
使用 LIST 命令来获得有关已制作的备份和副本的报告,然后使用 CROSSCHECK 命令来检查这些文件是否仍然存在。如果 RMAN 找不到文件,则将资料档案库记录更新为 EXPIRED。通过发出 LIST EXPIRED 命令,确定哪些文件被标记为 EXPIRED。然后,运行 DELETE EXPIRED 以删除所有过期文件的资料档案库记录。
如果备份或副本位于磁盘上,则 CROSSCHECK 命令将确定备份片的头信息是否有效。如果备份位于磁带上,则该命令只检查备份是否存在。
交叉查对数据库中的所有备份:
  CROSSCHECK BACKUPSET OF DATABASE;
交叉查对数据库中的所有副本: --缺省情况下,将查对数据库中状态为 AVAILABLE 或 EXPIRED 的所有文件。
  CROSSCHECK COPY;


2.删除备份和副本
可以使用 DELETE 命令删除备份和映像副本,并更新档案库和恢复目录。发出该命令后,RMAN将显示文件列表并提示确认删除请求。
缺省情况下,DELETE 命令显示文件列表,并在删除列表中的任何文件之前提示确认删除操作。可以使用 NOPROMPT 选项取消确认提示。如果从命令文件运行 DELETE 命令,则缺省使用 NOPROMPT。
删除特定备份集:
  DELETE BACKUPSET 102;
不经确认而删除过期备份: --如果在 DELETE 命令中指定了 EXPIRED 选项,则仅删除已由 CROSSCHECK 命令标记为 EXPIRED 的文件。
  DELETE NOPROMPT EXPIRED BACKUP OF TABLESPACE users;
根据已配置的保留策略删除所有备份、副本和归档重做日志文件:
  DELETE OBSOLETE

使用 BACKUP 命令的 DELETE INPUT 选项
可以在 BACKUP 命令中使用 DELETE INPUT 选项,以指示 RMAN 在成功创建备份集后删除输入文件。只有在备份归档重做日志文件、数据文件副本或备份集时,才可指定此选项。使用此选项相当于对输入文件发出 DELETE 命令。
如果在备份归档重做日志文件时指定了 DELETE ALL INPUT,则 RMAN 会删除与选择标准相符的相应归档重做日志文件的所有副本。BACKUP ARCHIVELOG 命令仅为每个不同的日志序列号备份一个副本,因此,如果指定了 DELETE INPUT 选项而未使用 ALL 关键字,RMAN 仅删除它所备份的文件的副本。


3.更改RMAN备份和副本的可用性
如果无法找到备份或副本,或由于硬件维护的原因而导致备份或副本不可用,可以使用 CHANGE ... UNAVAILABLE 命令。如果某个文件被标记为 UNAVAILABLE,则当发出 RESTORE 或 RECOVER 命令时,RMAN 将不会使用该文件。
如果找到了该文件或维护过程已完成,则可以通过发出 CHANGE ... AVAILABLE 命令再次将其标记为可用。
发出 CHANGE … UNAVAILABLE 命令后,状态将标记在资料档案库中。您可以通过 LIST 命令查看状态。
CHANGE 命令的 BACKUP 关键字指示该命令应对哪些备份集、备份片或代理副本进行操作。如果不为 BACKUP 指定选项,则 CHANGE BACKUP 将对资料档案库中记录的所有备份进行操作。
CHANGE 命令的 COPY 关键字指示该命令应对哪些数据文件副本、归档重做日志或归档重做日志的映像副本进行操作。如果不为 COPY 指定选项,则 CHANGE COPY 将对资料档案库中记录的所有备份进行操作。
示例:
更改特定数据文件的状态:
  CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf' UNAVAILABLE;
更改控制文件备份的状态:
  CHANGE BACKUP OF CONTROLFILE UNAVAILABLE;
  CHANGE BACKUP OF CONTROLFILE AVAILABLE;
更改归档重做日志文件的状态:
  CHANGE COPY OF ARCHIVELOG SEQUENCE BETWEEN 230 AND 240 UNAVAILABLE;


4.使备份或副本脱离保留策略
保留策略指定 RMAN 何时应将它所创建的备份和副本视为已过时。
可以使用 CHANGE … KEEP 命令来使文件脱离保留策略;使用 CHANGE … NOKEEP 来使该文件遵守保留策略。
KEEP 覆盖任何已为该备份或副本配置的保留策略,从而使备份不过时。可以使用此选项来创建一个长期备份。已脱离保留策略的备份仍然是一个完全有效的备份,可以象其它任何 RMAN 备份一样进行还原。
NOKEEP 指定备份或副本将根据用户的保留策略过期。如果在 BACKUP 或 COPY 命令中未指定 KEEP 选项,这是缺省行为。

相关参数:
  FOREVER 参数指定备份或副本永不过期。如果指定了 FOREVER,则必须使用恢复目录,否则,备份记录最终将超出控制文件的时间范围。
  如果指定 LOGS 参数,则意味着:只要该备份或副本可用,则恢复此备份或副本所需的所有归档日志都必须保持可用。
  NOLOGS 指定由于不保留恢复此备份所需的归档日志,因此无法恢复该备份或副本。
  可以使用 UNTIL TIME = 'date_string' 参数来指定一个日期,在该日期之前必须保留备份或副本。

示例:
  创建长期备份:
    CHANGE BACKUPSET 123 KEEP FOREVER NOLOGS;
  使数据文件脱离保留策略 60 天: 
    CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf' KEEP UNTIL 'SYSDATE+60';
 

5.将归档重做日志文件和用户管理的备份列入目录
使用操作系统命令制作备份时,资料档案库中不会记录任何信息。如果使用操作系统实用程序制作备份,则必须手动通知 RMAN。
可以使用CATALOG命令向档案资料库中添加下列信息:
  操作系统数据文件副本
  归档重做日志副本
  控制文件副本

要列入目录的操作系统备份必须符合以下条件:
  位于磁盘上,可以访问
  具有单个文件的完整映像副本
  具有一致或不一致的数据文件、控制文件或归档重做日志备份。如果不一致,则必须是使用BEGIN BACKUP/END BACKUP语句创建的。如果是控   制文件备份,则应该是通过 ALTER DATABASE BACKUP CONTROLFILE 语句制作的。

RMAN 将操作系统备份视为数据文件副本。在列入目录期间,RMAN 只检查文件头。它不检查操作系统实用程序是否已正确复制该文件。
可以使 RMAN 注意到有未记录在资料档案库中的归档重做日志文件。如果已从备份中还原控制文件,并且要使用归档重做日志文件信息对资料档案库进行更新,则需要完成这一工作。

示例:
  将使用操作系统命令制作的备份列入目录:
    CATALOG DATAFILECOPY '/DB01/BACKUP/users01.dbf';
  将归档重做日志文件列入目录:
    CATALOG ARCHIVELOG '/ORADATA/ARCHIVE1/arch_12.arc', '/ORADATA/ARCHIVE1/arch_13.arc'; 

使用 CHANGE … UNCATALOG 命令可以:
  将资料档案库中的记录更新为 DELETED 状态
  从恢复目录中删除特定备份或副本记录
如果已通过 RMAN 之外的一种方法删除了备份或副本,则可以使用该命令。在对 RMAN 备份发出 CHANGE … UNCATALOG 命令后,RMAN 将永远不能使用该备份。
示例:
  删除已删除的归档重做日志文件的记录:
    CHANGE ARCHIVELOG … UNCATALOG;
  删除已删除的数据文件的记录:
    CHANGE DATAFILECOPY '/DB01/BACKUP/users01.dbf' UNCATALOG;

第十五章 RMAN不完全恢复

第十五章 RMAN不完全恢复
目标:
  使用 UNTIL TIME 进行不完全数据库恢复
  使用 UNTIL SEQUENCE 进行不完全数据库恢复
要点:
1.使用RMAN进行数据库的不完全恢复
不完全恢复的还原和恢复进程的步骤和语法与完全恢复相同,只是需要从过去的备份中还原所有数据文件。 --数据库需要一致
目标数据库必须处于已装载的状态。
要还原的文件必须处于脱机状态。只有在备份是通过 RMAN 生成或注册的情况下,才能使用 RMAN 进行还原。
步骤:
  装载数据库。
  为并行化分配多个通道。
  还原所有数据文件。
  使用 UNTIL TIME、UNTIL SEQUENCE 或 UNTIL SCN 恢复数据库。
  使用 RESETLOGS 打开数据库。
  执行整体数据库备份。

2.使用 UNTIL TIME 进行 RMAN 不完全恢复的示例
在夜间12 点,确定EMPLOYEES表被删除后,立即关闭数据库并开始恢复。已知故障发生时间,并且上午11点44分以来没有更改过数据库结构。在此情况下,可以使用UNTIL TIME方法:
  如果目标数据库已打开,则彻底关闭它。
  装载目标数据库。不要在恢复期间备份数据库。
  确保 NLS_LANG 和 NLS_DATE_FORMAT 环境变量已正确设置:
    $NLS_LANG=american
    $NLS_DATE_FORMAT=’YYYY-MM-DD:HH24:MI:SS’
  启动恢复管理器并连接至目标数据库。
    $rman target rman/rman@DB00
  进行恢复:
    RMAN> run {
       2> allocate channel c1 type DISK;
       3> allocate channel c2 type DISK;
       4> set until time = '2000-12-09:11:44:00';
       5> restore database;
       6> recover database;
       7> alter database open resetlogs; }
   确认表存在,然后执行备份。
   通知用户数据库可以使用,需要重新输入系统发生故障前未提交的所有数据。
   如果使用恢复目录,则注册数据库的新复本:
     RMAN> reset database;

3.使用 UNTIL SEQUENCE 进行 RMAN 不完全恢复的示例
UNTIL SEQUENCE 子句指定重做日志序列号和线程号的上限。RMAN 对日志序列号小于指定日志序列号的文件执行操作。
RMAN> RUN {
   2> SET UNTIL SEQUENCE 120 THREAD 1;
   3> ALTER DATABASE MOUNT; 
   4> RESTORE DATABASE; 
   5> RECOVER DATABASE; # recovers through log 119
   6> ALTER DATABASE OPEN RESESTLOGS;
   7> }

 

第十四章 用户管理的不完全恢复


第十四章 用户管理的不完全恢复
目标:
  说明不完全恢复的各个步骤
  执行不完全数据库恢复
  确定当前联机重做日志文件的丢失情况

要点:
1.概述
不完全恢复能够重建数据库,使之恢复到以前的某个时间点(发生故障之前)。
要执行不完全恢复,需要:
  恢复时间点之前制作的所有数据文件的有效脱机或联机备份
  截止到指定的恢复时间之前,备份中生成的所有归档日志
通常在完全恢复操作失败的情况下进行不完全恢复。


2.需要进行不完全恢复的常见情况
丢失归档:由于归档日志损坏或丢失,完全恢复操作失败。数据库只能恢复到应用归档日志之前的过去的某一时间的状态。
丢失重做日志:未镜像重做日志,并且重做日志在归档之前丢失,数据文件也丢失。恢复无法继续到丢失的重做日志之后。
用户错误:用户错误地删除了某个表,提交了用错误的 WHERE 子句更新的数据等等。
丢失控制文件:未镜像控制文件,不知道数据库的结构,但有旧的二进制副本的备份。


3.不完全恢复的类型
基于时间的恢复
截止指定时间点之前的所有更改提交后,该恢复方法终止。在以下情况下使用此方法:
  对数据作出了不必要的更改,或者删除了重要的表,并且知道错误发生的大概时间。
  知道未镜像的联机重做日志损坏的大概时间。镜像日志可以避免此类恢复。

基于取消的恢复
恢复提示符下输入 CANCEL(而不是日志文件名),即可终止该恢复方法。在以下情况下使用此方法:
  当前重做日志文件或组被破坏,并且不可用于恢复。镜像日志可以避免此类恢复。
  进行恢复所需的归档重做日志文件丢失。经常备份并将归档存放在多个目标位置可以避免此类恢复。

基于更改的恢复
  截止指定系统更改编号 (SCN) 之前所做的所有更改提交之后,该恢复方法即终止。

使用备份控制文件恢复
指定的恢复方法(基于取消、基于时间或基于更改的恢复)已完成或控制文件已恢复时,该恢复方法终止。必须在RECOVER DATABASE命令中指定恢复将使用控制文件的旧副本。在以下情况下使用这种方法:
  所有控制文件都已丢失,并且无法重新创建,但存在控制文件的二进制备份。
  将某个结构与当前数据库不同的数据库还原到先前的某个时间点。


4.不完全恢复的原则
认真按照所有恢复步骤进行操作很重要。

事务活动只能前滚至期望的时间,而不能回退至期望的时间。这就是对要及时恢复的数据库必须还原所有数据文件的原因。如果没能还原所有数据文件,将无法打开(非同步)数据库。

开始不完全恢复之前应执行整体关闭数据库备份(包括控制文件和重做日志)。为了:
  允许从错误中恢复。如果恢复失败,重做日志和控制文件将无法用于下一次恢复,除非存在这些文件的备份。
  如果恢复失败,可以节省时间。在这种情况下,可以从新备份中还原数据文件,而不是从需要应用归档的上一次备份中还原。
注:如果不执行整体备份,至少应归档当前重做日志,并备份控制文件。

恢复成功后,执行关闭的数据库的整体备份。如果需要进行恢复才能完成下一次排定的备份,则建议使用这种方法。

在允许用户访问系统之前一定要验证故障是否已经修复,以防止恢复失败而需要再次进行恢复。

从系统中备份(以后删除)归档日志,以避免混合不同数据库复本中的归档。

在恢复前后均应查看警报日志(alert.log)


5.使用用户管理的过程的不完全恢复步骤
  对现有数据库执行关闭的数据库的完全备份。关闭数据库,从备份还原所有数据文件(包括系统表空间文件)。
  还原所有数据文件。不要还原控制文件、重做日志、口令文件或参数文件。
  将数据库置于装载模式并确保数据文件处于联机状态。
  恢复数据库。
  使用 RESETLOGS 选项打开数据库并验证恢复。
  对数据库执行关闭的数据库的整体备份。
注:不完全恢复需要还原所有数据文件,而完全恢复只需还原需要恢复的文件。
 
6.基于时间的恢复示例
当前时间为12:00,某个表于11:45被误删除,现需要恢复该表。
关闭数据库并开始恢复。由于知道故障发生的大概时间,并且数据库结构从11:44之后并未更改,因此,可以使用UNTIL TIME方法。
恢复步骤:
  关闭数据库
  从备份还原所有数据文件(尽可能使用最新备份),装载数据库。
  恢复数据库  SQL> recover database until time '2001-03-09:11:44:00'
  要将数据文件与控制文件和重做日志同步,应使用 RESETLOGS 选项打开数据库: SQL> alter database open resetlogs;
  检查是否恢复成功。

7.使用UNTIL CANCEL进行不完全恢复示例
当前时间是2001年3月9日12:00。某人尝试修复损坏的块时删除了EMPLOYEES表。日志文件都位于同一磁盘上。删除该表的时间大约是上午 11:45。经检查发现:重做日志未多元备份。有一个联机重做日志缺失。
缺失的重做日志未归档。重做日志包含自上午 11:34 以来的信息。26 分钟的数据将丢失。用户可恢复其数据。
经查询,发现找不到重做日志 log2a.rdo,并且该日志未归档。因此,不能恢复该点之后的数据。
         查询 V$LOG_HISTORY 确认缺少归档日志序列 48 (log2a.rdo)
步骤:
  关闭数据库。
  从备份中还原所有数据文件,装载数据库。
  将数据库恢复到序列号为 48 的日志: SQL> recover database until cancel  --当要求指定48时输入cancel退出
  使用 RESETLOGS 选项打开数据库。
  检查 EMPLOYEES 表是否存在。


8.使用备份控制文件进行不完全恢复示例
当前时间是2001年3月9日12:00,包含EMPLOYEES表的表空间已被删除,时间是上午11:45,上午11点以后数据库再未更新过。拥有表空间被误删前的数据文件和控制文件的备份。
步骤:
  通过查看警报日志确定错误发生时间,关闭数据库,备份数据文件和控制文件以备不时之需。
  还原表空间存在时备份过的数据文件和控制文件,尝试打开数据库,此时会提示重做日志与控制文件不同步。
  验证是否存在脱机数据文件并使它们处于联机状态,因为恢复后所有脱机文件可能无法恢复。
  执行恢复:SQL> recover database until time '2001-03-09:11:44:00' using backup controlfile;
  使用resetlogs方式打开数据库,检验恢复是否成功。
注:需要用备份控制文件恢复的原因是因为删除该表空间后控制文件已发生改变了。
    如果出现如下错误,,表明数据文件需要从更早的备份进行还原,或需要进行更多的恢复(此处不可能)。
 ORA-01152: file 7 was not restored from a sufficiently old backup
 ORA-01110: datafile 7: '/disk1/data/new01.dbf'


9.当前重做日志文件丢失
如果数据库关闭,可能发生了介质故障或者后台进程可能已终止。按照以下步骤纠正该情况:
  如果尝试打开数据库,会报错:
 Database mounted.
 ORA-00313: open failed for members of log group 2 of  
 thread 1
 ORA-00312: online log 2 thread 1:  '/disk1/archive/log2a.rdo'
 ORA-27037: unable to obtain file status
 SVR4 Error: 2: No such file or directory
 Additional information: 3
 由于日志组 2 是当前日志组,因此尚未归档。使用 CLEAR LOGFILE 命令无效,原因是:
 SQL> alter database clear unarchived logfile group 2;
 ORA-01624: log 2 needed for crash recovery of thread 1
 ORA-00312: online log 2 thread 1: 'disk1/archive/log2a.rdo'
  因此需要不完全恢复。首先,必须记录当前日志序列号:
 SQL> select * from v$log;
 GROUP#... SEQ#   BYTES ... ARC STATUS... FIRST_TIME
 ------... ----   ------... --- ------...--------------
    1 ...  60 153600  ... NO INACTIVE. 01-03-09:19:34
    2 ...  61 153600  ... NO CURRENT... 01-03-09:19:50
 从先前的备份还原所有数据文件,使用 RECOVER UNTIL CANCEL 命令并在应用重做日志 61 之前停止:
 SQL> recover database until cancel;
 ORA-00279: change 309043...03/09/01 14:50:14 needed for thread 1
 ORA-00289: suggestion : /disk1/archive/arch_46.rdo
 ORA-00280: change 309043 for thread 1 is in sequence #46
 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
 ...
 ORA-00279: change 309141...03/09/01 19:50:14 needed for thread 1
 ORA-00289: suggestion : /disk1/archive/arch_61.rdo
 ORA-00280: change 309043 for thread 1 is in sequence #61
 ORA-00278: log file ... no longer needed for this recovery
 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
 cancel
 Media recovery complete.
  使用 RESETLOGS 选项打开数据库。
  现在数据库应该可以运行了,因为将重新创建所有丢失的日志文件。
注:如果由于介质故障需要在另一个磁盘上重新创建日志文件,请使用 ALTER DATABASE DROP LOG GROUP 和 ALTER DATABASE ADD LOG GROUP 命令手动创建日志文件。

 

第十三章 RMAN完全恢复

第十三章 RMAN完全恢复
目标:
  描述 RMAN 在还原和恢复操作中的用法
  在 ARCHIVELOG 模式下执行完全恢复
  将数据文件还原到其它位置
  使用归档重做日志文件重新定位和恢复表空间


要点:
1.使用 RMAN 执行还原和数据文件介质恢复
RMAN 自动执行还原文件的过程。发出 RESTORE 命令后,RMAN 将使用服务器会话还原正确的备份和副本。
RMAN 资料档案库用于选择最完整的可用备份集或映像副本来进行还原。缺省情况下,如果某一文件已处于正确位置且其文件头包含有正确的信息,则 RMAN 将不还原该文件。
发出 RMAN RECOVER 命令后,RMAN 将应用联机重做日志文件和归档重做日志文件中的更改,或使用增量备份来恢复已还原的文件。
使用 RMAN 可以在以下级别执行恢复:
  数据库
  表空间
  数据文件
在完全恢复过程中,归档重做日志文件和联机重做日志文件中的所有重做条目都将用于恢复数据库。损坏的文件将从备份进行还原,而日志文件则用于将数据文件更新到当前时间点。


2.使用RMAN还原ARCHIVELOG模式下的数据库
假定:
  磁盘上有使用 RMAN 生成的完全备份。
  当前控制文件未损坏,无需还原。
  所有数据文件都已损坏或丢失。 
步骤:
  rman target /
  RMAN> STARTUP MOUNT
  RMAN> RESTORE DATABASE;
  RMAN> RECOVER DATABASE;
  RMAN> ALTER DATABASE OPEN;

使用RMAN将数据文件还原到新位置
如果遇到介质故障,如磁盘驱动器丢失,则可能需要将数据文件还原到新位置。
使用 SET NEWNAME 命令可将数据文件还原到新位置。
SET NEWNAME FOR DATAFILE 1 to '/<newdir>/system01.dbf';
使用 SWITCH 命令可在控制文件中记录更改。
SWITCH DATAFILE ALL;
步骤:
  连接到RMAN  rman target
  装载数据库  RMAN> STARTUP MOUNT
  使用 RMAN 将数据文件还原到新位置并在控制文件中记录更改。
  run{
  set newname for datafile 1 to '/<newdir>/system01.dbf';
  restore database;
  switch datafile all;
  recover database;
  alter database open; }


3.使用RMAN恢复表空间
使用下面的 RMAN 命令还原和恢复表空间:
  RESTORE TABLESPACE
  RECOVER TABLESPACE
示例:
  run{
 sql "alter tablespace users offline immediate";
 restore tablespace users;
 recover tablespace users;
 sql "alter tablespace users online";
 }
使用 RMAN 重新定位表空间
如果由于磁盘故障而无法访问某一数据文件,则需要将其还原到一个新位置或切换到现有的映像副本。
如果由于某个驱动器的磁盘空间不足,或需要重新组织数据库来提高性能,因而需要重新定位表空间。
步骤:
  使用 SET NEWNAME 命令还原文件。
  使用 SWITCH 命令在控制文件中记录新名称。
  使用 RECOVER TABLESPACE 命令恢复表空间的数据文件。

第十二章 用户管理的完全恢复

第十二章 用户管理的完全恢复
目标:
描述介质恢复
在 NOARCHIVELOG 模式下执行恢复
在 ARCHIVELOG 模式下执行完全恢复
将数据文件还原到其它位置
使用归档重做日志文件重新定位和恢复表空间
描述对只读表空间的恢复


要点:
1.介质恢复
介质恢复用于恢复丢失的或损坏的当前数据文件或控制文件。
它还可用于恢复数据文件脱机时由于未使用OFFLINE NORMAL选项而丢失的那些更改。
恢复步骤:
  从备份还原损坏的或丢失的文件。
  根据需要应用归档重做日志文件和联机重做日志文件中的更改。此时将生成还原块(undo block)。这称为前滚或高速缓存恢复。
  数据库此时可能包含已提交的和未提交的更改。
  还原块用于回退任何未提交的更改。这称为回退或事务处理恢复。
  数据库现处于已恢复状态。


2.在NOARCHIVELOG模式下进行恢复
当处于 NOARCHIVELOG 模式的数据库发生介质故障时,需要使用一个有效的、关闭的数据库的备份进行恢复。
在NOARCHIVELOG模式下,即使只有一个数据文件被损坏或丢失,也必须还原所有的Oracle数据库文件。
确保还原以下所有文件:数据文件和控制文件。
仅当口令文件和参数文件被损坏或丢失时,才应该还原它们。
切记,必须将所有的Oracle数据库文件(数据文件,日志文件,控制文件)进行同步,以打开该数据库。
注:对于处于NOARCHIVELOG模式下的数据库,如果自上次备份以来没有覆盖任何重做日志文件,
    则只需还原受影响的 Oracle 数据文件(如下所示):
      数据库有两个重做日志。
      关闭的数据库的备份是在日志序列 144 时进行的。
      当数据库在日志序列 145 时,数据文件 2 丢失。
      结果:由于日志序列 144 尚未被覆盖,所以可手动还原和恢复数据文件 2。


3.在ARCHIVELOG模式下进行恢复
在ARCHIVELOG模式下进行的恢复恢复可分为完全恢复和不完全恢复。
在完全恢复中,使用重做日志文件或增量备份将还原文件更新到最近的时间点。
将归档重做日志文件和联机重做日志文件中包含的重做更改全部应用到这些文件中。
可以对数据库、表空间或数据文件执行完全恢复。
对于不完全恢复,其实就是将数据库恢复到当前时间以前的某一时刻。并不会应用备份后生成的所有重做条目。


4.完全恢复
确保要还原的数据文件处于脱机状态。
仅还原丢失的或损坏的数据文件。
不要还原控制文件、重做日志文件、口令文件或参数文件。
恢复数据文件。
当处于 ARCHIVELOG 模式的数据库发生介质故障时,需要使用以下内容将数据库完全恢复到发生故障前那一刻的情形:
在将数据库设置为 ARCHIVELOG 模式后进行的有效备份(其中包含丢失的或损坏的数据文件)
所使用的备份起至今的所有归档日志
包含尚未归档的事务处理的重做日志文件
说明:即进行归档模式下的完全恢复需要的是设置为归档模式后进行的有效的备份(可以是冷备,也可以是热备)和至今为止的全部归档日志。
优点
  仅需还原丢失或损坏的文件。
  已提交的数据不会丢失。通过还原上述文件并应用归档日志和重做日志,就可将数据库恢复至当前的时间点。
  恢复的总时间就等于还原文件并应用所有归档日志和重做日志所需的时间。
可以在数据库打开的情况下进行恢复(包含联机还原段的系统表空间文件和数据文件除外)。
缺点
  必须有自上次备份起到当前时间的所有归档重做日志文件。如果缺失一个文件,则无法执行完全恢复,
  原因是必须依次应用所有的归档重做日志文件。
确定需要恢复哪些文件
  查看V$RECOVER_FILE以确定需要恢复哪些数据文件。
  查看V$ARCHIVED_LOG以得到数据库的所有归档重做日志文件的列表。
  查看V$RECOVERY_LOG以得到进行恢复时所需的所有归档重做日志文件的列表。
RECOVER命令
  RECOVER [AUTOMATIC] DATABASE  --只能用于恢复关闭的数据库。
  RECOVER [AUTOMATIC] TABLESPACE <NUMBER> | <NAME>  --只能用于恢复打开的数据库。
  RECOVER [AUTOMATIC] DATAFILE <‘filename’> | <NAME>  --既可用于恢复打开的数据库,又可用于恢复关闭的数据库。
  其中:AUTOMATIC 会自动应用归档日志文件和重做日志文件。
将归档还原至不同的位置
  如果归档重做日志文件不还原到LOG_ARCHIVE_DEST目录中,则:
    在恢复提示下指定位置和名称:
       Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    使用ALTER SYSTEM ARCHIVE命令:
       ALTER SYSTEM ARCHIVE LOG START TO <new location>;
    使用RECOVER FROM <LOCATION>命令:
       RECOVER FROM '<new location>' DATABASE
如何自动应用重做日志文件
  在开始介质恢复前:SET AUTORECOVERY ON
  当提示输入一个重做日志文件时,输入AUTO
  使用RECOVER命令的AUTOMATIC选项:RECOVER AUTOMATIC datafile 4
用于将数据文件还原到新位置的、用户管理的过程
  使用操作系统命令将文件还原到新的位置,启动该例程并装载数据库, 
  使用ALTER DATABASE命令来更新控制文件,将其更新为新的文件名或更新到新的位置:
  ALTER DATABASE RENAME FILE  'xxx/xxx' to 'xxx/xxx'
 
完全恢复方法
方法1 恢复关闭的数据库
适用于以下情况:
  数据库不是全天候运行。
  恢复的文件属于系统表空间或还原段表空间。
  需要恢复整个数据库或大部分数据文件。
方法2 恢复打开的数据库(数据库最初是打开的)
适用于以下情况:
  发生了文件损坏、文件意外丢失或介质故障,但未导致数据库关闭。
  数据库全天候运行。
  恢复的文件不属于系统表空间或还原段表空间。
方法3 恢复打开的数据库(数据库最初是关闭的)
适用于以下情况:
  某个介质故障或硬件故障导致系统关闭。
  数据库全天候运行。必须最大限度地减少数据库的停机时间。
  还原的文件不属于系统表空间或还原段表空间。
方法4 在没有备份的情况下恢复数据文件
适用于以下情况:
  介质故障或用户故障导致丢失了从未备份过的数据文件。
  自该文件创建以来的所有归档日志都存在。
  还原的文件不属于系统表空间或还原段表空间


5.完全恢复关闭的数据库
用于:
  系统表空间数据文件
  回退段数据文件
  整个数据库
步骤:
  定位损坏的文件,然后关闭数据库
  从备份中还原文件——替换损坏的文件
  mount数据库,恢复(recover)该数据文件
  打开数据库
注:在使用此恢复方法进行恢复的期间,必须关闭数据库;在恢复进程中,整个数据库都无法让用户进行访问。


6.恢复打开的数据库(数据库最初是打开的)
用于:
  未导致数据库关闭的文件损坏、丢失或介质故障。
  数据库需要全天候运行,必须最大限度地减少数据库的停机时间。
  受到影响的文件不属于系统表空间或还原/回退段表空间。
步骤:
  查询v$datafile和v$datafile_header以定位出现问题的文件,以确定是否需要将其脱机,(一把情况下,oracle会自动将其脱机)
  从备份中还原该文件。
  使用recover命令将归档和重做日志应用到还原的数据文件中。
  将该文件联机。
注:对于具有多个文件的表空间,将其中一个数据文件脱机,只有该数据文件中包含的数据无法进行访问,而表空间仍然可以使用。


7.恢复打开的数据库(数据库最初是关闭的)
用于:
  介质或硬件故障导致系统关闭。
  数据库需要全天候运行,必须最大限度地减少数据库的停机时间。
  损坏的文件不属于系统表空间或还原段表空间。
步骤:
  mount数据库
  由于有文件无法打开,因此无法打开数据库,需要先将该文件脱机。
  打开数据库。
  还原该文件,必要时,重命名该文件。
  恢复该文件。
  联机该文件。


8.在没有备份的情况下重新创建丢失的数据文件
用于:
 介质故障或用户故障导致丢失了从未备份过的数据文件
  自该文件创建以来的所有归档日志都存在
  受到影响的文件不属于系统表空间或还原段表空间
限制:
  当文件属于 SYSTEM 表空间时不能使用
  如果重新创建了控制文件,则不能使用——需要:对丢失的数据文件的说明仍保留在数据字典和控制文件中。
步骤:
  如果数据库已关闭,则装载数据库,将该文件脱机,打开数据库;如果数据库已打开,则使用‘立即’选项脱机该文件。
  (即无论如何先脱机该文件)
  使用ALTER DATABASE命令,用相同的名称重新创建该数据文件(alter database create datafile 'oldfile' as 'newfile')
  (这样将使用数据字典中记录的原始文件来创建该文件)  --即创建一个旧的文件,但使用新的位置和文件名。
  用 RECOVER 或 ALTER DATABASE RECOVER 命令,开始将归档重做日志文件和联机重做日志文件应用到重新创建的数据文件中。
  恢复完成后,将该数据文件联机。
 

9.只读表空间恢复
情况 1:被恢复的表空间现在是只读的,并且在上次备份时也是只读的。在这种情况下,只需从备份中还原表空间。无需应用任何重做信息。
情况 2:被恢复的表空间现在可读写,但在上次备份时则是只读的。在这种情况下,需要从备份中还原表空间,并应用自表空间被设置为可读写状态以来的重做信息。
情况 3:被恢复的表空间现在是只读的,但在上次备份时是可读写的。因为应该在将表空间设置为只读状态后始终对它进行备份,所以不应该遇到这种情况。但是,如果确实出现这种情况,则必须从备份中还原表空间,并将其恢复到被设置为只读状态前的那一刻。

当出现以下情况时,必须为只读表空间考虑一些特殊事项:
重新创建控制文件
如果需要用 CREATE CONTROL FILE 命令重新创建控制文件,并且数据库有只读表空间,则必须按照特殊的过程进行操作。发出 ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令以获得这些过程的列表。
重命名数据文件
如果不能将只读数据表空间中的数据文件副本还原到正确的目标位置,则可以使用 ALTER DATABASE RENAME 命令将这些文件放到新的位置。
备份控制文件
带备份控制文件的只读表空间与脱机正常表空间的恢复过程实质上是相同的,只是需要在打开数据库后将表空间联机。


10.控制文件的丢失与恢复:
如果出现以下情况,则可能需要创建控制文件:
  所有控制文件由于某个故障而丢失
  需要更
改数据库的名称
  需要更改控制文件中的当前设置
三种控制文件的恢复方法:
  用当前副本还原丢失的文件。
  使用CREATE CONTROLFILE命令创建一个新文件。

第十一章 RMAN备份

第十一章 RMAN备份
目标:
  确定 RMAN 特定的备份类型
  使用 RMAN BACKUP 命令创建备份集
  备份控制文件
  备份归档重做日志文件
  使用 RMAN COPY 命令创建映像副本

要点:
1.RMAN备份概念
恢复管理器提供对以下内容进行备份的功能:
  整个数据库、表空间中的每个数据文件或单个数据文件
  控制文件
  所有归档日志或所选归档日志
注:使用恢复管理器时不备份联机重做日志文件。
关闭的数据库的备份
关闭的数据库的备份定义为在数据库关闭(脱机)时进行的备份。这与一致数据库备份相同。如果执行关闭的数据库的备份,则不得打开目标数据库。如果使用恢复目录,则必须打开恢复目录数据库。
打开的数据库的备份
打开的数据库的备份定义为在数据库打开(联机)时对数据库任意部分进行的备份。恢复管理器使用服务器进程制作数据文件、控制文件或归档日志的副本。使用恢复管理器时,不要使用 ALTER TABLESPACE ... BEGIN BACKUP 命令将表空间置于备份模式。RMAN读取块,直到获得一致读取为止。
映像副本:
  数据文件、控制文件或归档重做日志文件的副本。可以使用恢复管理器或os命令制作相应的副本。数据文件的映像副本
  包含所有的数据文件块,其中包括未使用过的块。映像副本只能包含一个文件,而且不能对单个复制操作进行多元备份。
备份集:
  可以包含一个或多个数据文件、控制文件或归档重做日志文件(以RMAN特定的格式存储在磁盘或磁带上)。
备份级分类:
  备份集有两种类型:
    数据文件:可以包含数据文件和控制文件,但不包含归档日志
    归档日志:仅包含归档日志,不能包含数据文件或控制文件
制作备份级的方法:
  完全备份:在完全备份中,可以备份一个或多个文件。在完全备份中,所有包含指定文件数据的数据块都会被备份。
  增量备份:增量备份只对上次增量备份以后数据块有更改的数据文件进行备份。
            增量备份需要一个基础级别(即增量级别 0)备份,该备份包含指定文件数据的所有块。
            增量级别 0 和完全备份均复制数据文件中的所有块,但是在增量备份策略中不能使用完全备份。
数据文件备份集中的控制文件:
  备份集中的每个文件必须具有相同的Oracle块大小。如果包含控制文件,就会将它写入到最后一个数据文件备份集中。可以通过:
    使用 INCLUDE CONTROL FILE 语法显式包含
    通过备份文件 1(系统数据文件)隐式包含
BACKUP命令:
  用于备份数据文件、归档重做日志文件以及控制文件。命令将文件备份到磁盘或磁带上的一个或多个备份集中。在数据库打开或关闭时,都  可以制作备份。类型既可以是完全备份,也可以是增量备份。

2.备份集(set)和备份片(piece)
备份集是一种逻辑结构,它具有以下特性:
  备份集包含一个或多个称作备份片的物理文件。
  备份集是使用BACKUP命令创建的。FILESPERSET参数可以控制备份集中包含的数据文件个数。
  可以将备份集写入磁盘或磁带。
  在执行恢复之前必须通过还原操作(即复制and覆盖)从备份集中提取文件。
  归档重做日志文件备份集不能是增量备份(缺省为完全备份)。
  备份集不包含从未使用过的数据块。
备份片:
  逻辑备份集通常只包含一个备份片。备份片是一个包含一个或多个Oracle数据文件或归档日志的物理文件
 (文件可能跨备份片,或者说每个如果一个文件超过备份片最大大小,则数据块会分布在每个备份片上)。
  限制备份片大小:
    ALLOCATE CHANNEL … MAXPIECESIZE = integer
    CONFIGURE CHANNEL … MAXPIECESIZE = integer

3.backup命令
在使用 BACKUP 命令时,必须执行以下操作:
  装载或打开目标数据库。
  如果未使用自动通道分配,则手动分配一个通道用以执行BACKUP命令。
或者执行以下操作:
  指定备份片的命名约定。如果未指定FORMAT参数,则将备份片存储在特定目录中(dbs)。如果未指定文件名格式,则缺省使用%U。
  通过使用 INCLUDE CURRENT CONTROLFILE 选项,可以将控制文件包含在备份集中。
backup命令选项:
详见sg

4.双重备份集
通过对备份集进行双重备份,可以给每个备份片最多创建 4 个完全相同的副本。
可以使用以下命令生成双重备份的备份集:
  BACKUP COPIES
  SET BACKUP COPIES
  CONFIGURE … BACKUP COPIES
例:RMAN> BACKUP COPIES 2 DATAFILE 1, DATAFILE 2 FORMAT '/BACKUP1/%U','/BACKUP2/%U';
注:RMAN 并不生成多个备份集,而是给集内的每个备份片生成完全相同的副本。
    另一种方法是备份备份集:RMAN>BACKUP BACKUPSET

5.归档重做日志文件的备份
在开始执行每个不包含UNTIL子句或SEQUENCE参数的BACKUP ... ARCHIVELOG命令时,RMAN会尝试自动切换并归档当前的联机重做日志。
在9i中,RMAN执行归档日志故障转移。如果在归档重做日志文件中检测到任何损坏的块,RMAN就会在其它归档目标中搜索没有损坏块的文件。
使用BACKUP ARCHIVELOG备份归档重做日志,或在备份数据文件和控制文件时使用BACKUP…PLUS ARCHIVELOG命令也同时备份这些日志文件。
 
归档日志备份集的特性
仅包含归档日志,不能包含数据文件或控制文件。
始终是完全备份。(因为可以指定要备份的归档日志的范围,所以无法执行增量备份。)
示例:
RMAN> BACKUP
   2> FORMAT '/disk1/backup/ar_%t_%s_%p'
   3> ARCHIVELOG ALL DELETE ALL INPUT;
将所有的归档重做日志备份到一个备份集中,其中每个备份片包含3个归档日志。在归档日志复制完毕后,将这些日志从磁盘上删除,并在 V$ARCHIVED_LOG视图中将它们标记为已删除。

6.备份约束
恢复管理器要连接的目标数据库必须已装载。
不支持对联机重做日志进行备份。
如果目标数据库处于NOARCHIVELOG模式,则只能采用“干净的”表空间和数据文件备份(即 “脱机正常” 或 “只读” 表空间的备份)。
如果目标数据库处于ARCHIVELOG模式,则只能备份“当前的”数据文件(通过恢复将数据文件还原为当前状态)。
如果使用恢复目录,则必须打开恢复目录数据库。

7.映像副本
映像副本包含单个数据文件、归档重做日志文件或控制文件。可以使用 RMAN COPY 命令或操作系统命令创建映像副本。
当使用 RMAN COPY 命令创建映像副本时,服务器会话验证文件中的块,并将副本记录到控制文件中。
使用 RMAN COPY 命令可以创建文件的映像副本。输出文件始终写入磁盘。可以复制数据文件、归档重做日志文件或控制文件。在很多情况下,复制数据文件比备份这些文件更有益处,原因是复制的数据文件输出不需要任何其它处理就可以使用。
如果要使用 COPY 命令备份整个数据库,必须使用单独的 COPY 语句复制每个数据文件。也可以制作控制文件和归档重做日志文件的副本。
注:COPY与BACKUP的区别在于,备份是备份文件中所有使用的数据块,复制则是复制整个文件(所有的块,无论是否使用)。
映像副本的特性:
  只能将映像副本写入磁盘。
  如果文件存储在磁盘上,则可以立即使用这些文件(这些文件不需要从其它介质还原,相当于ALTER DATABASE RENAME FILE语句)。
  映像副本中将包含所有的块(不管这些块是否包含数据)。
  映像副本可以是完全备份或增量 0 级备份的一部分。
  在增量备份策略中,可以将映像副本指定为 0 级备份,但映像副本不能作为其它级别的备份。
COPY命令的检测选项
在复制操作中,Oracle 服务器进程对每个块执行校验和计算以检测是否有块损坏。RMAN 在还原副本时也要核对校验和。该过程称为物理损坏检测。可以使用 NOCHECKSUM 选项取消校验和操作,从而加快复制进程。
可以使用 CHECK LOGICAL 选项测试通过了物理损坏检查的数据和索引块,查看它们是否存在逻辑损坏,如行片或索引条目损坏。如果检测到任何块存在逻辑损坏,则将该块记录到服务器进程的警报日志和跟踪文件中。
可以使用 MAXCORRUPT 参数设置逻辑和物理损坏的阈值。只要在某个文件中检测到的逻辑和物理损坏总和低于该值,则 RMAN 命令完成,同时 Oracle 将损坏块的范围植入到 V$COPY_CORRUPTION 视图。如果超出 MAXCORRUPT,则该命令终止,并且不植入视图。
映像复制并行性
缺省情况下,恢复管理器将连续执行各 COPY 命令。可以通过以下方法并行执行复制操作:
  使用 CONFIGURE DEVICE TYPE … PARALLELISM integer
  分配多个通道
  为多个文件指定一条COPY命令
当并行度比较高时,占用的计算机资源较多,但备份操作完成速度较快。
示例:
RMAN> COPY
   2> DATAFILE '/ORADATA/users_01_db01.dbf' TO
   3>          '/BACKUP/users01.dbf' tag=DF3,
   4> ARCHIVELOG 'arch_1060.arc' TO
   5>            'arch_1060.bak';
RMAN> CONFIGURE DEVICE TYPE disk parallelism 4;
   2> COPY      # 3 files copied in parallel
   3>     datafile 1 TO '/BACKUP/df1.dbf',
   4>     datafile 2 TO '/BACKUP/df2.dbf',
   5>     datafile 3 TO '/BACKUP/df3.dbf';
RMAN> COPY      # Second copy command
   2>     datafile 4 TO '/BACKUP/df4.dbf';
复制整个数据库
  连接到 RMAN 并在装载模式下启动:
  RMAN> STARTUP MOUNT
  获取目标数据库的数据文件列表:
  RMAN> REPORT SCHEMA;
  使用 COPY 命令或脚本创建上面列出的所有数据文件的副本:
  RMAN> COPY datafile 1 TO '/BACKUP/df1.cpy',datafile 2 TO '/BACKUP/df2.cpy ',...;
  使用 LIST COPY 命令验证副本:
    RMAN> LIST COPY;
可以使用CURRENT CONTROLFILE命令将控制文件包含在副本中。此外,如果CONFIGURE CONTROLFILE AUTOBACKUP为 ON,则在执行COPY命令后,RMAN 将自动备份控制文件。

8.增量备份
完全备份
完全备份与整体数据库备份不同。整体备份包含目标数据库的所有数据文件和控制文件,而完全备份可能只包含一个或多个数据文件、控制文件或归档重做日志文件。
在执行完全备份时,Oracle 服务器进程读取整个文件,并将所有的块复制到备份集内,只跳过从未使用过的数据文件块。在备份归档重做日志或控制文件时,服务器会话不会跳过任何块。
完全备份不属于增量备份策略的一部分。可以用它创建和还原数据文件、数据文件副本、表空间、数据库、控制文件、归档日志和归档日志副本的完全备份。注意,包含归档重做日志的备份集始终是完全备份。
增量备份
  增量备份仅包含自上次增量备份以来更改过的块。
RMAN 可以创建多级增量备份:
  差异备份:这是增量备份的缺省类型,它备份自最近n级或更低级别备份以来更改过的所有块
  累积备份:备份自最近n-1级或更低级别备份以来更改过的所有块
差异备份是使用BACKUP命令的INCREMENTAL关键字指定的。可以指定INCREMENTAL LEVEL = integer,其中integer是1到4之间的任意整数。
必须将0级备份作为增量策略的基础备份。0级增量备份在内容上与完全备份相同,但与完全备份不同的是,0级备份被看作是增量策略的一部分。如果在运行1级或更高级别的备份时,0级备份不存在,RMAN会自动制作0级备份。
累积增量备份具有以下特性:
  累积增量 n 级(n > 0)备份复制自上次 n-1 级或更低级别备份以来更改过的所有块。
  累积增量备份以相同的级别备份上次备份的块。因此,与非累积备份相比,它们占用的时间较长、写出的块较多、生成的备份文件也较大。
  因为恢复时在各级别必须应用的备份较少,所以累积增量备份可以提高恢复速度。
示例:
累积增量备份以相同的级别复制上次增量备份已复制的更改。因此,如果采用 2 级增量备份,则随后的 2 级累积备份将备份所有新修改的块以及该 2 级增量备份备份过的块。这意味着要进行完全、恢复,只需要一个同级的增量备份即可。
RMAN> BACKUP INCREMENTAL level 2 cumulative database;

9.在NOARCHIVELOG模式下进行备份
  确保要存储备份的目标目录可用并具有足够的空间。
  使用NORMAL、IMMEDIATE或TRANSACTIONAL子句彻底关闭数据库。
  装载数据库。
  如果未使用自动通道分配,请分配多个通道,并使用格式字符串将通道多路复用到不同的磁盘上。
  运行 BACKUP 命令。由于数据库处于NOARCHIVELOG模式,增量备份不适用,请使用完全备份选项。
  确认备份完成并已分类。
  打开数据库进行正常使用。
命令如下:
RMAN> BACKUP DATABASE FILESPERSET 3;

10.自动备份控制文件
如果 CONFIGURE CONTROLFILE AUTOBACKUP 设置为 ON,则在以下情况下,RMAN 自动执行控制文件的自动备份:
  在 RMAN 提示符下执行每个 BACKUP 或 COPY 命令后
  当 RUN 命令块中 BACKUP 或 COPY 命令后跟的既不是 BACKUP 也不是 COPY 时
  当每个 RUN 命令块结尾处的最后一条命令既不是 BACKUP 也不是 COPY 时
在执行这些命令过程中,除了执行当前控制文件的备份或复制外,还进行控制文件的自动备份。
缺省情况下,CONFIGURE CONTROLFILE AUTOBACKUP  设置为 OFF。
RMAN 使用 %F 这种缺省格式自动备份当前的控制文件。可以使用 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT 和 SET CONTROLFILE AUTOBACKUP FORMAT 命令更改此格式。
格式字符串必须包含 %F 替代变量。此变量将转换为 c-IIIIIIIIII-YYYYMMDD-QQ,其中:
IIIIIIIIII 代表 DBID。DBID 以十进制输出,因此可以方便地将它与目标数据库关联起来。
YYYYMMDD 是生成备份当天的公历时间戳
QQ 是序列号(十六进制数字),从 00 开始,最大值为 'FF' (256)

11.备份和映像副本的标记
标记是可以分配给备份集或映像副本的有意义的名称。使用用户标记的优点如下:
标记可以为文件副本集合或备份集提供有用的引用。
在 LIST 命令中,使用标记可以容易地定位已备份的文件。
可以在 RESTORE 和 SWITCH 命令中使用标记。
同样的标记可以用于多个备份集或文件副本。
如果一个不唯一的标记引用了多个数据文件,则恢复管理器会选择最新的可用文件。

12.RAMN的监视和查询
RMAN 动态视图
可以使用以下视图获取在控制文件中存储的 RMAN 信息:
  V$ARCHIVED_LOG 显示在数据库中已经创建、备份或清除的归档文件。
  V$BACKUP_CORRUPTION 显示在备份集的备份过程中找到的损坏块。
  V$COPY_CORRUPTION 显示映像复制过程中找到的损坏块。
  V$BACKUP_DATAFILE 用于通过确定各数据文件中的块数来创建大小相同的备份集。通过它也可以找出数据文件中已损坏的块数。  V$BACKUP_REDOLOG 显示在备份集中存储的归档日志。
  V$BACKUP_SET 显示已经创建的备份集。
  V$BACKUP_PIECE 显示为备份集创建的备份片。
如何监视复制进程
  使用 SET COMMAND ID 命令可将服务器会话与通道联系起来。
  查询 V$PROCESS 和 V$SESSION,可以确定会话与哪些 RMAN 通道对应。
  查询 V$SESSION_LONGOPS,可以监视备份和复制的进度。
  使用操作系统实用程序可以监视进程或线程。

第十章 用户管理的备份

第十章 用户管理的备份
目标:
描述用户管理的备份和恢复操作
论述与只读表空间相关的备份问题
执行关闭的数据库的备份
执行打开的数据库的备份
备份控制文件
在联机备份失败后执行清除
使用 DBVERIFY 实用程序检测损坏

1.术语
整体备份
指对数据库的所有数据文件和控制文件进行备份。无论数据库是打开的还是关闭的,都可以执行整体备份。这是最常见的备份方法。
在数据库关闭(非abort方式)后进行的整体备份称为一致备份。在这种备份中,所有数据库文件的标头均与控制文件一致。
完全还原后,数据库不需任何恢复即可打开。数据库以NOARCHIVELOG模式进行操作时,只有一致的整体数据库备份才可以用来还原和恢复。
如果数据库打开并且可操作,数据文件的标头将与控制文件不一致,除非数据库是以只读模式打开的。
如果使用 ABORT 选项关闭数据库,这种不一致性将一直存在。这种状态下的数据库备份称为不一致备份。
不一致备份需要通过恢复才能使数据库进入一致状态。

表空间备份
表空间备份是对组成表空间的数据文件进行的备份。只有当数据库处在ARCHIVELOG模式下时表空间备份才有效。

数据文件备份
如果数据库处在ARCHIVELOG模式下,可以对单个数据文件进行备份。在NOARCHIVELOG模式下,可以对只读或脱机正常的数据文件进行备份。


2.用户管理的备份和恢复
文件是使用操作系统命令进行备份的
备份是使用操作系统命令进行还原的
恢复是使用 SQL 和 SQL*Plus 命令完成的

查询视图以获得数据库文件信息
在开始备份之前,通过查询V$DATAFILE、V$CONTROLFILE、V$LOGFILE和V$TABLESPACE视图来获得有关数据库文件的信息。

评估备份方法
不归档的操作系统备份,用于在发生介质故障后恢复到上次备份的点。
归档的操作系统备份,用于在发生介质故障后恢复到故障点。


3.一致的整体数据库备份(关闭的数据库的备份)
一致的整体数据库备份是在数据库关闭的情况下对构成Oracle数据库的所有数据文件和控制文件进行的备份。
它还可以包括对联机重做日志文件、参数文件和口令文件的备份。
注:如果使用 “正常”、“事务处理” 或 “立即” 选项彻底地关闭了数据库,则不必在整体数据库备份中包含联机重做日志文件。
    但是,在需要还原整个数据库的情况下,如果已备份了联机重做日志文件,还原过程将得以简化。

备份步骤:
关闭数据库
复制控制文件和数据文件到备份位置
打开数据库

特点:
所有在关闭的数据库的备份过程中复制的文件都具有一致的时间点。在备份过程中,由于数据库不可用,因此不发生任何事务处理。
数据库不可用的时间长短受数据库大小、数据文件的数量以及复制数据文件的速度的影响。如果这一时间超过了允许的关机时间,必须选择其它备份类型。
只能恢复到上一次完全一致的整体数据库备份时的状态,丢失的事务处理必须在执行恢复操作之后手动输入。
可以考虑对此操作使用可靠的自动执行过程,以确保每个文件都能正确备份。
在执行关闭的数据库的完全备份时,备份初始化参数文件和口令文件。
不必将与只读表空间相关联的文件包含在完全备份中。
如果在执行脱机备份或冷备份时打开了数据库,备份将无效,不能保证在恢复时可以使用。


4.打开的数据库备份
如果业务性质不允许关闭数据库来执行备份,可以使用以下方法在使用数据库的同时对数据库执行备份:
  执行所有表空间或各个数据文件的备份(无论它们处在联机状态还是脱机状态)。
  将控制文件备份为一个二进制文件,或创建一个脚本以重新创建控制文件。

进行打开的数据库的备份的优点:
  在备份过程中数据库可以正常使用。
  可以在表空间级(通过 RMAN)或数据文件级执行备份。
  支持每天都全天候运作的业务。
  可以备份某一特定表空间的所有数据文件,也可以只备份某个表空间的一个数据文件。

进行打开的数据库的备份的要求:
  数据库设置为 ARCHIVELOG 模式。
  通过启用 Oracle 自动归档 (ARCn) 进程或手动归档重做日志文件,确保联机重做日志得到归档。

对打开的数据库执行备份时的选项
  可以备份某一特定表空间的所有数据文件,也可以只备份某个表空间的一个数据文件。
  如果数据文件处于备份模式,则可能会生成多个重做日志条目,因为LGWR将备份模式下的数据文件中已更改的块的块映像写入重做日志,而不仅仅是写入行信息。


5.进行联机表空间备份的步骤
可进行联机表空间备份的条件是数据库要处于归档模式。
通过ALTER TABLESPACE tablespace_name BEGIN BACKUP命令,将数据文件或表空间设置为备份模式。
这样可避免数据文件头中的序列号发生变化,以便恢复时可以从备份开始时间应用日志。
即使数据文件处于备份模式,仍可用于正常事务处理。

使用操作系统复制命令将表空间中的所有数据文件复制到备份存储中。
如果按顺序备份每个表空间,备份文件中的日志序列号可能不同。

备份表空间的各数据文件后,通过ALTER TABLESPACE tablespace_name END BACKUP命令将它们设置为正常模式

归档尚未归档的重做日志,以便归档恢复表空间备份所需的重做日志
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

对所有表空间重复这些步骤,包括SYSTEM和UNDO表空间。

ALTER TABLESPACE BEGIN BACKUP和ALTER TABLESPACE END BACKUP命令之间的间隔时间应尽量缩短,
因为修改后的块写入重做日志文件将导致生成更多的重做信息。建议每次备份一个表空间。


6.查看数据库文件及备份信息
使用V$DATAFILE视图获得所有数据文件的名称和状态列表。

使用V$CONTROLFILE视图显示所有控制文件的名称。

使用V$LOGFILE视图显示所有重做日志文件的名称。

查询V$BACKUP视图以确定哪些文件处于备份模式。发出ALTER TABLESPACE BEGIN BACKUP命令后,状态将更改为ACTIVE。
备份文件后,“状态” (STATUS) 列的值将更改为 NOT ACTIVE。

处于备份模式的数据文件的信息也可以通过查询V$DATAFILE_HEADER视图获得。
发出ALTER TABLESPACE BEGIN BACKUP命令后,表空间的数据文件的FUZZY 列中的值将更改为YES,表明相应的文件处于备份模式。
发出 ALTER TABLESPACE END BACKUP 命令后,FUZZY 列的值将更改为 NULL。


6.联机表空间备份过程中出现故障
在联机表空间备份的过程中,可能会发生系统崩溃、电源故障、数据库关闭等故障。一旦发生任何这些故障:
  如果操作系统未完成备份,则备份文件将不可用。需要重新备份这些文件。
  处在联机备份模式下的数据库文件不会与数据库同步,原因是备份开始时标头被冻结。--试验将一个表空间begin backup,然后重启数据库。
  数据库将不会打开,因为Oracle服务器认为文件已从备份中还原。 --?
  可以使用ALTER DATABASE …END BACKUP命令使数据文件脱离备份模式。只有确定这些文件处于备份模式、且未从备份中还原的情况下,才可使用此命令。
  如果不确定某一文件是否需要恢复,或者该文件是否仍处于联机备份模式,可查询V$BACKUP视图(处于active状态的文件)。
  对于处于联机备份模式的文件,运行SQL> ALTER DATABASE datafile file_id END BACKUP;
  如果使用 Oracle9i 可以发出命令:SQL> ALTER DATABASE END BACKUP;此命令使处在备份模式中的所有数据文件同时脱离该模式。
  然后,可以打开数据库了。


7.只读表空间备份问题
在将表空间更改为只读后,只需要一个备份。由于不对只读表空间的数据文件执行任何写操作,只有在文件损坏的情况下才必须进行恢复。
在使表空间成为读写状态之后,应恢复按照正常备份日程对该表空间进行备份。
使用 ALTER TABLESPACE 命令将表空间更改为只读状态,会导致控制文件更新。
执行恢复操作时,控制文件必须能够正确地标识只读表空间;否则,必须恢复该表空间。

备份过程:
使用ALTER TABLESPACE SQL命令将表空间的状态从读写更改为只读:
SQL> ALTER TABLESPACE tablespace_name READ ONLY;
发出 ALTER TABLESPACE 命令后,会对所有与表空间相关联的数据文件执行检查点。然后使用当前 SCN 冻结文件头。
使表空间成为只读状态之后,必须备份该表空间的所有数据文件。
DBW0 进程只写入其表空间处于读写模式的数据文件,正常的检查点也只对这些文件执行。


8.手动备份控制文件
Oracle 服务器在进行例程或介质恢复时会用到控制文件中的某些状态信息(如当前联机重做日志文件以及数据库文件的名称)。
每次对数据库配置进行更改后,都需要保留控制文件的最新副本。

步骤(无先后顺序):
创建二进制映像
ALTER DATABASE BACKUP CONTROLFILE TO 'control1.bkp';
创建文本跟踪文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

原则
对控制文件进行多元备份,并使用 CONTROL_FILES 参数在 init.ora 文件中为它们命名。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE 命令创建一个用于重新创建控制文件的脚本。
该文件位于由初始化参数 USER_DUMP_DEST 指定的目录下。此脚本不包含 RMAN 元数据。
此外,还应使用 ALTER DATABASE BACKUP CONTROLFILE 命令来备份各个控制文件。这样可以提供控制文件在该时间点的二进制副本。
完全备份时,正常关闭例程,然后使用操作系统备份命令将控制文件复制到备份存储中。
以下命令更改数据库配置并导致控制文件更改:
  ALTER DATABASE [ADD | DROP] LOGFILE
  ALTER DATABASE [ADD | DROP] LOGFILE MEMBER
  ALTER DATABASE [ADD | DROP ] LOGFILE GROUP
  ALTER DATABASE [ NOARCHIVELOG | ARCHIVELOG ]
  ALTER DATABASE RENAME FILE
  CREATE TABLESPACE
  ALTER TABLESPACE [ADD | RENAME ] DATAFILE
  ALTER TABLESPACE [READ WRITE | READ ONLY ]
  DROP TABLESPACE
注:发出上述任一命令后,都需要备份控制文件。


9.使用DBVERIFY实用程序验证备份
使用 DBVERIFY 实用程序可以验证数据文件,具体方法是检查指定数据文件中的数据块结构的完整性。
这是数据库之外的实用程序,因此它对数据库活动的影响最小。
用于确保备份数据库或数据文件在还原之前是有效的
遇到数据损坏问题时可作为有用的诊断辅助工具
示例:
要验证数据文件 users01.dbf 的完整性(从块 1 开始到块 500 结束),执行如下命令:
$ dbv file=/ORADATA/u03/users01.dbf start=1 end=500
具体输出和可用参数见sg

October 28

Everything goes well

Just wait.....
October 07

032 第九章 Oracle Recovery Manager概览和配置

第九章 Oracle Recovery Manager概览和配置
目标:
了解 RMAN 的功能和组件
说明 RMAN 资料档案库和控制文件的用法
说明通道分配
说明介质管理库界面
不使用恢复目录连接到 RMAN
配置 RMAN 环境


要点:
1.恢复管理器功能
  备份数据库、表空间、数据文件、控制文件和归档日志
  存储频繁执行的备份和恢复操作
  执行增量块级别备份
  跳过未使用的块
  指定备份限制
  检测备份过程中损坏的块
  通过下列方式提高性能:
    自动并行化
    生成较少的重做日志
    限制备份的 I/O 操作
    磁带流式处理
  管理备份和恢复任务


2.恢复管理器组件
恢复管理器可执行文件:恢复管理器命令行界面可以通过可执行文件 RMAN 调用。RMAN 解释用户命令并相应地调用服务器会话,以执行所需的任务。

“Oracle Enterprise Manager 备份、恢复和目录维护”: 向导提供访问恢复管理器的图形用户界面。只有连接到管理服务器 (Management Server) ,向导和属性工作表才可用。

服务器会话:由 RMAN 调用的服务器进程 (UNIX) 或线程 (Windows NT) 与目标数据库连接,通过 PL/SQL 接口执行备份、还原和恢复功能。

目标数据库:正在使用 RMAN 对其进行备份和恢复操作的数据库称作目标数据库。
            目标数据库的控制文件包含其物理结构的有关信息,例如,数据文件的大小和位置、联机和归档重做日志文件以及控制文件。
            在备份和恢复操作过程中,由 RMAN 调用的服务器会话将使用这些信息。

RMAN 资料档案库:RMAN 在执行备份、还原和恢复操作时使用的数据称为 RMAN 元数据。这些元数据存储在目标数据库的控制文件和可选的恢复目录数据库中。
                 尽管不是必须创建恢复目录才可以使用 RMAN,但使用恢复目录却是有益的。恢复目录应放在目标数据库之外的另一数据库中。

通道:要执行并记录备份和恢复操作,RMAN 需要链接至目标数据库。该链接称为通道。可以手动分配通道,也可以使用自动通道分配功能预先配置通道。

介质管理库:介质管理库(MML)由RMAN在写入磁带或从磁带读取时使用。使用磁带介质所需的附加介质管理软件由介质和存储系统供应商提供。


3.使用控制文件作为 RMAN 资料档案库
RMAN 在 RMAN 资料档案库中存储有关目标数据库及其备份和恢复操作的信息。
目标数据库控制文件可用作专门存储该信息的位置。
存储的信息量会根据备份频率、生成的归档重做日志文件的数量以及 RMAN 记录的保留时间而增长。

CONTROL_FILE_RECORD_KEEP_TIME参数用于确定一个记录至少要保留多少天才可被覆盖。缺省值为 7 天。
如果控制文件太小,不能存储由 CONTROL_FILE_RECORD_KEEP_TIME 指定的时间段内的所有信息,那么控制文件将会增长。
在控制文件增长之前,将执行以下的特定步骤:
  使用控制文件中的空闲空间。
  覆盖早于 CONTROL_FILE_RECORD_KEEP_TIME 的条目。
  如果没有更多空间可用,控制文件将按需增长,直到达到操作文件大小的系统限制。


4.通道分配
每个通道代表通向某一类型设备的一个数据流。在执行备份和恢复命令前,必须先分配通道。
每个已分配的通道建立从RMAN可执行文件到目标或辅助数据库(通过复制命令建立的数据库或TSPITR中使用的临时数据库)例程的连接,方法是在例程上启动服务器会话。
该服务器会话执行备份和恢复操作。只有一个RMAN会话可与已分配的服务器会话通信。
每个通道通常对应一个输出设备,除非使用的MML具有硬件多路复用功能。
可以手动分配通道,也可以使用自动通道分配功能预先配置要在所有 RMAN 会话中使用的通道。

手动分配通道
在 RMAN 提示符下,将ALLOCATE CHANNEL作为RUN命令的子命令发出,也可使用 ALLOCATE CHANNEL FOR MAINTENANCE 命令。
手动通道分配将覆盖自动通道分配。
BACKUP、COPY、RESTORE 和 RECOVER 命令(每个)至少需要一个通道。
分配一个通道会在目标数据库上启动一个服务器进程。
分配的通道数将是备份、还原或恢复期间使用的最大并行度。
所需的介质类型确定了分配的通道类型。查询 V$BACKUP_DEVICE 视图可以确定支持哪些设备类型。
可以通过在 ALLOCATE CHANNEL 命令中指定参数来对 COPY 和 BACKUP 命令施加限制:
Read rate:限制每个文件每秒读取的缓冲区数,防止过多的磁盘 I/O 降低联机性能。
    allocate channel … rate = integer
Kbytes:   限制通道创建的备份片文件大小。这在操作系统或设备类型有最大的文件大小限制时非常有用。
        allocate channel … maxpiecesize = integer
MAXOPENFILE:限制大型备份时同时打开的文件数(缺省值为 16)。该参数可以防止打开的文件过多。
           ALLOCATE CHANNEL … MAXOPENFILE = integer
示例:
此命令为 DELETE 命令分配通道,因为将从磁盘删除一个文件。维护通道不能用于任何其它 I/O 操作,如备份或复制。
ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE disk;
分配一个名为d1的通道,由该通道创建的所有文件都具有格式'/db01/BACKUP/%U'。该通道备份一个数据文件/db01/ORADATA/u03/users01.dbf。
RMAN> RUN {
    2> ALLOCATE CHANNEL d1 DEVICE TYPE disk
    3> FORMAT = '/db01/BACKUP/%U';
    4> BACKUP DATAFILE '/…/u03/users01.dbf';}

自动分配通道
RMAN 提供一个预先配置的 DISK 通道,可将该通道用于备份数据和将数据复制到磁盘。
可以配置一组永久的自动通道。可通过 CONFIGURE CHANNEL 命令将自动通道指定给磁盘或磁带。
如果通道是由 RMAN 自动分配的,其名称格式为 ora_devicetype_n(ora_sbt_tape_n 或 ora_disk_n)。
如果未指定名称格式,在缺省情况下,RMAN 将使用 %U 格式,该格式可保证标识符唯一。%U 指定 %u_%p_%c 的简写方式,
可保证生成的备份文件名的唯一性。%u 指定一个 8 个字符长的名称,该名称由备份集号和备份集创建时间的缩写形式构成。
%p 指定备份集中的备份片号。%c 指定一组双重备份片中备份片的副本数。
自动分配通道功能与手动分配通道功能是互斥的,即:对于每个作业,RMAN 要么使用自动分配,要么使用手动分配。
缺省情况下,RMAN 已预先配置了一个磁盘通道,这样可以备份到磁盘而无需进行任何手动配置。
因此,如果要备份到磁盘而不是介质管理器,现在就可以开始备份到磁盘。
更改缺省设备类型:
RMAN> CONFIGURE DEFAULT DEVICE TYPE TO sbt;   --sbt:system backup to tape
配置自动通道的并行性:
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 3;
配置自动通道选项:
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK
   2> FORMAT = ‘/BACKUP/RMAN/%U';
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK 
   2> MAXPIECESIZE 2G;


5.介质管理
要使用磁带存储数据库备份,RMAN需要使用介质管理器。介质管理器是加载、标记和卸载顺序介质的实用程序,如用于备份、还原和恢复数据的磁带机。
Oracle 服务器调用 MML 软件例行程序将数据文件备份到由介质管理器控制的介质或从介质中还原数据文件。
如果是备份到磁盘,Oracle 服务器无需连接到介质管理库 (MML) 软件。
在开始将 RMAN 用于介质管理器之前,必须先安装介质管理器并确保 RMAN 可与其进行通信。


6.与 RMAN 连接的类型
使用恢复管理器,可连接到下列类型的数据库:
  目标数据库:使用SYSDBA权限连接到目标数据库。您必须具有该权限才能连接成功。
  恢复目录数据库:这是一种为 RMAN 资料档案库配置的可选数据库。
  辅助数据库:辅助数据库是使用 RMAN DUPLICATE 命令创建的数据库。
              它也可能是在表空间时间点恢复 (TSPITR) 过程中使用的临时数据库。备用数据库是生产数据库的副本,可用于灾难恢复。


7.RMAN连接
不使用恢复目录连接到目标数据库:先设其为当前实例,然后rman target /
  本地连接
      UNIX: $ ORACLE_SID=DB01; export ORACLE_SID
  $ rman target /
      Windows NT: C:\> SET ORACLE_SID=DB01
    C:\> rman target /
      可以选择指定关键字 NOCATALOG,如下所示:
                $ rman target / nocatalog
      NOCATALOG 是缺省模式。
  远程连接
     要从另一服务器进行连接,请使用目标数据库的网络服务名:
     $ rman target sys/target_pwd@DB01
   连接进程
     键入 RMAN 连接命令后,将发生如下事件:
       为恢复管理器创建一个用户进程。
       该用户进程创建两个 Oracle 服务器进程:
          一个是连接到目标数据库的缺省进程,用于执行 SQL 命令、重新同步控制文件和恢复前滚
          一个是连接到目标数据库的轮询进程,用于确定远程过程调用 (RPC) 的完成情况(每个例程仅限一个)。
     备份和恢复信息是从控制文件中检索的。


8.其它 RMAN 命令行参数
将 RMAN 输出写入到一个日志文件:
$ rman target sys/oracle log $HOME/ORADATA/u03/rman.log append
LOG 参数指定用于记录 RMAN 输出的文件。如果未指定该参数,RMAN 将把其消息日志文件写入到标准输出。
如果无法打开指定的文件,RMAN 不会中止,而是将输出内容写入到标准输出设备。
APPEND 关键字指定新的输出应附加在消息日志文件的末尾。如果未指定该参数,一旦存在与消息日志文件同名的文件,RMAN 将覆盖该文件。

调用 RMAN 时执行命令文件:
$ rman target sys/oracle log $HOME/ORADATA/u03/rman.log append @'$HOME/STUDENT/LABS/my_rman_script.rcv'


9.恢复管理器模式
RMAN 有两种操作模式:交互模式和批处理模式。
交互模式:要交互运行 RMAN 命令,启动 RMAN,然后在命令行界面中键入命令。
批处理模式:将 RMAN 命令输入到一个文件中,然后通过在命令行中指定该文件的名称来运行该命令文件。
            RMAN 在编译或执行任何命令前先对整个命令文件进行语法分析。无需在文件中添加退出命令,RMAN将在到达文件末尾时终止执行。
            批处理模式最适合于通过操作系统作业控制设备来执行安排好的定期备份操作。


10.RMAN命令
RMAN 具有两种基本类型的命令:独立命令和作业命令。
独立命令
  在RMAN提示符下执行,通常是自包含的
  分别执行
  不能作为 RUN 命令的子命令
作业命令
  命令通常被分成几作业组,由RMAN在RUN命令块内按顺序执行。如果块内任何一个命令失败,RMAN将停止处理;
  而不再继续执行块内的其它命令。
独立命令或作业命令
  有一些命令既可在提示符下发出也可在 RUN 命令中发出。如果在 RMAN 提示符下执行独立命令,可利用自动分配通道的功能。
  可以按交互模式或批处理模式执行命令。


11.RMAN 配置设置
RMAN预设为使用适用于所有RMAN会话的缺省配置设置。

CONFIGURE 命令:
配置自动通道:
  RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/db01/BACKUP/%U';
指定恢复期实施保留策略:
  RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 days;
    使用CONFIGURE RETENTION POLICY命令可创建永久和自动的备份保留策略。
    RMAN将根据用CONFIGURE命令指定的标准来确定数据文件和控制文件的备份和副本何时过期;
    即,何时介质恢复不再需要使用这些备份和副本。可发出 REPORT OBSOLETE 命令查看已过期的文件,
    并使用 DELETE OBSOLETE 命令将它们删除。发出 CONFIGURE RETENTION POLICY CLEAR 命令可将该设置恢复为缺省值。
通过指定冗余实施保留策略:
  RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
    指定一个冗余值,该值指示备份或副本一旦超过某一指定数目,将不再予以保留。缺省情况下,RETENTION POLICY配置为REDUNDANCY 1。
配置双重备份集:
  RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;
    可在一个备份集中为每个备份片最多创建四个副本。这仅适用于数据文件和归档重做日志文件。
配置备份优化:
  RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
    设置备份优化的目的是:如果相同的文件已备份到某一设备类型,BACKUP 命令不再将文件备份到该设备类型。
    两个文件相同,指的是其内容必须完全相同。备份优化的缺省值是 OFF。
    可通过使用 BACKUP 命令的 FORCE 选项覆盖备份优化设置。
使用 CLEAR 选项恢复为缺省值:
  RMAN> CONFIGURE RETENTION POLICY CLEAR;
  RMAN> CONFIGURE CHANNEL DEVICE TYPE sbt CLEAR;

SHOW 命令
显示所有设置:
  RMAN> SHOW ALL;
显示自动通道配置设置:
  RMAN> SHOW CHANNEL;
  RMAN> SHOW DEVICE TYPE;
  RMAN> SHOW DEFAULT DEVICE TYPE;
显示RMAN 保留策略配置设置:
  RMAN> SHOW RETENTION POLICY;
显示备份副本数:
  RMAN> SHOW DATAFILE BACKUP COPIES;
显示备份集的最大大小:
  RMAN> SHOW MAXSETSIZE;
显示不包括在整个数据库备份中的表空间:
  RMAN> SHOW EXCLUDE;
显示备份优化的状态:
  RMAN> SHOW BACKUP OPTIMIZATION;

LIST 命令
用于生成详细报告,使用此命令时必须连接至目标数据库。如果在 NOCATALOG 模式下进行连接,则必须装载数据库。
如果使用恢复目录进行连接,则必须启动目标例程(但无需装载)。列出数据库中的所有文件的备份:
  RMAN> LIST BACKUP OF DATABASE;
列出包含 users01.dbf 数据文件的所有备份集:
  RMAN> LIST BACKUP OF DATAFILE "/db01/ORADATA/u03/users01.dbf";
列出 SYSTEM 表空间中的数据文件的所有副本:
  RMAN> LIST COPY OF TABLESPACE "SYSTEM";

REPORT 命令
该命令有助于更详细地分析 RMAN 资料档案库中的信息.
数据库的结构是怎样的:
  RMAN> REPORT SCHEMA;
哪些文件需要备份:
  RMAN> REPORT NEED BACKUP [incremental 3|days 3|redundancy 3];
  增量 (Incremental):是一个整数值,指定应在恢复过程中还原的增量备份的最大数目。
                      如果需要该数目或更多的增量备份,则需要对数据文件执行新的完全备份。
  天数 (Days):是一个整数值,指定距文件上一次完全或增量备份操作的最大天数。
               如果最近一次备份到当前的天数等于或超过该数字,则需要对该文件进行备份。
  冗余 (Redundancy):一个整数值,指定必要的最低冗余级别。
                     例如,如果没有两个或更多备份,则冗余级别 2 将要求进行备份。
哪些备份可以删除(即已过期):
  RMAN> REPORT OBSOLETE;
哪些文件由于不可恢复的操作而不可恢复:
  RMAN> REPORT UNRECOVERABLE ...;


12.恢复管理器程序包
RMAN 可执行文件使用 PL/SQL 程序包与目标数据库和恢复目录通信。PL/SQL 程序包执行下列功能:
  在控制文件或恢复目录中维护 RMAN 资料档案库
  与 Oracle 和操作系统通信以创建、还原和恢复备份集和映象副本
  提供一致的界面,以便 RMAN 可执行文件能够将恢复目录或目标数据库控制文件用作其备份资料档案库,而无需更改任何行为
DBMS_RCVCAT 和 DBMS_RCVMAN
由CREATE CATALOG命令创建的内部且未记录的程序包。DBMS_RCVMAN由脚本dbmsrman.sql和 prvtrmns.plb在目标数据库中创建,而这两个脚本由catproc.sql调用。
恢复管理器使用 DBMS_RCVCAT 来维护恢复目录中的信息,使用 DBMS_RCVMAN 来查询控制文件或恢复目录。
DBMS_BACKUP_RESTORE 程序包
该程序包由脚本 dbmsbkrs.sql 和 prvtbkrs.plb 创建,这两个脚本由 catproc.sql 调用。
它用作与 Oracle 和操作系统的接口,以便创建、还原和恢复数据文件备份以及归档重做日志文件。
参见sg上图示


13.使用 RMAN 的注意事项
系统的共享资源:RMAN 的大多数工作是通过 Oracle 服务器进程执行的。这些操作也可以并行进行,以提高吞吐量。
                这意味着 PROCESSES 参数必须足够高。从 OS 的角度看,这就意味着应该把共享内存和信号量设置得足够多。

执行授权操作的用户组:必须确定执行授权操作的用户组。可以相应地设置用户帐户,使之具备必要的操作系统和 Oracle 数据库权限。

远程操作:需要使用口令文件通过 Oracle Net 连接到目标数据库,以执行授权的操作。
          例如,从远程计算机执行关闭、启动、备份和恢复操作。这样就需要设置口令文件,还应确保具有备份该口令文件的策略。

全球化环境变量:调用 RMAN 之前,设置 NLS_DATE_FORMAT 和 NLS_LANG 环境变量。
                 这些变量确定 RMAN 命令(如 RESTORE、RECOVER 和 REPORT)中的时间参数的格式。

使用恢复目录:如果使用恢复目录,RMAN 可以执行更多种类的自动备份和恢复功能。使用恢复目录会涉及存储空间和维护方面的工作。
       还应确定是否将一个数据库专用于维护多个目标数据库的恢复目录。另外,还要考虑备份该恢复目录的策略。

032 第八章 配置数据库归档模式

第八章 配置数据库归档模式
目标:
说明 ARCHIVELOG 与 NOARCHIVELOG 模式之间的区别
将数据库配置为 ARCHIVELOG 模式
启用自动归档
执行手动日志归档说明 ARCHIVELOG 与 NOARCHIVELOG 模式之间的区别
将数据库配置为 ARCHIVELOG 模式
启用自动归档
执行手动日志归档


要点:
1.NOARCHIVELOG 模式
缺省情况下,数据库是以 NOARCHIVELOG 模式创建的。在 NOARCHIVELOG 模式下操作数据库时有以下特性:
  重做日志文件以循环的方式使用。
  重做日志文件可以在检查点发生之后立即重新使用。
  重做日志被覆盖后,介质恢复将只能恢复到上一次完全备份。
NOARCHIVELOG 模式的含义
  如果某个表空间由于故障而不可用,将无法继续对数据库进行操作,除非删除了该表空间或从备份还原了整个数据库。
  只能在数据库关闭时对数据库执行操作系统备份。而且,必须使用 NORMAL、IMMEDIATE 或 TRANSACTIONAL 选项关闭数据库。
  必须在每次备份时完整备份所有的数据文件和控制文件。尽管也可以备份联机重做日志文件,但这是不必要的。
  如果联机重做日志文件已被覆盖,则将丢失上次完全备份后的所有数据。


2.ARCHIVELOG 模式
在发生检查点并且已经通过 ARCn 后台进程备份重做日志文件之前,不能重新使用填满的重做日志文件。控制文件中将有一个条目记录归档日志文件的日志序列号。
对数据库的最新更改在任何时候均可用于例程恢复,而归档重做日志文件可以用于介质恢复。
归档要求
  数据库必须处于 ARCHIVELOG 模式。通过发出命令将数据库置于 ARCHIVELOG 模式可以更新控制文件。可以启用 ARCn 后台进程来实现自动归档。
  应该有足够的资源来存放生成的归档重做日志文件。
将数据库设置为 ARCHIVELOG 模式的含义
  出现介质故障时,可以防止数据库丢失数据。
  可以在数据库联机时对其进行备份。
  由于介质故障导致表空间(非 SYSTEM)脱机时,数据库的其余部分仍可用,因为表空间(非 SYSTEM)可以在数据库打开时恢复。
介质恢复选项
  无论数据文件处于联机或脱机状态,都可以还原损坏文件的备份副本,并使用归档日志文件将数据文件更新为当前的版本。
  可以将数据库恢复至特定的时间点。
  可以将数据库恢复至指定归档日志文件的末尾。
  可以将数据库恢复至特定的系统更改号 (SCN)。


3.更改归档模式
在数据库处于装载状态时使用 ALTER DATABASE 命令更改 ARCHIVELOG 模式。
SQL> ALTER DATABASE [ archivelog | noarchivelog ]
注:将数据库模式从 NOARCHIVELOG 模式更改为 ARCHIVELOG 模式后,必须备份所有数据库文件和控制文件。
    将数据库置于 ARCHIVELOG 模式之后进行的新备份,将由所有以后的归档重做日志文件应用。
    将数据库设置为 ARCHIVELOG 模式并不 启用归档程序 (ARCn) 进程。


4.自动和手动归档
在自动归档过程中,将启用 ARCn 后台进程,该进程在重做日志文件填满后复制这些文件。
在手动归档过程中,必须使用 SQL*Plus 或 Oracle Enterprise Manager 复制文件。
原则
  在决定归档模式(自动或手动)之前,必须将数据库设置为 ARCHIVELOG 模式。
  如果未切换到 ARCHIVELOG 模式,将导致 ARCn 无法复制重做日志文件。
  启用归档进程之前,应彻底关闭数据库(使用正常、立即或事务处理选项)。
注:如果由于某种原因导致归档进程 (ARCn) 失败,一旦事务处理活动填满了所有重做日志,Oracle 服务器就会停止。
将数据库设置为 ARCHIVELOG 模式将通知 Oracle 服务器不要覆盖联机重做日志,除非这些日志已经归档。
因此,联机重做日志的归档必须与系统中的事务处理活动(生成重做日志)保持同步。

启用自动归档:设置初始化参数LOG_ARCHIVE_START=TRUE
例程启动后启用自动归档:ALTER SYSTEM ARCHIVE LOG START;
禁用自动归档:设置初始化参数LOG_ARCHIVE_START=FALSE
例程启动后禁用自动归档:ALTER SYSTEM ARCHIVE LOG STOP;

指定多个 ARCn 进程
动态参数 LOG_ARCHIVE_MAX_PROCESSES 用于控制在例程启动时启动的归档进程数。
最多可指定十个 ARCn 进程。
ARCn 进程数可通过 ALTER SYSTEM 命令进行更改。
停止或启动附加归档进程:修改参数 LOG_ARCHIVE_MAX_PROCESSES 的值

手动归档联机重做日志文件
ALTER SYSTEM ARCHIVE LOG CURRENT;
手动归档联机重做日志文件时,可以在 ALTER SYSTEM ARCHIVE LOG 命令中使用以下选项:
THREAD  指定包含要归档的重做日志文件组的线程(用于Oracle Parallel Server)
SEQUENCE 归档由日志序列号标识的联机重做日志文件组
CHANGE  基于SCN进行归档
GROUP  归档联机重做日志文件组
CURRENT  归档指定线程的当前重做日志文件组
LOGFILE  归档包含有由文件名标识的成员的重做日志文件组
NEXT  将尚未归档的最旧的联机重做日志文件组进行归档
ALL  对指定线程的已满但尚未归档的所有联机重做日志文件组进行归档
START  启用重做日志文件组的自动归档
TO  指定重做日志文件组归档的目标位置
STOP  禁用重做日志文件组的自动归档


4.指定归档日志目标
使用 LOG_ARCHIVE_DEST_n 最多可指定十个归档目标。该参数仅在安装了 Oracle 企业版后才有效。
对于 Oracle 企业版用户,建议不要使用 LOG_ARCHIVE_DEST 参数,而支持使用 LOG_ARCHIVE_DEST_n 参数。
使用 LOG_ARCHIVE_FORMAT 可在文件名中包括日志序列号和线程号。

LOG_ARCHIVE_DEST_n 是动态参数,可以在系统级或会话级对其进行修改。目标可以是:
  本地文件系统位置,由关键字 LOCATION 定义。指定的位置必须是有效的,并且不能是一个 NFS 装载的目录。
  远程目标的 Oracle Net 别名,由关键字 SERVICE 指定。指定的服务名通过使用本地的 tnsnames.ora 文件进行解析,以标识远程数据库。Oracle9i 支持使用 IPC 或 TCP/IP 协议将归档日志文件发送到远程节点。只能为每个远程数据库指定一个归档目标。
注:配置归档日志目标时,确保根据所用的操作系统环境来设置路径名。必须为至少一个目标指定 LOCATION 参数。

使用 LOG_ARCHIVE_DEST_n 参数时,可以将目标指定为强制 (mandatory) 或可选 (optional),如下所示:
MANDATORY 表示必须成功完成归档到该目标的操作才可以覆盖联机重做日志文件。
OPTIONAL 表示即使联机重做日志文件尚未成功地归档到该目标,也可以重新使用。这是缺省设置。

REOPEN 属性
REOPEN 属性定义发生故障时是否必须重新尝试归档到目标。如果为关键字 REOPEN 指定了值,
如 REOPEN=600,则若发生故障,在经过指定时间(以秒计)后,归档程序将尝试写入该目标。
缺省值为 300 秒。归档到目标的尝试次数没有限制。归档中的所有错误将在主站点的警报文件中报告。
如果未指定 REOPEN,则可选目标上的错误将被记录并忽略。不再将重做日志发送到这些目标。
在归档成功之前,强制目标上的错误将导致无法重新使用联机重做日志。
只要归档不成功,归档目标的状态就设置为 ERROR。

几个示例:
本地磁盘
log_archive_dest_1 = "LOCATION=/archive1"
远程备用数据库
log_archive_dest_2 = "SERVICE=standby_db1"
MANDATORY
log_archive_dest_2="SERVICE=standby_db1 MANDATORY REOPEN=600"
OPTIONAL
log_archive_dest_3="LOCATION=/archive2/ OPTIONAL"

指定成功归档位置的最小数量
  定义为 MANDATORY 的目标的数量
  LOG_ARCHIVE_MIN_SUCCEED_DEST 参数的值
只有在下列情况下才能重新使用联机重做日志组:
  已归档到所有强制位置
  已归档的本地位置数大于或等于LOG_ARCHIVE_MIN_SUCCEED_DEST 参数的值
假定 LOG_ARCHIVE_MIN_SUCCEED_DEST 设置为 2 。如果强制本地目标的数量为 3,则必须归档这 3 个位置,
才可以重新使用联机重做日志文件。相反,如果强制本地归档目标的数量为 1,则必须至少归档 1 个可选本地归档目标,
才可以重新使用联机重做日志文件。也就是说,LOG_ARCHIVE_MIN_SUCCEED_DEST 可以用于归档到一个或多个可选强制目标,但反过来不行。


5.控制归档到目标
可以使用动态初始化参数 LOG_ARCHIVE_DEST_STATE_n 禁用归档目标。
ALTER SYSTEM SET log_archive_dest_state_3 = DEFER;  --禁用
ALTER SYSTEM SET log_archive_dest_state_3 = ENABLE; --启用


6.指定文件名格式
LOG_ARCHIVE_FORMAT = extension 其中,extension 应包括日志序列号变量 %s 或 %S。缺省值是根据操作系统而定的。
文件名选项
  %s 或 %S:包括日志序列号,作为文件名的一部分。
  %t 或 %T:包括线程号,作为文件名的一部分。
  使用 %S 可通过在值的左侧用 0 来填补空位使该值长度保持固定。
示例
  UNIX:LOG_ARCHIVE_FORMAT=arch%s.arc
  Windows NT:LOG_ARCHIVE_FORMAT = %%ORACLE_SID%%T%TS%S.ARC


7.获取归档日志信息
V$ARCHIVED_LOG:显示控制文件中的归档日志信息
V$ARCHIVE_DEST:对于当前例程,说明所有归档日志目标、当前值、模式和状态。
V$LOG_HISTORY:包含控制文件中的日志文件信息。
V$DATABASE:归档的当前状态。
V$ARCHIVE_PROCESSES:提供有关例程的各种 ARCH 进程的状态的信息。
ARCHIVE LOG LIST 命令向 DBA 提供数据库的日志模式和归档状态的信息

032 第七章 例程和介质恢复结构

第七章 例程和介质恢复结构
目标
描述与恢复相关的 Oracle 进程、内存结构和文件
认识检查点、重做日志文件和归档日志文件的重要性
描述优化例程恢复的方法


要点:
1.概览
Oracle 例程
Oracle 例程由内存区(主要是系统全局区 [System Global Area, SGA])和后台进程(即 PMON、SMON、DBWn、LGWR 和 CKPT)组成。例程是在数据库启动过程中,读取参数文件之后的 nomount(未装载)阶段创建的。如果其中的任何进程终止,则例程将关闭。

内存结构
见sg

内存结构
见sg

用户进程
用户进程是在用户启动 SQL*Plus、Oracle Forms Developer、Oracle Reports Developer、Oracle Enterprise Manager 等工具时创建的。该进程可能位于客户机或服务器上,它提供了一个界面,用户可在其中输入命令,与数据库进行交互。

服务器进程
服务器进程接受来自用户进程的命令并执行步骤来完成用户请求。如果数据库不处在共享服务器配置中,则在建立有效连接后,会在该例程所在的计算机上创建服务器进程。

Oracle 数据库
见sg

动态视图
见sg


2.大型共享池
用于从共享内存分配顺序(sequential)I/O缓冲区。对于I/O从属(slave)和Oracle备份与还原,RDBMS分配大小为几百个千字节的缓冲区。
配置大型共享池可防止RMAN与其它子系统争用同一块内存区。如果设置DBWR_IO_SLAVES或BACKUP_TAPE_IO_SLAVES参数来模拟异步I/O,则恢复管理器 (Recovery Manager, RMAN) 会使用大型共享池来进行备份和还原。
如果这两个参数都未被启用,则Oracle将从本地进程内存(而不是共享内存)中分配备份缓冲区,这样就不会使用大型共享池。

调整大型共享池的大小
如果设置了 LARGE_POOL_SIZE,则 Oracle 会尝试从大型共享池获得内存。即使这个值不够大,Oracle 也不会从共享池获取缓冲区。
如果未设置 LARGE_POOL_SIZE 初始化参数,则 Oracle 服务器会尝试从 SGA 中的共享池分配共享内存缓冲区。
如果 Oracle 无法获得足够的内存,它会从本地进程内存中获得 I/O 缓冲区内存,并向 alert.log 文件写入一条消息,表明已使用同步 I/O 进行备份。

大型共享池参数
LARGE_POOL_SIZE:如果未设置该参数,则没有大型共享池。指定的内存大小是从 SGA 分配的。
说明:大型共享池的大小,以字节计(可用K或M指定其值)
最小值:300 K
最大值:至少 2 GB(最大值取决于操作系统)
要确定大型共享池的使用方法,请查询 V$SGASTAT:
SQL> SELECT * FROM v$sgastat WHERE pool = 'large pool';
注:只有Oracle在alert.log中报告了错误,表明无法分配足够的内存且不能启动I/O从属的情况下,才应该设置该初始化参数。
DBWR_IO_SLAVES:该参数指定DBWn进程使用的I/O从属的数量。DBWn进程及其从属总是写入磁盘。缺省情况下,该值为0,即不使用I/O 从属。
  如果 DBWR_IO_SLAVES 设置为非零值,则由 ARCn 进程、LGWR 进程和恢复管理器使用的 I/O 从属的数量被设置为 4。
  在不支持或不能有效实施异步 I/O 的平台上,通常使用 I/O 从属来模拟异步 I/O。不过,即使在使用异步 I/O 时也可以使用 I/O 从属。  在这种情况下,I/O 从属将使用异步 I/O。
BACKUP_TAPE_IO_SLAVES:它指定恢复管理器是否使用 I/O 从属将数据备份、复制或还原到磁带上。
  当 BACKUP_TAPE_IO_SLAVES 设置为 TRUE 时,I/O 从属进程用于对磁带设备进行读写操作。
  当该参数设置为 FALSE(缺省值)时,I/O 从属不用于备份;相反,参与备份的影子进程将访问磁带设备。
注:由于在任一特定时刻只能有一个进程访问磁带设备,因此该参数值是一个布尔值,它控制对 I/O 从属进程的部署,允许或禁止该进程访问磁带设备。
要执行双重备份,则需要启用该参数,否则将发出一个错误。启用该参数后,恢复管理器将根据所请求的备份副本数来配置所需的从属进程的数量。


3.数据库缓冲区高速缓存、DBWn和数据文件
数据库缓冲区高速缓存的功能
  数据缓冲区高速缓存是 SGA 中的一个区域,用于存储最近使用过的数据块。
  服务器进程将表、索引和还原段从数据文件读入缓冲区高速缓存,在缓冲区高速缓存中根据需要对数据块进行相应的更改。
  Oracle 服务器使用最近最少使用 (LRU) 算法确定哪个缓冲区可被覆盖以容纳缓冲区高速缓存中的新块。

DBWn 后台进程的功能
  数据库写入器进程 (DBWn) 将数据库缓冲区高速缓存中的灰缓冲区数据写入数据文件。
  数据库写入器定期同步数据库缓冲区高速缓存和数据文件,这就是在各种情况下触发的检查点事件。
  尽管一个数据库写入器进程对于大多数系统已足够,但如果系统需要修改大量数据,还可以配置附加的进程(从 DBW1 到 DBW9)以提高写入  性能。这些附加的数据库写入器进程对单处理器系统不起作用。

数据文件
数据文件将系统数据和用户数据都存储在磁盘上。这些数据既可以是已提交的,也可以是未提交的。
仅包含已提交数据的数据文件
  这对于已关闭的数据库是正常情况,但发生故障或使用 “关闭中止” (shutdown abort) 选项的情况除外。
包含未提交数据的数据文件
  例程启动后,数据文件可能会包含未提交的数据。
  这种情况发生在数据已更改但尚未提交时(已更改的数据正处在高速缓存中),此时高速缓存中需要更多空间,从而强制未提交的数据转存入磁盘。
只有在所有用户最终提交后,数据文件才只包含已提交的数据。如果发生故障,  则在随后的恢复过程中,可以使用重做日志和回退段来同步数据文件。

配置表空间
表空间包含一个或多个数据文件。认真创建表空间对于提供灵活且易管理的备份和恢复策略非常重要。以下是一种典型的表空间配置,其中考虑了备份和恢复操作的要求:
  系统:如果将系统数据和用户数据分放在不同的表空间中,则可以更灵活地进行备份和恢复操作。
  临时:如果含有临时段(用于排序等)的表空间丢失,可以重建它,而不是恢复它。
  还原:备份还原表空间的过程与备份其它任何读/写表空间的过程完全相同。由于自动还原表空间对于恢复和读一致性至关重要,您应该经常   对它进行备份。
  只读数据:可以缩短备份时间,因为只有当表空间设为只读时,才必须对它进行备份。
  频繁变更的数据:应该频繁地备份这种表空间,这样也可以缩短恢复时间。
  索引数据:应当创建仅用来存储索引段的表空间。可以经常重建而不是恢复这些表空间。


4.重做日志缓冲区、LGWR和重做日志文件
重做日志缓冲区的功能
  重做日志缓冲区是容纳数据库更改信息的循环缓冲区。这些信息存储在重做条目中。
  重做条目包含重建或重做由 INSERT、UPDATE、DELETE、CREATE、ALTER 或 DROP 操作对数据库的更改所必需的信息。
  必要时重做条目可用于数据库恢复。
  Oracle服务器进程将重做条目从用户的内存空间复制到重做日志缓冲区。

LGWR后台进程的功能
  日志写入器 (LGWR) 在以下情况下将重做条目从重做日志缓冲区写入重做日志文件:
  当重做日志缓冲区的三分之一被占用时
  当发生超时时(每三秒钟)
  有 1 MB 的重做数据时
  在 DBWn 将数据库缓冲区高速缓存中已修改的数据块写入数据文件之前
  当提交事务处理时

重做日志文件

多元备份的原则
重做日志文件配置要求每组至少有两个重做日志成员,各成员位于不同的磁盘上以防出现故障。
谨记以下要点:
  组中的所有成员包含相同的信息且大小相同。
  组成员同时进行更新。
  每组应当含有同样数量的等大小成员。
如何重新定位重做日志文件
  如果日志文件是当前日志,通过以下命令进行日志切换:
        ALTER SYSTEM SWITCH LOGFILE;
  使用操作系统的复制实用程序(Unix 中的 cp 或 Windows NT 中的 COPY)将重做日志文件从先前位置复制到新位置
  使用 ALTER DATABASE RENAME FILE 命令在控制文件中进行更改:
        ALTER DATABASE [database] RENAME FILE 'filename'[, 'filename']...TO 'filename'[, 'filename']...
如何向组中添加成员
 ALTER DATABASE [database] ADD LOGFILE MEMBER ['filename' [REUSE] [, 'filename' [REUSE]]...
 TO {GROUP integer}
如何从组中删除成员
 ALTER DATABASE DROP LOGFILE MEMBER 'filename'[, 'filename']...
注:不能从当前(current)或活动(active)的重做日志文件组中删除成员。


5.检查点
检查点用来确定应从何处开始恢复。

检查点位置
重做日志中开始恢复的位置称为检查点位置。在该检查点之前的所有引用数据块都已由 DBWn 写入磁盘。
该位置定义为它与重做日志末尾之间的 “距离”。还可以将它看成是检查点队列中第一个条目的 “年龄”,该队列是按照数据块最初变灰时的顺序排列的灰数据块链接列表。

检查点队列
检查点队列中的每个条目包含对应数据块的标识符(即文件编号与块编号),以及该数据块最初变灰时在重做日志中所处的位置(称为重做字节地址或 RBA)。
它还包括上一次更改该数据块时在重做日志中所处的位置。检查点队列中的第一个条目标识数据库缓冲区高速缓存中最早的灰数据块。
DBWn 按检查点队列中的顺序从缓冲区高速缓存中写入块,随着数据块的写入,对应的每个条目将被删除。

检查点类型
完全检查点
当关闭数据库(异常关闭除外)或通过ALTER SYSTEM CHECKPOINT命令手动启动检查点操作时,将执行称为完全检查点的过程。
在完全检查点操作中,DBWn 将数据库缓冲区高速缓存中的所有灰缓冲区数据写入数据文件。

增量检查点(也称为快速启动检查点)--定期写入,仅写入最旧的块
是持续活动的检查点。DBWn 定期从检查点队列写出缓冲区数据,从而不断推进内存中的增量检查点操作。
增量检查点操作使 DBWn 写入缓冲区高速缓存中的块,这样,最早变灰的缓冲区会被最先写入。
增量检查点不更新数据文件头。增量检查点记录在控制文件中。

部分检查点
属于表空间的灰缓冲区。
ALTER TABLESPACE BEGIN BACKUP 命令仅对缓冲区高速缓存中属于该表空间的灰缓冲区启动部分检查点操作。
ALTER TABLESPACE tablespace OFFLINE NORMAL 命令也可用于启动部分检查点操作。


6.检查点进程 (CKPT)
检查点进程 (CKPT) 负责在执行各个检查点操作时向 DBWn 发出通知,并更新数据库的数据文件和控制文件以指明最新的检查点。
每隔三秒,CKPT 就会在控制文件中记录检查点队列中最旧条目的 RBA。出现例程故障后,通过该 RBA 可以在重做日志中找到例程恢复操作的起点。
之所以能够做到这一点,是因为系统能够保证通过 DBWn 将先前重做记录中表示的所有数据块都写入磁盘。
只有在出现日志切换的情况下,CKPT 才另外将该信息写入数据文件头。
要提高性能,不要一次写入所有文件头,而是按照所谓的 “惰性写入” (Lazy Write) 的方式进行分组更新。
日志切换并不强制将所有灰缓冲区都写入磁盘。 --日志切换会自动执行检查点,由此会将灰缓冲区写入磁盘?


7.控制文件
控制文件的功能
控制文件是一个描述数据库结构的二进制文件。只要装载或打开数据库,控制文件就必须随时可供 Oracle 服务器写入。
如果没有该文件,就无法装载数据库。建议至少要配置两个控制文件,并将它们分放在不同的磁盘上,以尽量减少丢失一个控制文件所带来的影响。

控制文件的内容
  数据库名
  创建数据库的时间戳
  恢复操作所需的同步信息(检查点和日志序列信息)
  数据文件和重做日志文件的名称和位置
  数据库的归档模式
  当前日志序列号
  恢复管理器备份元数据

如何对控制文件进行多元备份
  关闭数据库。
  使用操作系统命令将现有的控制文件复制到一个不同的设备。
  编辑或添加 CONTROL_FILES 参数,并为所有控制文件指定名称。
  启动数据库。


8.ARCn进程和归档日志文件
ARCn 进程在发生日志切换时启动,并将最近一个未归档的重做日志组中的一个成员复制到至少一个目标(目标由一个或多个初始化参数指定)。
是否启用归档取决于每个数据库的可用性和可靠性要求。
归档日志可存储在多个位置(两个或多个目标位置),这是因为它们对于恢复至关重要。
对于生产数据库来说,建议在使用归档日志功能时指定多个存储目标。


9.数据库同步
数据库同步
  只有当所有数据文件、重做日志和控制文件都已同步后,才能打开 Oracle 数据库。在这种情况下需要进行恢复。

数据库文件同步
  要打开数据库,所有数据文件必须具有相同的检查点号,除非它们处于脱机状态或者是只读表空间的一部分。
  所有Oracle文件的同步是基于当前的重做日志检查点和序列号来进行的。
  归档和联机重做日志文件恢复已提交的事务处理并回退未提交的事务处理,以便同步数据库文件。
  归档和联机重做日志文件由 Oracle 服务器在恢复阶段自动请求。确保日志存在于请求的位置。


10.例程恢复的各个阶段
崩溃恢复阶段
  与介质恢复不同,在出现例程故障后,Oracle自动执行崩溃恢复和例程恢复。
  崩溃恢复和例程恢复将数据库恢复到刚发生例程故障前的事务处理一致状态。

崩溃恢复的五个阶段
数据文件未同步:
  一旦发现未同步的文件,Oracle服务器会确定是否需要恢复数据库。例程故障,如关闭中止,就会导致不同步。
  在这种情况下,未提交的数据都将丢失,原因是在关闭之前内存中的数据尚未写入磁盘,因而文件未得到同步。
前滚阶段:
  DBWR将已提交和未提交的数据都写入数据文件。前滚阶段的目的是将日志文件中记录的所有更改应用到数据块中。
  注:
     在前滚阶段中将向还原段置入条目。由于重做日志存储数据更改之前和之后的映像,因此如果在数据文件中发现未提交的块,且没有还原段条目,则会添加还原段条目。
     使用日志缓冲区来应用重做日志。已用缓冲区被标记为用于恢复,而不参与正常事务处理,直到它们被恢复进程放弃。
     如果发生状态冲突(即,文件头声明该文件是只读的,但是控制文件将其识别为可读写,或是相反情况),重做日志将应用于只读数据文件。
数据文件中的已提交和未提交数据:
  前滚阶段成功结束后,所有已提交数据都将驻留在数据文件中,尽管未提交数据仍有可能存在。此时数据库即可打开。
回退阶段:
  要从文件中删除未提交数据,需要使用在前滚阶段或崩溃之前就已置入数据的还原段。
  当Oracle服务器或用户请求块时,将向先请求的一方回退相应的块。
  因此,即使处在回退过程中,数据库也仍然可用。只有参与回退的那些数据块不可用。
数据文件中的已提交数据:
  当前滚和回退阶段都结束后,只有已提交的数据才驻留在磁盘上。
 

11.优化崩溃恢复和例程恢复的性能
在出现例程故障后,例程恢复和崩溃恢复自动将重做日志记录应用于 Oracle 数据块。
要在例程恢复的持续时间与日常性能之间取得平衡,采用的主要手段就是影响 Oracle 执行检查点操作的频率。
可以尽量减少恢复过程中所处理的块的数量,方法是让检查点处于最新重做日志记录之后的若干块处。
但是,频繁地执行检查点操作将会给正常操作带来更大的性能开销。

要将例程恢复和崩溃恢复的持续时间保持在用户指定的范围内,可以采用多种方法:
快速启动故障恢复功能(Fast-start fault recovery functionality)可用来控制例程恢复。
  该功能通过设定前滚时间的范围并使其可以预知,从而缩短前滚时间,同时还节省了执行回退所需的时间。
  快速启动故障恢复的基础是快速启动检查点体系结构。通过初始化参数可指定完成恢复操作的前滚阶段的目标时间。
重做日志文件的大小直接影响检查点操作。
  最小日志的大小越小,Oracle 服务器越可以频繁地将灰缓冲区写入磁盘,以确保在当前日志完全填满之前,
  使检查点的位置前进到该当前日志;这样,就可以重新使用该日志。
 
影响检查点的初始化参数
FAST_START_MTTR_TARGET      预计的 MTTR(以秒计) --mean time to restoration,平均恢复时间
  快速启动检查点(Fast-start checkpointing,也叫增量检查点)可持续进行,只要写入块,检查点时间即会前移。
  完成恢复前滚阶段的目标(限定)时间可通过参数 FAST_START_MTTR_TARGET 来指定,
  Oracle将按照该目标时间要求自动调整检查点的写入频率。
动态视图 V$INSTANCE_RECOVERY 提供了当前的恢复参数设置
  用来监视可用于限制恢复 I/O 的机制
  视图中的统计信息用来计算哪一个参数对检查点影响最大。


12.优化崩溃恢复和例程恢复的阶段
优化前滚阶段
优化回退阶段
所需的总恢复时间为前滚和回退各自所需时间的总和。

优化前滚阶段
RECOVERY_PARALLELISM 初始化参数用来指定例程或崩溃恢复操作中并发进程的数量。
使用多个进程实际上相当于提供并行块恢复。在前滚阶段,不同的进程分配给不同的块。
RECOVERY_PARALLELISM 初始化参数仅指定例程或崩溃恢复中并发恢复进程的数量。
介质恢复不受此参数影响。对于介质恢复,可在 RECOVER DATABASE 语句中使用 PARALLEL 子句。

优化回退阶段
快速启动按需回退
  用户事务处理仅对该事务处理试图访问的块启动回退。剩余的块由 SMON 在后台恢复(可能是并行的)。
  这样做的优势在于:不必等到一个较长事务的处理工作被全部回退即可完成另一个事务处理。
快速启动并行回退
  快速启动并行回退使 SMON 可以充当协调程序并使用多个服务器进程来完成回退操作。
  当 SMON 确定死事务处理已生成大量的还原块时,它会自动启动并行回退。
  对于长时间运行事务处理的系统,特别是对执行并行的 INSERT、UPDATE 和 DELETE 操作的系统,该功能非常有用。
  事务处理恢复中所涉及的进程数量由动态初始化参数 FAST_START_PARALLEL_ROLLBACK 设置。
监视并行回退
V$FAST_START_SERVERS  --监视将并行查询从属用于快速启动并行回退的情况
V$FAST_START_TRANSACTIONS  --确认快速启动回退的状态

 
September 28

032 第五章 Oracle Shared Server 的使用和配置

第五章 Oracle Shared Server 的使用和配置
目标:
识别 Oracle Shared Server 的各个组件
描述 Oracle Shared Server 的体系结构
配置 Oracle Shared Server
了解和说明相关数据字典视图的用处

要点:
1.专用服务器进程
用户进程和服务器进程是分开的。
每个用户进程都有自己的服务器进程。
用户进程和服务器进程可在不同的机器上运行,以利用分布式处理的优势。
用户进程和服务器进程的比率是 1 比 1。
即使用户进程不发出数据库请求,专用服务器也存在,只是保持空闲状态。
此处所用的程序接口取决于用户进程和专用服务器进程是否在同一台机器上。如果在同一机器上,进程间的程序接口将使用主机操作系统的交互进程通信 (IPC) 机制。

2 oracle shared server
Oracle Shared Server 配置使得共享服务器、专用服务器及组合在一起的用户和服务器能够在同一例程内存在。
在具备相同数目的服务器的情况下,由于 Oracle Shared Server 体系结构中的用户共享服务器进程,因此,使用 Oracle Shared Server 可支持的用户比在专用服务器配置中可支持的用户多得多,而需要配置的服务器进程却更少。
在 Oracle Shared Server 体系结构下,客户机-用户进程最终会与调度程序 建立连接。PMON 进程向监听程序注册调度程序的位置和负载,使监听程序能够将请求转发给占用率最低的调度程序。服务注册不要求在 listener.ora 文件中进行配置。
一个调度程序可同时支持多个客户机连接。每个客户机连接都使用一个虚拟线路(virtual circuit.)。虚拟线路是一块共享内存,调度程序将它用于客户机数据库连接请求与答复。
请求到达时,调度程序会将虚拟线路置入一个公共队列。共享服务器从公共队列选择该虚拟线路并为请求服务,然后在尝试从公共队列检索另一个虚拟线路前取消该虚拟线路。这种方法使得少量的服务器进程就能够为大量客户机服务。
注:在 Windows NT 上,调度程序只能使用 TCP/IP 协议。
Oracle Shared Server 的优点
减少针对某一例程的进程数目
增加可服务的用户数
实现负载平衡
减少空闲服务器进程的数目
减少内存占用和系统开销
Oracle Shared Server 体系结构要求 Oracle Net Services。要使用 Oracle Shared Servers 的用户进程必须通过 Oracle Net Services 连接,即使用户进程与 Oracle 例程在同一机器上也是如此。
何时使用专用服务器
提交批作业(预计很少有或没有空闲时间)
以 sysdba 身份连接以启动、关闭或执行恢复
要请求使用专用服务器,必须在 tnsnames.ora 文件内的 Oracle Net TNS 连接字符串中包含 SERVER=DEDICATED 子句。
(CONNECT_DATA=(SERVICE_NAME=TEST.us.oracle.com)
   (SERVER=DEDICATED) )
对于大多数平台来说,如果机器有足够的内存支持专用服务器,则应使用专用服务器。这样性能可能更好些。
但也有例外,例如 Windows NT,在该系统中,由于共享服务器体系结构的异步特性,使用Oracle Shared Server配置性能可能会有所提高。
 
3.使用oracle shared server
连接到 Oracle Shared Server
  监听程序进程等待来自用户进程的任何连接请求。某一进程请求连接时,监听程序确定是将该用户进程与调度程序连接(取决于调度程序的负载),还是为该用户进程分配一个专用服务器进程。
  如果配置允许该用户进程与调度程序连接,监听程序会为该用户进程提供调度程序进程的地址。如果该用户进程请求使用专用服务器,监听程序会创建一个专用服务器进程并使该用户进程与之连接。
  通过调度程序或专用服务器进程建立连接之后,在整个会话期间都将保持该连接。
  注:如果用户通过网络发出请求,监听程序选择的调度程序进程必须与正在使用的网络的协议匹配。
处理请求
  用户将请求发送给调度程序。
  调度程序将请求置入 “系统全局区” (System Global Area, SGA) 中的请求队列。
  共享服务器从请求队列选择该请求,然后处理该请求。
  共享服务器将响应放入请求调度程序的响应队列。
  该响应被传送给调度程序。
  调度程序将该响应返回给用户。
用户请求完成后,将释放共享服务器进程,于是该进程可为请求队列中的另一个用户请求服务。
请求队列
  所有调度程序共享一个请求队列。
  共享服务器监视请求队列以查看是否有新的请求。
  请求的处理采取先进先出 (FIFO) 的原则。
  共享服务器将完成的所有请求放入请求调度程序的响应队列。
  每个调度程序在 SGA 中都有自己的响应队列。
  每个调度程序都负责将完成的请求发送回相应的用户进程。
  在整个会话期间,用户始终与同一个调度程序相连。
SGA 和 PGA
使用专用服务器或共享服务器时,SGA和PGA的内容有所不同:
  专用服务器:用户会话数据保存在 PGA 中。SGA中包含共享池和其它内存结构。PGA包含堆栈空间,用户会话数据和游标状态
  Oracle Shared Server: 用户会话数据保存在 SGA 中。PGA中只包含堆栈空间,其它均在SGA中。
  所有 SQL 语句的文本和语法分析表格都存储在 SGA 中。
  游标状态包含 SQL 语句的运行时内存值,如检索的行。
  用户会话数据包含安全性和资源使用信息。
  堆栈空间包含用于进程的本地变量。
注:SGA 和 PGA 中的更改对于用户是透明的。但是,如果支持多个用户,需要增大 LARGE_POOL_SIZE 初始化参数的值。请根据同时处于活动状态的会话的数目来配置大型共享池的大小。
每个共享服务器进程都需要访问所有会话的数据空间,以便任何服务器都能处理来自任何会话的请求。在 SGA 中为每个会话的数据空间分配空间。通过在用户配置文件中将 PRIVATE_SGA 资源限制设置为所需的空间量,可限制会话可分配的空间量。
通过查询V$SYSSTAT 可监视受 Oracle Shared Server 影响的各种资源。

4.配置Oracle Shared Server
要配置 Oracle Shared Server,必须为例程设置初始化参数。Oracle Shared Server 体系结构要求 Oracle Net Services,即使客户机和共享服务器进程都与 Oracle 例程驻留在同一台机器上也是如此。
必需的初始化参数
  DISPATCHERS
  SHARED_SERVERS
可选初始化参数
  MAX_DISPATCHERS
  MAX_SHARED_SERVERS
  CIRCUITS
  SHARED_SERVER_SESSIONS
注:大多数可选参数都有合理的缺省值。在许多系统上,唯一应配置的参数是 DISPATCHERS。
DISPATCHERS
指定最初为某一给定协议启动的调度程序的数目,例
DISPATCHERS = “(PROTOCOL=TCP)(DISPATCHERS=2)\(PROTOCOL=IPC)(DISPATCHERS=1)”
只需要下列属性之一: ADDRESS、DESCRIPTION 或 PROTOCOL。
详见sg
计算调度程序进程的初始数目:
调度程序的初始数目 = CEIL(并发会话平均数/每个调度程序的连接数)
例如,假定系统通常通过 TCP/IP 方式并发连接 900 个用户,每个进程支持 255 个连接。在这种情况下,应按如下所示设置 DISPATCHERS 参数:
DISPATCHERS = "(PROTOCOL=TCP) (DISPATCHERS=4)"
MAX_DISPATCHERS
指定可同时运行的调度程序进程的最大数目
发出 ALTER SYSTEM 命令可添加超过初始启动数目的调度程序
添加或删除调度程序
可使用数据字典视图 V$CIRCUIT 和 V$DISPATCHER 监视调度程序上的负载。
如果调度程序进程上的负载一直较高,则可启动附加调度程序进程来发送用户请求以免等待。在调度程序的数目达到 MAX_DISPATCHER 之前,可以启动新的调度程序。
如果调度程序上的负载一直较低,则可减少调度程序的数目。
增删调度程序:ALTER SYSTEM SET DISPATCHERS='(PROTOCOL=TCP)(DISPATCHERS=3)'; 修改DISPATCHERS的值。
SHARED_SERVERS
SHARED_SERVERS 指定启动例程时要创建的服务器进程的数目。
数据库系统的初始共享服务器进程的适当数目取决于通常与该系统连接的用户的数目以及每个用户需要的处理量。
估计初始共享服务器进程的数目时,最好保守一些。需要时,附加共享服务器会自动启动,如果附加共享服务器空闲太久,又会被自动回收。
初始服务器始终保持已分配状态,即使它们处于空闲状态。
如果将服务器的初始数目设置得过高,可能会造成不必要的系统开销。
使用初始共享服务器进程数进行试验并监视共享服务器,直到找到适合于典型数据库活动的理想系统性能。
如果共享服务器的数目超过指定的最小限制,Oracle 最终会终止处于空闲状态的服务器。
如果将 SHARED_SERVERS 设为0,Oracle 会在服务器处于空闲状态时终止所有当前服务器,而且在增大 SHARED_SERVERS 的值之前不会启动任何新的服务器。
将 SHARED_SERVERS 设为0可有效地临时禁用共享服务器。
下面的语句将共享服务器进程的数目设为 2: ALTER SYSTEM SET SHARED_SERVERS = 2
MAX_SHARED_SERVERS
指定可启动的共享服务器的最大数目
允许根据请求队列的长度动态分配共享服务器
CIRCUITS
虚拟线路是用户通过调度程序和服务器与数据库的连接。CIRCUITS 参数指定可供入站和出站网络会话使用的虚拟线路总数。该参数非常重要,因为它是影响例程的 SGA 总需求的参数之一。
SHARED_SERVER_SESSIONS
该参数控制在任何时刻同时打开的共享服务器会话的总数。使用该参数可以为专用用户会话保留资源。
其它受 Oracle Shared Server 影响、可能需要调整的初始化参数:
LARGE_POOL_SIZE
SESSIONS
 
验证设置
使用 Oracle Shared Server 时,应该首先启动监听程序,然后启动例程,这样调度程序就可立即向监听程序注册。要验证是否已进行注册,可发出以下命令:
$ lsnrctl services listener01
通过建立一次连接验证是否已通过共享服务器连接,然后查询 V$CIRCUIT 视图以显示每个共享服务器连接的一个条目。
进行几次连接以验证的连接是否正在使用共享服务器。然后查询 V$CIRCUIT 视图以查看共享服务器连接。这也验证了监听程序是否在为传入的连接执行负载平衡。

3.相关的动态视图
V$CIRCUIT
该视图包含有关虚拟线路的信息,这些线路是用户与数据库之间通过调度程序和服务器进行的连接
V$SHARED_SERVER
该视图包含有关共享服务器进程的信息。
V$DISPATCHER
该视图提供有关调度程序进程的信息。
V$SHARED_SERVER_ MONITOR
该视图包含有关调整共享服务器进程的信息。
V$QUEUE
该视图包含有关请求和响应队列的信息。
V$SESSION
该视图列出每个当前会话的会话信息。

032 第四章 命名方法配置

第四章 命名方法配置
目标:
描述主机命名与本地服务名称解析之间的区别
使用 Oracle Net Configuration Assistant 配置:
 主机命名方法
 本地命名方法
 网络服务名
排除简单连接出现的故障

要点:
1.命名方法概览
客户机应用程序在试图连接数据库服务时,需要借助命名方法将连接标识符解析为连接描述符。
Oracle Net 提供了五种命名方法:
 主机命名(Host Naming):使 TCP/IP 环境中的用户能够通过其现有名称解析服务来解析名称
 本地命名:使用在每个客户机的 tnsnames.ora 文件中配置和存储的信息查找网络地址
 目录命名:将数据库服务或网络服务名解析为连接描述符,该描述符存储在中央目录服务器中
 Oracle Names:这是由 Oracle Names 服务器系统构成的 Oracle 目录服务,这些服务器可以为网络上的每个服务提供由名称到地址的解析
 外部命名:使用受支持的第三方命名服务
对于只有几个数据库的小型组织来说,应使用主机命名将名称存储在现有名称解析服务中,也可使用本地命名将名称存储在客户机上的 tnsnames.ora 文件中。
对于有多个数据库的大型组织来说,应使用目录命名将名称存储在集中管理的符合 LDAP 的目录服务器中。

2.主机命名
在下列情况下,客户机可使用主机名来连接服务器:
 使用 Oracle Net Services Client 软件连接 Oracle 数据库服务
 使用 TCP/IP 协议建立客户机与服务器的连接
 主机名通过 DNS 或本地的 /etc/hosts 文件等 IP 地址转换机制来解析
 不使用 “连接管理器” (Connection Manager) 或安全选项等高级功能
主机命名方法具有下列优点:
 需要的用户配置最少。用户只需提供主机名即可建立连接。
 无需创建与维护本地名称配置文件 (tnsnames.ora)。
 无需了解 Oracle Names 或 Oracle Internet Directory 管理过程。
 主机命名在每个节点上只能标识一个 SID,而使用其它命名方法还可标识其它 SID。
 如果在主机 (hosts) 文件中对多个全局名称设置了别名,让它们指向同一 IP 地址,这样即使这些数据库位于同一节点上,也可使用主机命名连接任意数据库。
客户端要求
如果使用主机命名方法,则必须在客户机上安装 TCP/IP 协议。此外,还必须安装 Oracle Net Services 和 TCP/IP 协议适配器。
主机名通过域名服务 (Domain Name Services, DNS)、网络信息服务 (Network Information Services, NIS) 或集中维护的 TCP/IP 主机文件等 IP 地址转换机制来解析。
使用主机命名方法之前,必须先对客户端进行如上配置。
服务器端要求
如果使用主机命名方法,除了客户机,还必须在服务器上也安装 TCP/IP 协议。此外,需要在服务器端安装 Oracle Net Services 和 TCP/IP 协议适配器。
在 Oracle8i 和 Oracle9i 中,只要满足以下条件之一就可向监听程序自动注册有关数据库的信息(包括全局数据库名称):
 在端口 1521 上使用 TCP/IP 运行的名为 LISTENER 的缺省监听程序正在运行
 已在初始化文件中设置了 LOCAL_LISTENER 参数
早期版本中是通过listener.ora文件向监听程序注册数据库信息的。必须静态配置SID_LIST_listener_name段以包含GLOBAL_DBNAME参数。
全局数据库名称由数据库名称和数据库域名构成。可以从初始化参数文件中的SERVICE_NAMES参数或DB_NAME和DB_DOMAIN参数来获取 GLOBAL_DBNAME 的值。
主机名必须与在客户机中指定的连接字符串匹配。其它信息还包括要连接的数据库的信息。
说明:
主机命名在客户端使用sqlnet.ora文件,在服务器端使用listener.ora文件。
sqlnet.ora中的NAMES.DIRECTORY_PATH参数确定的是连接时搜寻先后顺序。例如,NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME),
则先从本地TNSNAMES文件中去找连接时提供的描述符,如果没有发现匹配的,则再去oracle name server上找,
再没有则使用主机命名方法进行连接——将连接描述符(假定为test)当作一个主机去连接,去该主机上寻找GLOBAL_DBNAME=test的实例(实例名可能不是test)进行连接。

3.本地命名
本地命名的优点:
 提供了一种相对简单明了的解析服务名地址的方法。
 对于使用不同协议的各个网络,可跨网络解析服务名。
 可使用图形配置工具轻松配置。
本地命名方法要求网络服务名存储在 tnsnames.ora 文件中。
本地命名在客户端使用tnsnames.ora和sqlnet.ora文件,在服务器端使用listener.ora文件。
在图形化界面中配置网络服务名:
service name为该数据库服务的service name,一般为db_name.db_domain
net服务名为按该服务在本地的标识符,相当于别名。

4.故障排除
ORA-12154:“TNS:无法解析服务名”
原因:Oracle Net Services 找不到在 tnsnames.ora 配置文件中指定的连接描述符。
操作:
 检查 tnsnames.ora 文件是否存在以及是否可访问。
 检查 tnsnames.ora 文件是否位于 TNS_ADMIN 环境变量指定的位置中。
 在 tnsnames.ora 文件中,核实在连接字符串中指定的服务名已经映射为tnsnames.ora文件中的连接描述符。还要核实文件中没有语法错误。
 确认不存在 sqlnet.ora 文件的重复副本。
 如果正从登录对话框连接,则应核实连接服务名前没有 at 符号 (@)。
ORA-12198:“TNS:找不到指向目标的路径”和ORA-12203:“TNS:无法连接目标”
原因:客户机找不到所需数据库。
操作:
 核实已正确输入要连接的数据库的服务名。
 核实 TNSNAMES.ORA 文件的连接描述符中的服务名 ADDRESS 参数是正确的。
 核实 TNSNAMES.ORA 文件已存储在 TNS_ADMIN 环境变量定义的目录中。
 核实远程节点上的监听程序已经启动并正在运行。如果未启动,可使用 “监听程序控制实用程序”启动监听程序。
 如果正从登录对话框连接,则应核实连接服务名前没有 at 符号 (@)。
ORA-12533:“TNS:ADDRESS 参数非法”
原因:tnsnames.ora 文件内指定的连接描述符的 ADDRESS 段中的协议特定参数不正确。
操作:
 有关针对不同协议的关键字的详细信息,请参考适用于平台的 Oracle 操作系统文档。
ORA-12541:TNS:没有监听程序
原因:无法与远程节点上的监听程序取得联系。
操作:
 核实远程节点上的监听程序已经启动。可使用 “监听程序控制实用程序” 的 STATUS 命令检查监听程序的状态。如果需要,还可使用 START 命令启动该监听程序。
 

032 第三章 Oracle Net 服务器端基本配置

第三章 Oracle Net 服务器端基本配置
目标:
了解监听程序如何响应传入的连接
描述动态服务注册
使用 Oracle Net Manager 配置监听程序
使用 “监听程序控制实用程序” (Listener Control Utility, lsnrctl) 控制监听程序
为 IIOP 和 HTTP 连接配置监听程序


要点:
1.监听程序进程
数据库服务器通过监听程序接收来自客户机应用程序的初始连接。
监听程序是在节点上运行的进程,该进程可代表一个或多个数据库监听传入的连接。
监听程序的特点:
  监听程序进程可监听多个数据库
  多个监听程序可代表一个数据库进行监听,以实现负载均衡
  监听程序可监听多个协议
  Oracle Net 中的监听程序的缺省名称是 LISTENER
  每个 listener.ora 文件中的监听程序的名称必须唯一

连接方法:
衍生并继承:
衍生一个服务器进程并将连接传送给该进程或由其继承,该方法只在专用服务器配置中使用。
直接传送:
使用 Oracle Shared Server 时,监听程序将把连接传送给调度程序。该方法对于专用服务器进程不可用。
重定向(消息):
如果使用 Shared Server,将连接重定向到调度程序或服务器进程。
注:不论连接会话是传送、重定向给现有进程还是由其继承,该会话对于用户都是透明的。
只有通过打开跟踪并分析产生的跟踪文件才能检测到该会话。

衍生并继承
接收到连接请求时,监听程序可能会衍生专用的服务器进程,并将连接传送给该进程或由其继承。
该方法的使用取决于所用操作系统是否支持网络终端继承性。当监听程序衍生专用服务器进程并由该服务器进程继承连接时,即称为继承会话。
此时将按顺序出现下列事件:
  客户机使用配置的协议建立与监听程序的连接,并向该监听程序发送一个 CONNECT 数据包。
  监听程序检查是否已定义SID。如已定义,监听程序将分派或衍生一个新进程来处理该连接。
  此时会在监听程序和新的服务器进程之间建立继承连接,以传送进程初始化信息。传送完毕后,继承连接关闭。
  新的服务器进程会继承TCP套接字。
  服务器进程将RESEND数据包发送回客户机。
  继续向新衍生的专用服务器进程发送新的CONNECT数据包。
  该专用服务器进程接受传入的连接并将ACCEPT消息转发回客户机。
如果由于操作系统或协议的原因,而无法在同一机器上的两个不同进程之间传送连接,则必须进行重定向。
注:客户机断开连接时,客户机的专用服务器进程将关闭。

使用Oracle Shared Server的直接传送连接
注:如果监听程序在用于连接的远程节点上选择共享服务器调度程序,则不能进行直接传送。
这是使用负载均衡技术的Real Application Clusters数据库中的典型情况,在该数据库中,一个节点上的监听程序可以选择另一个节点上的调度程序。
Windows NT 在缺省情况下不支持网络终端的继承性。要启用该功能,必须将注册表条目 USE_SHARED_SOCKET 设为 TRUE,才允许多个连接使用一个单一套接字。
当该值为 FALSE (缺省值)时,将不会进行继承连接,而将启动重定向会话。
如果USE_SHARED_SOCKET条目设为TRUE,Windows NT可以启动继承连接,
但是需注意几点事项。如果启动了多个连接,并且因某种原因监听程序已经停止,则直到清除了这些连接后,
监听程序才能重新启动。这是因为现有连接正在使用监听程序执行监听需使用的同一端口号。
这是 Microsoft 使用 Widows 套接字 API (WINSOCK2) 实施 TCP/IP 的局限性。

重定向会话
当不具备继承或直接传送连接的条件时,将建立重定向会话。下列步骤概述了建立该类连接的方法:
  客户机使用配置的协议建立与监听程序的连接,并向该监听程序发送一个 CONNECT 数据包。
  监听程序检查是否定义了 SID。如果已经定义,监听程序将衍生一个新线程或新进程以为新连接提供服务。然后在监听程序和新进程/线程间建立 IPC 连接。
  新进程/线程从用户定义的空闲端口列表选择一个新的 TCP/IP 端口,然后将该信息传送回监听程序。
  监听程序将该新端口插入 REDIRECT 数据包并将其发送回客户机,客户机和监听程序间的源 TCP 套接字将重置。
  根据 REDIRECT 数据包中指定的重定向地址建立新的 TCP 连接,然后将 CONNECT 数据包转发给专用服务器进程。
  专用服务器进程最终接受传入的连接并将 ACCEPT 消息转发回客户机。
如果重定向会话是使用共享服务器建立的,且正在运行的共享服务器上还有容量,则不必按步骤 2 所述衍生新的进程。


2.服务配置和注册
动态服务注册
  无需在 listener.ora 文件中进行配置
  监听程序依赖 PMON 进程
Oracle9i 例程使用服务注册来通知监听程序有关其数据库服务的信息。服务注册依赖PMON进程向监听程序注册例程信息。
PMON 还通知监听程序有关例程和共享服务器调度程序的当前状态和负载。
如果安装了 Oracle9i JVM,则可向监听程序动态注册 HTTP 和 IIOP 监听终端。
启动例程时,系统会从初始化参数文件中读取有关监听程序的初始化参数,PMON 通过该文件向监听程序注册信息。
如果例程启动时监听程序尚未运行,PMON 将不向监听程序注册信息。PMON 将继续尝试与监听程序建立联系。监听程序将拒绝建立与未注册服务进行的任何连接。

静态服务配置
  用于 Oracle8 及更早版本
  需要配置 listener.ora
  对 Oracle Enterprise Manager 和其它服务是必需的


3.静态服务注册
listener.ora 文件用来为静态服务注册配置监听程序。listener.ora 文件必须与监听程序驻留在同一节点或计算机上。
listener.ora 文件包含下列各项的配置信息:
监听程序名
监听程序地址
使用监听程序的数据库
监听程序参数

缺省的 listener.ora 文件包含下列参数:
监听程序的名称:
  缺省名称是 LISTENER。
ADDRESS_LIST 参数
  包含一个地址块,监听程序监听其中所列地址处的传入连接。该块中定义的每个地址都代表一种监听程序接收连接的不同方法。
TCP 地址
  表示从网络上的客户机传入的 TCP 连接,连接目标是端口 1521。这些客户机使用各自的 tnsnames.ora 文件中定义的端口连接至该监听程序。
  host字段表示oracle server所在服务器,端口指的是监听与oracle server通信的端口。
  监听程序将根据为其定义的 SID_LIST 来指定要连接的数据库。请注意,在配置有监听程序的节点上,只要监听程序具有唯一的名称和唯一的端口,则可配置多个监听程序。
  所配置的每个监听程序都有自己的 SID_LIST,但是,一个数据库可以由多个监听程序提供服务。
监听程序可对一台机器上的多个数据库进行监听。这些数据库的 SID 在 SID_LIST_listener_name 块或参数处定义。
如果定义了多个 SID,则需要定义 SID_LIST 参数。
对于每个定义的 SID 来说,必须存在 SID_DESC 参数。
ORACLE_HOME
  标识服务的 Oracle 主目录位置。这使监听程序能够确定 Oracle 可执行文件的位置。
参数 GLOBAL_DBNAME
  标识数据库的全局数据库名称,这是由数据库名和数据库域构成的名称。全局数据库名称的格式为 database_name.database_domain。
  例如 ORCL.us.oracle.com,其中,数据库名部分 ORCL 是对数据库的简称。数据库域部分 us.oracle.com 指定数据库所在的数据库域,同时也保证了全局数据库名称唯一。
  该参数必须嵌在 SID_DESC 下并应与初始化参数文件中的 SERVICE_NAMES 参数的值匹配。
SID_NAME
  参数定义监听程序代表其接受连接的 SID 的名称。
一个实验:采用global_name参数--设其为true,设service_name=dba1.com,设listener.ora中global_dbname为dba1.com,无法正常连接。
          将tnsnames.ora中的service_name也改为dba1.com,即可连接了。
          将global_dbname改回dba1,又无法连接了。
          由此,充分验证了oracle的连接方式。


4.动态服务注册
Oracle9i 或 Oracle8i 例程使用动态服务注册。注册由每个数据库例程的 PMON 进程执行,每个例程在数据库初始化参数文件中都有必需的配置。
动态服务注册不要求在 listener.ora 文件中进行任何配置。
动态服务注册在数据库初始化文件中配置。监听程序配置必须与数据库初始化文件中的信息同步。
必须配置下列初始化参数,才能进行服务注册:
  SERVICE_NAMES:为该例程连接的数据库服务指定一个或多个名称。可以指定多个服务名,以区别同一数据库的不同用途。
  INSTANCE_NAME:指定例程名。在单例程数据库系统中,例程名通常与数据库名相同。
缺省情况下,PMON 向 TCP/IP 的缺省本地地址 — 端口 1521 — 处的本地监听程序注册服务信息。
可以强制 PMON 向不使用 TCP/IP 或端口 1521 的服务器上的本地监听程序进行注册,
具体方法是按如下所示对初始化参数文件中的 LOCAL_LISTENER 参数进行配置:
LOCAL_LISTENER=listener_alias
必须通过 tnsnames.ora 等命名方法将 listener_alias 解析为监听程序协议地址。例:
listener_name=
 (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1421)))


5.监听程序控制实用程序lsnrctl
启动/停止:$lsnrctl start/stop 或进入lsnrctl>后,start/stop [listener_name]
控制非缺省监听程序:LSNRCTL> set current_listener [listener_name]
使用 SET 命令更改监听程序参数:
LSNRCTL> SET trc_level ADMIN
使用 SHOW 命令显示参数的值:
LSNRCTL> SHOW trc_directory

032 第二章 oracle net体系结构

第二章 oracle net体系结构
目标:
解释 Oracle Net 堆栈式通信体系结构的主要组件
解释 Oracle Net 在客户机/服务器连接中的作用
描述如何通过 Oracle 联网产品建立 Web 客户机连接


要点:
1.Oracle Net连接
Oracle Net 用于根据下列因素在网络上的应用程序间建立连接:
  网络配置
  节点位置
  应用程序
  网络协议

连接类型可以是:
  客户机/服务器应用程序
  Java 应用程序
  Web 客户机应用程序


2.客户机/服务器应用程序连接
使用 Oracle Net,可在客户机和数据库服务器之间建立网络连接。
Oracle Net 是一种软件组件,同时驻留在客户机和数据库服务器上。它位于网络协议的上层。
从客户机启动与 RDBMS 服务器的连接时,数据从客户机上的堆栈传出,通过网络,到达 RDBMS 服务器中的类似堆栈。
Oracle Net 体系结构使用类似于开放系统互连 (OSI) 网络模型的堆栈。

客户机应用程序:
客户机应用程序(如 SQL*Plus)使用 Oracle Call Interface (OCI) 与服务器进行通信。
OCI 是一种软件组件,它为客户机应用程序和服务器能够理解的 SQL 语言提供了一个接口。

双任务通用协议 (Two-Task Common)
双任务通用协议(Two-Task Common, TTC) 为客户机与服务器上的不同字符集或格式提供字符集和数据类型转换。
TTC 属于 OSI 表示层。

Oracle Net 基础层:
Oracle Net 基础层负责建立并维护客户机应用程序和服务器之间的连接。Oracle Net 必须同时驻留在客户机与服务器上才能进行对等通信。
在客户端,Oracle Net 基础层负责确定下列连接事项:
服务器的位置
是否在连接中使用一个或多个协议
如何处理异常和中断
在服务器端,Oracle Net 基础层不仅执行在客户端执行的相同任务,还使用监听程序来接收传入的连接请求。
Oracle Net 基础层还与命名服务和 Oracle Advanced Security 通信以确保安全连接。

Oracle 协议支持(Oracle Protocol Support)
Oracle 协议支持(Oracle Protocol Support, OPS) 负责将 Oracle Net 功能映射到在客户机与服务器之间的连接中所使用的行业标准协议。
该层支持下列网络协议:
TCP/IP
具有 SSL 的 TCP/IP
命名管道
LU6.2
“虚拟接口” (Virtual Interface, VI)
注:“虚拟接口” (Virtual Interface, VI) 协议可用于应用程序 Web 服务器和数据库服务器通信。
VI 是用于群集服务器环境的事实标准通信协议。


3.Web 客户机应用程序连接
Web 浏览器可以通过下列方式连接至 Oracle 服务器:
将 Web 服务器用作配置有下列驱动程序的中间层:
  JDBC “Oracle 调用接口” (Oracle Call Interface, OCI) 驱动程序
  JDBC 瘦驱动程序
JDBC OCI 驱动程序用来连接 Oracle 客户机,而 JDBC 瘦驱动程序用于不用 Oracle Installation 的客户机,特别是安装了 Java 小程序的客户机。
必须在该 Web 服务器客户机与 Oracle 服务器上安装 Oracle Net 或 JavaNet 才能建立连接。假定使用的是基础协议连接。

使用下列协议直接连接至 Oracle 服务器:
  IIOP
  HTTP
客户机或服务器上不需要安装 Oracle Net,但是,必须对 Oracle 服务器进行配置以支持这些协议。在此类连接中不需要使用 Web 应用程序服务器。


4.连接概念与术语
数据库服务
对于客户机而言,Oracle 数据库表现为一种服务;即该数据库代表客户机执行任务。
数据库可以具有关联的一种或多种服务,一个数据库可以表现为多种服务,而一种服务也可以作为多个数据库例程来实现。


服务名
  数据库的逻辑表示
  数据库对客户机的表现方式
服务名是作为全局数据库名称的字符串,即由安装或创建数据库过程中输入的数据库名称和域名构成的名称。
服务名包含在连接描述符的连接数据部分。

连接描述符
  数据库的位置
  数据库服务的名称
客户机通过使用连接描述符 来连接至数据库服务,该描述符提供了数据库的位置和数据库服务的名称。
连接描述符的地址部分实际上就是监听程序 的协议地址。要连接至数据库服务,客户机首先与监听程序进程联系,该进程通常驻留在数据库服务器上。
监听程序接收传入的客户机连接请求,然后将这些请求传送给数据库服务器。
一旦建立连接,客户机与数据库服务器即可直接进行通信。

监听程序
  接收客户机连接请求
  将请求发送给数据库服务器
与协议地址的情况非常相像,也需要将监听程序配置为在协议地址上接受客户机的请求。
该协议地址定义了监听程序正在监听的协议以及其它特定于协议的信息。

服务注册
  数据库向监听程序注册信息
  每个例程可用的服务处理程序
连接描述符还指定了数据库服务名,客户机通过该服务名来建立连接。
监听程序知道可使用哪些服务来发送连接请求,因为 Oracle 数据库向监听程序动态注册该信息。
该注册过程称为服务注册。它还为监听程序提供有关数据库例程和每个例程可用的服务处理程序方面的信息。

服务处理程序
  连接点
  调度程序或专用服务器
服务处理程序 充当 Oracle 数据库服务器的连接点。服务处理程序可以是调度程序,也可以是专用服务器。


5.Oracle Net配置模型
本地管理
网络地址信息存储在网络中的每台计算机上的 tnsnames.ora 文件中。
集中管理
网络地址信息存储在集中目录服务中,包括符合 LDAP 的目录服务器或 Oracle Names Server。
注:在以后的版本中,将不支持 Oracle Names 作为一种集中命名方法。
根据所用的配置模型,可使用下述文件对网络计算机进行配置:

ldap.ora:位于为集中管理功能配置的数据库服务器和客户机计算机上,该文件包含访问目录服务器所需的参数。

listener.ora:位于数据库服务器上,该配置文件用于监听程序,其中包括:
监听程序接受连接请求所基于的协议地址
监听程序要监听的数据库服务和非数据库服务
监听程序使用的控制参数

names.ora:位于 Oracle Names Server 上,该文件包含 Oracle Names Server 的位置、域信息和可选配置参数。

sqlnet.ora:位于客户机与数据库服务器计算机上。

tnsnames.ora:位于客户机上,该文件包含映射到连接描述符的网络服务名,用于本地命名方法。

September 11

终于稳定下来了

     近两个月很忙,事情很多。回头一看,居然均是人生的大事。出现了机遇——错过了机会。兴奋——努力——失望——释然。离别——心痛——平静。有失意——有得意。在此深深感谢支持和帮助我的朋友们:波波,彤,孙哥,ruking,烙饼卷大葱,琳——还有很多人,不一一列举了。现在各方面终于稳定下来了,也在精神上给自己放了半个月假了——其实并不一定需要实际的假期,只要有一种放松的感觉,于我就可以当作假期来享受了。
     过几天就要25了,人生已经过去了1/3——1/4了,接下来的这1/3——1/4要施展了,为了自己,为了所有爱我的和我爱的人,创造一片天地,创造美好的生活。
    
August 14

接下来干嘛呢

031搞定了,接下来干嘛呢?好像有数不清的东西需要看,抓狂~ 
August 03

031 第二十章 全球化支持

第二十章 使用 “全球化支持”
目标:
为数据库选择数据库字符集和国家字符集
使用初始化参数、环境变量以及 ALTER SESSION 命令,指定与语言有关的行为
使用不同类型的国家语言支持 (NLS) 参数
解释全球化支持对语言相关的应用程序行为的影响
获取有关 “全球化支持” 用法的信息
要点:
1.“全球化支持” 功能
“全球化支持”
功能可确保数据库实用程序和错误消息、排序顺序、日期、时间、货币、数字和日历惯例能自动适合本国语言。
Oracle 目前支持 57 种语言、88 个地域、84 种文字排序(71 种单语言和 13
种多语言)以及 235 种编码字符集。
语言相关操作由客户端和服务器端的若干参数及环境变量控制。
服务器和客户机可能在相同位置或不同位置运行。当客户机和服务器使用不同的字符集时,Oracle
服务器会自动处理字符集的转换。
用户可以用他们本国的语言交互、存储、处理和检索数据,这些语言包括西欧、东欧、中东、东亚和东南亚语言。
不同的国家和地域有不同的文化习俗,直接影响到数据格式。
支持许多不同的字符编码方案,包括单字节、多字节和固定宽度的编码字符集。
Oracle 服务器提供了多种在语言学上精确划分的不同语言类别。
数据库实用程序和错误消息以受支持的国家语言形式显示。Oracle 产品已经翻译成 30
种不同的语言。
根据国际标准化组织 (ISO)
的规定,日期和时间可以采用零点几秒、秒、分钟、小时、日、月和年这样的格式表示。可以使用时区以支持夏时制。
支持诸如公历、日本历、中国的农历和泰国的佛历等历法的本国日历。
数字数据以相应的本地格式表示。
货币符号体现本国经济制度和 ISO 的规定。借贷符号也因地域而异。

2.编码方案
字符编码方案指定对应于计算机或终端可以显示和接收的字符的数字代码。
字符编码方案用于将数据解释为有意义的符号并从终端传递到主机。
Oracle 提供不同类别的编码方案:
单字节字符集:
    7 位
    8 位
宽度可变的多字节字符集
宽度固定的多字节字符集
Unicode (AL32UFT8, AL16UTF16, UTF8)
单字节字符集:
在单字节字符集中,每个字符只占一个字节。单字节7位编码方案最多可以定义128个字符;单字节8位编码方案最多可以定义256个字符。
单字节方案示例:
7 位字符集:美国7位ASCII码(US7ASCII)
8 位字符集:
西欧ISO8859-1码(WE8ISO8859P1)
西欧8位EBCDIC代码页500码(WE8EBCDIC500)
西欧8位DEC 码(WE8DEC)
宽度可变的多字节字符集:
在宽度可变的多字节字符集中,每个字符以一个或多个字节表示。多字节字符集通常用于支持亚洲语言。有些多字节编码方案使用最有效的位值来表明,一个字节是表示单个字节还是作为代表一个字符的一系列字节中的一部分。然而,其它字符编码方案可以区分单字节和多字节字符。在碰到移入代码之前,由设备发出的移出控制代码表明后面的字节都是双字节字符。
宽度可变的多字节方案示例:
日文扩展 UNIX 代码 (JEUC)
中文 GB2312-80 (CGB2312-80)
AL32UTF8 (UTF-8)
宽度固定的多字节字符集:
除了每个字符采用字节数固定的格式外,宽度固定的多字节字符集同多字节字符集提供的支持类似。
这提供了每个字符具有统一字节长度表示法的好处。
Oracle 仅支持一个宽度固定的多字节字符集,且该字符集只位于国家字符集
AL16UTF16 中。
宽度固定的多字节字符集示例:
AL16UTF16、16 位 Unicode(宽度固定的双字节 Unicode)
Unicode 字符集:
Unicode
是一种全球字符编码标准,可以表示计算机中使用的所有字符,包括技术符号和出版用的字符。Unicode
标准 3.0 版包含 49,149 个字符,容量超过一百多万个字符。
Unicode
全套字符可以用不同的编码格式表示。UTF-16(通用字符集转换格式)是一种宽度固定的双字节格式;而
UTF-8 是一种宽度可变的多字节格式。
Oracle 提供 AL32UTF8、UTF8 和 UTFE 作为数据库字符集,同时提供 AL16UTF16 和
UTF8 作为国家字符集。基于 UTF-8 的字符集的优点是它们包括使用相同单字节编码的
ASCII。UTF8 是 ASCII 的超集,因此,从基于 ASCII 的字符集升级到 Unicode
时,数据库字符集的移植会变得更加简单。
注:有关上述带有连字符的 UTF-16 和 UTF-8 的信息,请参考 Unicode
标准编码;有关不带连字符的 UTF8、AL32UTF8 和 AL16UTF16 的信息,请参考基于
Unicode 标准的 Oracle 字符集。

2.数据库字符集和国家字符集
字符集类型:
CREATE DATABASE 语句包含 CHARACTER SET 子句和附加可选子句 NATIONAL CHARACTER
SET,用于声明要用作数据库字符集和国家字符集的字符集。如果未设置 NATIONAL
CHARACTER SET 子句,则国家字符集默认为 AL16UTF16。
由于数据库字符集用于识别并保存 SQL 和 PL/SQL 源代码,它必须将 EBCDIC 码或 7
位 ASCII
码作为子集,判断方法是看哪一个是所用平台的本机码。因此,不可能使用宽度固定的多字节字符集作为数据库字符集,而只能将其作为国家字符集。
在 Oracle9i 中,国家字符集只能存储 Unicode,SQL NCHAR
数据类型(NCHAR、NVARCHAR2 和 NCLOB)为 Unicode 数据类型。
比较:
数据库字符集                                         国家字符集
在创建时定义                                         在创建时定义
除非重新创建,否则无法更改                          
除非重新创建,否则无法更改,例外情况很少
存储类型为 CHAR、VARCHAR2、CLOB、LONG的数据列       
存储类型为NCHAR、NVARCHAR2、NCLOB的数据列
可以存储宽度可变的字符集                             可以采用 AL16UTF16 或
UTF8 格式存储 Unicode

3.选择oracle数据库字符集的原则
考虑事项
数据库必须支持哪些语言?
有哪些互操作与系统资源和应用程序相关?
对性能的要求如何?
有哪些限制条件?
数据库必须支持哪些语言?
可能有几种字符集都可以满足当前的语言要求,但是,还应该考虑到将来的需求。如果知道将来需要扩展对不同语言的支持,现在就要选择一个使用范围较广的字符集,以免日后再进行移植。
有哪些互操作与系统资源和应用程序相关?
尽管数据库可以维护和处理实际字符数据,但是您还必须依赖操作系统中的其它资源。例如,操作系统提供与所选字符集相对应的字体。另外,支持所需语言和应用程序软件的输入法也必须与特定字符集保持一致。
如果所选的字符集与操作系统中的可用字符集不同,Oracle
会将操作系统字符集转换为数据库字符集。但是,这样做会产生一些字符集转换开销,同时应确保操作系统字符集中包含等价的全套字符,以避免可能出现的数据丢失情况。
对性能的要求如何?
在处理不同的编码方案时,性能开销可能会有所不同,这取决于所选的字符集。为了获得最佳性能,您应该尝试选择一个无需进行转换的字符集,并将对所需语言使用最有效的编码方案。单字节字符集在性能方面要优于多字节字符集,此外,在空间需求方面,该字符集也是最有效的。但是,单字节字符集对所能使用的语言数目有所限制。
有哪些限制条件?
不能选择宽度固定的多字节数据库字符集。
在EBCDIC平台上,不能将基于ASCII的字符集设置为数据库字符集;同样,在ASCII平台上也不能具有基于EBCDIC的数据库字符集。

4.选择Oracle国家字符集的原则
AL16UTF16 和 UTF8 这两种选择都适用于国家字符集。AL16UFT16 是宽度固定的双字节
Unicode 字符集。而 UTF8 是宽度可变的、一至三个字节的 Unicode
字符集。欧洲字符在 UTF8 中按一至两个字节存储,而在 AL16UTF16
中按两个字节存储,相比之下,前一种选择可以节省空间。亚洲字符在 UTF8
中按三个字节存储,这样,所需的空间比在 AL16UTF16 中要多。
由于 AL16UTF16 是宽度固定的编码,因此在执行速度上要比宽度可变的 UTF8 快。
在 Oracle9i 中,AL16UTF16 支持最新的 3.0 版的 Unicode 标准。
在 Oracle9i 中,UTF8 支持 Unicode 3.0 版,并将在今后的版本中继续支持 Unicode
3.0 版。

5.选择 Unicode 解决方案:Unicode 数据库
易于移植 Java 或 PL/SQL 代码:
在实现多语言支持时,如果是使用现有的 SQL CHAR 数据类型(CHAR、VARCHAR2、CLOB
和 LONG)来存储多语言数据,则 Unicode 数据库可以最大程度地减少代码更改。对于
SQL NCHAR 数据类型,不需要重新编码。
易于移植 ASCII 编码的数据:
如果当前数据库字符集和数据严格符合 US7ASCII 格式,即可以使用简单的 ALTER
DATABASE 语句移植数据库。
多语言数据均匀分布:
如果多语言数据分布在整个数据库中,则可选择 Unicode
数据库解决方案,因为您无需了解哪些列存储有多语言数据。
Oracle 文本:
要将多语言 BLOB 和 Oracle 文本一起使用,则必须使用 Unicode 数据库解决方案。
何时应使用 Unicode 数据类型:
逐渐添加多语言支持时
打包应用程序
性能
单字节数据库字符集和宽度固定的国家字符集
更好地支持 windows 客户端的 UTF-16

6.指定语言相关行为
有三种指定国家语言支持 (NLS) 参数的方法:
服务器端的初始化参数,用于指定缺省服务器环境(这些缺省设置对客户端无效。)
客户端的环境变量,指定覆盖服务器缺省设置的语言相关行为
ALTER SESSION 参数,用于覆盖客户机或服务器的缺省设置
初始化参数NLS_LANGUAGE定义语言相关惯例值,例如:
Oracle 消息所使用的语言
日期和月份名称及其缩写所使用的语言
a.m.、p.m.、A.D. 和 B.C. 的等价语言所使用的符号
缺省的字符数据排序顺序
NLS_LANGUAGE确定下列参数的缺省值:
NLS_DATE_LANGUAGE 
显式更改日期、月份名及其缩写和其它日期格式元素的拼写值所使用的语言。
NLS_SORT           更改
Oracle服务器用于排序字符值的文字排序顺序(排序值必须是是文字排序顺序名。)
初始化参数NLS_TERRITORY定义地域相关惯例值,其中包括:
缺省日期格式
十进制字符和组分隔符
本地货币符号
ISO 货币符号
ISO 周数计算
一周起始日
注:当地域名包含空格时,如The
Netherlands,应该用双引号将地域名引起来,如“The Netherlands”。
NLS_TERRITORY确定下列参数的缺省值:
NLS_CURRENCY        显式指定新的本地货币符号
NLS_ISO_CURRENCY    显式指定应使用 ISO 货币符号的地域
NLS_DATE_FORMAT     显式指定新的缺省日期格式(值必须是日期格式模型。)
NLS_NUMERIC_CHARACTERS    显式指定新的十进制字符和组分隔符
环境变量
使用环境变量NLS_LANG为个别用户指定所需的文化习俗。NLS_LANG值将覆盖NLS初始化参数的所有值。
每一部分控制NLS功能的一个子集:
NLS_LANG=<language>_<territory>.<charset>
其中:
Language:覆盖NLS_LANGUAGE的值并控制与NLS_LANGUAGE相同的功能
Territory:覆盖NLS_TERRITORY的值并控制与NLS_TERRITORY相同的功能
Charset:指定客户端应用程序(通常是用户终端使用的客户端应用程序)使用的字符编码方案
NLS_LANG
定义客户机终端的字符编码方案。不同客户机可以使用不同的编码方案。在客户机和服务器之间传递的数据将在两套编码方案间自动转换。数据库编码方案应是所有客户机编码方案的超集或与之等价。转换对客户机应用程序是透明的。
如果数据库字符集和客户机字符集相同,Oracle
将假定正在发送或接收的数据属于同一字符集,因此不进行验证或转换。该方案的优点在于能优化性能,但是,如果使用不当,可能会导致数据不一致,如另一字符集中存储的数据不同于数据库字符集中存储的数据。
例如,数据库字符集是 US7ASCII,客户机终端使用的是简体中文
Windows。将NLS_LANG 设置为 SIMPLIFIED CHINESE_HONGKONG.US7ASCII
以指定客户机字符集,这样,就有可能在单字节数据库中存储多字节简体中文字符。这意味着
Oracle 可以把这些字符当作单字节 US7ASCII 字符使用,因此,所有的 SQL
字符串操作函数(如 SUBSTR 或
LENGTH)将基于字节而不是字符。在导出然后导入到其它数据库后,可能会丢失所有的非
ASCII 字符。
所有 NLS 初始化参数都可作为环境变量,从而可以为每个客户机分别指定 NLS 特性。
此外,还可以使用 NLS_CALENDAR 指定 Oracle
服务器使用的日历系统,如公历、波斯历或泰国佛历。
只有在客户环境中才能设置下列变量:
NLS_CREDIT
NLS_DEBIT
NLS_DISPLAY
NLS_LANG
NLS_LIST_SEPARATOR
NLS_MONETARY
注:有关这些参数的说明,请参考 Oracle9i Globalization Support Manual。
如果将环境变量 ORA_NLS33 设置为无效目录,则有可能仅能使用缺省字符集 US7ASCII
 创建数据库。在 UNIX 上,ORA_NLS33 应该设置为:
$ORACLE_HOME/ocommon/nls/admin/data,如果未设置 ORA_NLS33,这即是缺省设置。
更改 NLS 参数
使用 ALTER SESSION 命令更改会话的个别NLS特性。通过发出ALTER
SESSION命令,可同时更改可在客户端和服务器端设置的所有环境变量。
除了显式发出 ALTER SESSION 命令外,还有一个数据包 DBMS_SESSION.SET_NLS
可获得参数的名称和值。

7.文字排序
有三种排序类型:
二进制排序:
    即根据编码字符的二进制值进行排序
单语言排序:
    执行两遍排序
    基于分配给字符的主值和次值
多语言排序:
    基于新的 ISO 14651 和
    支持多语言排序的 Unicode 3.0 标准
例如,在法语中,a 排在 b 的前面,但是,如果使用的是二进制排序,则 a 排在 z
之后。为了克服二进制排序的局限,Oracle 服务器通过设置 NLS_SORT
参数提供文字排序服务。
NLS_SORT 用于指定字符数据的排序类型
    由环境变量 NLS_LANG 定义
    可在会话级别覆盖
NLSSORT 函数
    用于指定字符数据的排序类型
    允许在查询级别定义排序顺序

8.在 SQL函数中使用NLS参数
SQL 字符函数支持单字节和多字节字符。
有些 SQL 函数需要将 NLS 参数显式指定为其参数列表的一部分。因此,SQL
函数可以覆盖环境所指定的行为。例:
SELECT TO_CHAR(hire_date,'DD.Mon.YYYY','NLS_DATE_LANGUAGE=FRENCH')
FROM employees;
SELECT last_name,TO_CHAR(salary,'99G999D99','NLS_NUMERIC_CHARACTERS=",.")
FROM employees;
以下 SQL 函数使用 NLS 参数:
函数                                NLS 参数
TO_DATE                             NLS_DATE_LANGUAGE,NLS_CALENDAR
TO_NUMBER                          
NLS_NUMERIC_CHARACTERS,NLS_CURRENCY,NLS_CURRENCY
TO_CHAR                            
NLS_DATE_LANGUAGE,NLS_NUMERIC_CHARACTERS,NLS_CURRENCY,NLS_ISO_CURRENCY,NLS_CALENDAR
NLS_UPPER, NLS_LOWER,               NLS_SORT
NLS_INITCAP, NLSSORT
对于 TO_CHAR、TO_DATE 和 TO_NUMBER 这类函数,还定义了多个格式掩码元素。
数字格式掩码元素:
“D” 代表十进制分隔符
“G” 代表组(千位)分隔符
“L” 代表本地货币符号
“C” 代表本地 ISO 货币符号
“U” 代表欧元的双重货币符号
日期格式掩码元素:
“RM, rm” 代表罗马月份数字
“IW” 代表 ISO 星期号
“IYYY, IYY, IY,” 和 “I” 代表 ISO 年份

9.文字索引支持
文字索引支持
函数型索引专门用于创建按文字排序的索引。SQL 函数 NLSSORT
以给定的文字排序顺序返回用于对第一个参数排序的字节串。
通过本地排序获取高性能。
NLS_COMP 参数是一个动态初始化参数,它用于控制 <、> 和 =
等比较运算符处理文字顺序的方式。当这个参数设置为
BINARY(缺省设置)时,将基于字符串的二进制值进行比较。当设置为 ANSI
时,比较运算符通过文字排序顺序来确定依据 NLS_SORT 会话参数执行的操作结果。

10.获取字符集信息
使用以下查询查看数据库和国家字符集:
SELECT parameter, value
FROM nls_database_parameters
WHERE parameter LIKE '%CHARACTERSET%';
以下视图仅显示出已在init<SID>.ora文件中显式设置的参数的值:
SELECT * FROM nls_instance_parameters;
以下视图显示会话参数:
SQL> SELECT * FROM nls_session_parameters;

10.获取NLS设置信息
SELECT * FROM v$nls_valid_values;
V$NLS_VALID_VALUES 视图显示出 NLS
数据引导文件的内容。它返回一个随给定数据库版本一起提供的列表,该列表包含所有字符集、语言、文字排序以及地域定义。该列表中可能还包含不受支持或内部使用的定义。
显示 NLS 参数的当前值:
SELECT * FROM v$nls_parameters;

11.Oracle 区域设置构建器 (Oracle Locale Builder):
Oracle9i
服务器提供了一组完整的区域设置定义,包括语言、地域、字符集和文字排序。如果需要对任何现有的区域设置定义进行自定义,或者创建新的区域设置定义,则可以使用新增的
Oracle 区域设置构建器 (Oracle Locale
Builder),它提供了一种简单易用的图形用户界面,使您可以轻松地查看、自定义和定义各种区域设置。