8.手工备份恢复--备用数据库(练习10、11)
在讲备用数据库之前,先说明两个术语:
- 主数据库:数据库源就是主数据库,也可称之为源、产品或者主动数据库。在本节中PRACTICE数据库实例为主数据库;
- 备用数据库:数据库副本是备用数据库,也可以成为目标数据库或者恢复数据库。该数据库通常与数据库拥有相同的名称和实例名称,但如果备用数据库和主数据库保存在同一服务器,实例名称将不同,如本节中STANDBY;
实现备用数据库需要注意如下细节:
- 真实环境中,主数据库和备用数据库必须保存在在不同物理位置的服务器上;
- 存放主数据库和备用数据库的服务器必须拥有相同的机器结构和操作系统;
- 在两个数据库上的Oracle数据库版本必须相同;
- 备用主机只做备用服务器,不能兼顾他用;
- 对归档重做日志文件的加载取决于NET8,完全依赖于网络,如果网络出现问题,主数据库和备用数据库之间将存在更大的时间延迟;
- 客户机和中间层服务应当做好准备,一旦出现故障,能够适应主数据库向另一台服务器上的转移;
- 数据库结构和对象操作上许多变化不会被传播给备用数据库;
- 主数据库必须运行在归档模式,并且爸爸归档日志文件用于恢复备用数据库;
- 一定要验证备用数据库的存储过程,一旦出现故障,备用数据库将成为主数据库,备份存储过程将保护新的主数据库库。
练习10:初始化并恢复备用数据库
本练习首先按照PRACTICE创建STANDBY数据库目录、参数文件、口令文件、Window服务,然后把PRACTICE数据库的数据文件备份到STANDBY目录下并修改备用参数文件,再通过手工传递并应用归档日志文件,最后启动并确认管理恢复。
步骤一:准备备用库环境
利用练习9步骤一目录脚本,修改ORACLE_SID为STANDBY,创建备用数据库存放相关文件目录,并参见该步骤创建一个口令文件和Window服务。
首先,创建备用数据库所需的路径:
2 set ORACLE_BASE=D:\oracle
3 set ORACLE_HOME=D:\oracle\product\10.1.0
4 set ORACLE_DATA=D:\oracle\%ORACLE_SID%
5 set ORACLE_ADMIN=%ORACLE_HOME%\admin\%ORACLE_SID%
6 md %ORACLE_ADMIN%
7 md %ORACLE_ADMIN%\pfile
8 md %ORACLE_ADMIN%\bdump
9 md %ORACLE_ADMIN%\cdump
10 md %ORACLE_ADMIN%\udump
11 md %ORACLE_ADMIN%\create
12 md %ORACLE_DATA%\
13 md %ORACLE_DATA%\ARCHIVE
然后,创建一个口令文件,这样就可以在SQL*Plus中以SYSDBA角色SYS连接数据库。
再次,为CLNE创建一个名为OracleSerciveCLNE的数据库服务,使用CLNE口令:
最后,配置TNS服务:打开D:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN\ tnsnames.ora添加目标数据库服务;
配置Lisenter服务:打开D:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN\ listener.ora,添加目标数据库服务
步骤二:制作打开数据库的备份
可以采用冷备份或热备份的数据库文件来创建备用数据库,可利用练习五步骤一脚本,改变数据文件备份的目的路径,使之指向STANDBY数据库目录:
Define dir=’ D:\oracle\STANDBY’
再把生成控制文件的路径指向STANDBY所在路径,该命令必须使用专门控制命令,不能由主数据库控制文件的一个普通备份来创建:
prompt alter database create standby controlfile sa '&dir\standby.ctl' REUSE;;
运行该脚本,将创建主数据库的一个备用副本。
步骤三:配置备用参数文件
数据库启动时需要加载参数据文件,可以复制CLNE数据库的配置文件,具体路径为D:\oracle\product\10.1.0\Db_1\database\initCLNE.ora,重新命名initSTANDBY.ora。备用数据库参数文件应对参数作如下设置,需要注意的是在Oracle10g参数文件中,存在不同的配置组,不同配置组对不同配置进行设置:
2 instance_name=STANDBY
3 service_names=STANDBY
4 control_files=("D:\oracle\STANDBY\STANDBY.CTL")
5 log_archive_dest='D:\oracle\STANDBY\ARCHIVE'
6 standby_archive_dest='D:\oracle\STANDBY\ARCHIVE'
7 background_dump_dest=d:\oracle\product\10.1.0\admin\STANDBY\bdump
8 user_dump_dest=d:\oracle\product\10.1.0\admin\STANDBY\udump
9 db_file_name_convert='D:\oracle\PRACTICE','D:\oracle\STANDBY'
10 log_file_name_convert='D:\oracle\PRACTICE','D:\oracle\STANDBY'
11 lock_name_space=STANDBY
- 第1行db_name 备用数据必须拥有与主数据库绝对相同的名称;
- 第2行instance_name 内存结构以及后台进程链接的名称,实例名称不需要与数据库名称相同;
- 第3行service_names 连接一个或多个数据库的某个实例由服务名称参数确定,服务名称STANDBY用于归档日志在PRACTICE和STANDBY数据库之间传递;
- 第4行control_files 控制文件由control_files参数定义值打开,STANDBY数据库和PRACTICE数据库上的不同;
- 第5行log_archive_dest在手工恢复期间,这里路径用于应用归档日志;
- 第6行standby_archive_dest 应用从主数据库PRACTICE自动传递/加载的归档日志;
- 第7行backup_dump_dest 用于后台进程的alert.log和调试跟踪文件的路径;
- 第8行user_dump_dest 用于用户进程跟踪文件的路径;
- 第9行db_file_name_convert 由于控制文件是来自PRACTICE数据库的一个特别的副本,在控制文件中数据文件的指向是D:\oracle\PRACTICE目录下,该参数通知实例在D:\oracle\STANDBY目录下寻找那些数据文件。如果主数据库和备用数据库使用不同的主机,建议所有的数据文件放置在相同的目录结构下,那么无需定义该参数;
- 第10行log_file_name_conver 和db_file_name_convert类似,该参数通知数据库实例在D:\oracle\STANDBY\ARCHIVE目录下创建联机日志文件;
- 第11行lock_name_space 必须使用该参数,以确保两个名称一样的数据库能够保存在同一个机器上。
步骤四:加载备用数据库
通过如下脚本启动实例并加载备用控制文件
2 WIN>sqlplus /nolog
3 SQL>conn sys/standby@standby as sysdba;
4 SQL>startup nomount;
5 SQL>ALTER DATABASE MOUNT STANDBY DATABASE;
如为STANDBY数据库正确配置初始化文件,启动命令将成功执行;否则将出错,此时查询v$datafile表,看数据文件的路径是否已经正确转换。
步骤五:传送归档日志文件
有两种方法可以实现主数据库到备用数据库恢复和应用归档日志,分别为:
- 手工恢复,由DBA建立一个脚本或手工输入命令,将文件从主数据库传递到备用路径,然后在备用数据库上使用恢复命令,这是Oracle8i版本之前使用的唯一方法;
- 管理恢复,Oracle利用NET8监控归档日志文件从主数据库向备用数据库位置的传输,并且这些日志文件在备用数据库上的应用也受管理。管理恢复是通过init.ora参数设置和恢复命令来设置的,备用数据库产生名为远程文件服务器(RFS)的后台进程,从NET8传输中创建归档文件,并保存在standby_arch_dest文件夹下。
在本步骤我们把PRACTICE自STANDBY创建以来所进行归档文件复制到STANDBY数据库的归档目录。
步骤六:应用归档日志文件
将STANDBY数据设置为备用数据库后,利用RECOVER命令在STANDBY数据库上应用所需要的归档文件:
设置完毕,将提示归档文件,结构推荐文件名称,直到应用所有的归档文件,这个恢复就像在不完全恢复的基于取消恢复那样:
按下ENTER键,应用推荐的日志,知道产生如下的消息:
步骤七:启动管理恢复
首先通过配置NET8启动管理恢复,这样主服务器的归档进程就可以和备份服务器上的RFS进行通信,然后还必须通知主归档进程将归档日志文件写到一个NET8服务中,最后把备用数据库配置为管理模式恢复。此时归档文件从PRACTICE数据库发出并自动应用于STANDBY数据库,直到取消恢复。
通过如下建立NET8服务:
- 在STANDBY数据库的listerner.ora创建一个名为STANDBY的新数据库服务;
- 在STANDBY数据库的tnsnames.ora建立一个名为STANDBY的服务,允许PRACTICE数据库通过监听者和STANDBY实例连接,通过该设置每当一个归档日志文件从主数据库发送给备用数据库时,该链接被创建和使用。
以DBA身份连接数据库,开始管理恢复(建议使用命令行设置管理恢复,使用SQL*Plus会出现无法响应的情况):
当提交该命令后,屏幕处于阻塞状态,得不到任何反馈信息,这是正常的,STANDBY数据库已经启动RFS后台进行接收任何从PRACTICE数据库传来的归档日志。当一个PRACTICE数据库的归档日志生成时,通过NET8把该文件复制到D:\oracle\STANDBY\ARCHIVE的归档日志下并应用到STANDBY数据库。
该命令需要在另一个SQL*Plus会话中提交,用于取消管理恢复
步骤八:确认恢复管理
通过如下三种方式确认管理恢复是否正确运行:
- Archive file 在STANDBY数据库的归档目的路径中查找从主数据库传输来的归档日志;
- Standby alert log 在STANDBY的alert.log中查看归档日志应用记录,可以通过主数据库日志的切换,等待几分钟,看是否有新的归档日志被传输和应用;
- Log history 同时查询主数据库和备用数据库上的v$log_history,看是否返回相同的值,注意备用数据库的响应会延迟几秒:
练习11:打开、激活备用数据库
可以以只读模式打开备用数据库检查备用数据库是否正确工作,此时不能修改数据并且不能应用从主数据库传输过来的归档日志文件。备用数据库一旦被激活,将不能回复,而需要对打开的备用数据库进行备份。
步骤一:产生数据库活动
在PRACTICE数据库在TINA.DATE_LOG表插入一笔15年后日期数据,通过该数据验证归档日志文件是否正确传递,插入的命令如下:
2 SQL> COMMIT;
3 SQL> ALTER SYSTEM SWITCH LOGFILE;
在PRACTICE数据库切换日志文件创建一个归档日志文件,将在STANDBY数据库上应用。
步骤二:以制度模式打开备用数据库
设置STANDBY数据库为管理恢复模式,直到应用最新的归档日志,这些归档日志中包含步骤一插入的新行,取消STANDBY数据库的恢复:
以只读方式打开STANDBY数据库,查看TINA.DATE_LOG是否存在步骤一插入的数据。
可以看到在备用数据库已经存在一笔15年日期的数据
步骤三:将备用数据库返回到恢复模式
STANDBY数据库从只读打开模式返回到恢复模式,首先必须要管理数据库:
2 SQL>STARTUP NOMOUNT;
3 SQL>ALTER DATABASE MOUNT STANDBY DATABASE;
4 SQL>RECOVER MANAGED STANDBY DATABASE;
步骤四:激活备用数据库
激活备用数据库时需重新设置联机重做日志(该过程类似于RESETLOGS选项打开数据库),同时来自数据库的日志文件不再应用于备用数据库。在激活备用数据库之前需停止备用数据库的恢复进程:
然后激活备用数据库:
2 SQL>SHUTDOWN;
3 SQL>STARTUP;
此时在D:\oracle\STANDBY\ARCHIVE创建STANDBY数据库联机重做日志文件,控制文件成为主控制文件。强烈建议再激活数据库立即进行:
- 备份新的主数据库;
- 创建一个新的备用数据库。