Oracle 10g数据卫士是一个强大的确保企业数据高可用、数据保护和灾难恢复的工具,我已经使用网格控制台和SQL命令在数据卫士/后备数据库上工作好几年了,我最近的经历是半年前为一个实验室信息管理系统(LIMS)利用数据卫士手动创建物理后备数据库,我每天都要维护它,它工作得很好,我想在这里与其他DBA分享我的经验。
在这个例子中数据库的版本是10.2.0.3,主备数据库位于不同机器上,主数据库叫做PRIM,后备数据库叫做STAN,我使用了闪存恢复区和OMF。
一、在你开始之前:
1、 确保主备数据库的操作系统和平台架构是相同的。
2、 在后备服务器上只安装Oracle数据库软件,不要例子数据库,如果需要补丁请应用,确保主备数据库的版本一致,Oracle home也要相同。
3、 在放入生产环境之前,在测试环境中先测试一下后备数据库的创建。
二、在主数据库上:
1、启用主数据库的强制日志记录:
SQL> ALTER DATABASE FORCE LOGGING;
2、如果没有密码文件,先要创建它:
2.1)检查密码文件是否存在:
SQL> select * from v$pwfile_users;
2.2)如果不存在,就创建一个。
在windwos平台上:
$cd %ORACLE_HOME%database
$orapwd file=pwdPRIM.ora password=xxxxxxxx force=y
(注意:用sys用户的密码替换这里的xxxxxxxx)
在Unix平台上:
$Cd $ORACLE_HOME/dbs
$Orapwd file=pwdPRIM.ora password=xxxxxxxx force=y
(注意:用sys用户的密码替换这里的xxxxxxxx)
3、配置备用重做日志
3.1)备用重做日志文件的大小应与当前主数据库在线重做日志文件大小匹配,使用下面的命令找出在线重做日志文件的大小:
SQL> select bytes from v$log;
BYTES
----------
52428800
52428800
52428800
3.2)使用下面的命令确定你当前的日志文件组:
SQL> select group#, member from v$logfile;
3.3)创建备用重做日志文件组
我的主数据库原来有3个重做日志文件组,使用下面的命令创建3个备用重做日志文件组:
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 SIZE 50M;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 SIZE 50M;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 SIZE 50M;
3.4)使用下面的命令检查日志组创建是否成功:
SQL>select * from v$standby_log;
4、 在主数据库上启用归档
如果你的主数据库没有工作在归档日志模式,请开启为归档日志模式:
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
5、 设置主数据库初始化参数
从服务器参数文件(spfile)创建一个文本初始化参数文件(pfile),添加新的主角色参数:
5.1)从spfile创建pfile在Windows平台上:
SQL>create pfile=’databasepfilePRIM.ora’ from spfile;
(注意:用你的Oracle home路径替换‘’中的内容)
在Unix平台上:
SQL>create pfile=’/dbs/pfilePRIM.ora’ from spfile;
(注意:用你的Oracle home路径替换‘’中的内容)
5.2)编辑pfilePRIM.ora文件,添加主备角色参数:(这里的路径来自Windows系统,Unix系统做响应的修改)
db_name=PRIM
db_unique_name=PRIM
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIM,STAN)'
LOG_ARCHIVE_DEST_1=
'LOCATION=F:Oracleflash_recovery_areaPRIMARCHIVELOG
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=PRIM'
LOG_ARCHIVE_DEST_2=
'SERVICE=STAN LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=STAN'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
remote_login_passwordfile='EXCLUSIVE'
FAL_SERVER=STAN
FAL_CLIENT=PRIM
STANDBY_FILE_MANAGEMENT=AUTO
# Specify the location of the standby DB datafiles followed by the primary location;
DB_FILE_NAME_CONVERT='E:oracleproduct10.2.0oradataSTANDATAFILE','
E:oracleproduct10.2.0oradataPRIMDATAFILE'
# Specify the location of the standby DB online redo log files followed
by the primary location LOG_FLE_NAME_CONVERT=’
E:oracleproduct10.2.0oradataSTANONLINELOG’,’
E:oracleproduct10.2.0oradataPRIMONLINELOG’,’
F:Oracleflash_recovery_areaSTANONLINELOG’,’
F:Oracleflash_recovery_areaPRIMONLINELOG’
6、 从pfile创建spfile,然后使用新的spfile重启主数据库
数据卫士必须使用spfile,创建spfile然后重启数据库:
在Windows平台上:
SQL> shutdown immediate;
SQL> startup nomount pfile=’databasepfilePRIM.ora’;
SQL>create spfile from pfile=’databasepfilePRIM.ora’;
--使用新创建的spfile启动主数据库
SQL>shutdown immediate;
SQL>Startup;
(注意:用你的Oracle home路径替换‘’中的内容)
在Unix平台上:
SQL> shutdown immediate;
SQL> startup nomount pfile=’/dbs/pfilePRIM.ora’;
SQL>create spfile from pfile=’/dbs/pfilePRIM.ora’;
--使用新创建的spfile启动主数据库
SQL>shutdown immediate;
SQL>Startup;
(注意:用你的Oracle home路径替换‘’中的内容)
三、在后备数据库上:
1、在后备数据库上创建主数据库数据文件的拷贝
在主数据库上:
SQL>shutdown immediate;
在后备数据库上(此时主数据库已经停掉):
1.1) 创建存放数据文件的目录,例如:在Windows上,E:oracleproduct10.2.0oradataSTANDATAFILE,在Unix上做对应的修改。
1.2) 拷贝数据文件和临时文件。
1.3) 为在线日志创建目录(多个),例如:在Windows上,E:oracleproduct10.2.0oradataSTANONLINELOG和F:Oracleflash_recovery_areaSTANONLINELOG,在Unix上做对应的修改。
1.4) 拷贝在线日志。
2、为后备数据库创建控制文件
在主数据库上为后备数据库创建控制文件:
SQL>startup mount;
SQL>alter database create standby controlfile as ‘STAN.ctl;
SQL>ALTER DATABASE OPEN;
3、拷贝主数据库pfile文件到后备服务器,并重命名/编辑它
3.1)从主服务器拷贝pfilePRIM.ora文件到后备服务器,Windows平台就拷贝到Oracle home目录下的database文件夹,Unix平台就拷贝到Oracle home目录下的dbs目录。
3.2)将其重命名为pfileSTAN.ora,并做如下修改:(这里的路径来Windows平台,对于Unix平台请做相应修改)
*.audit_file_dest='E:oracleproduct10.2.0adminSTANadump'
*.background_dump_dest='E:oracleproduct10.2.0adminSTANbdump'
*.core_dump_dest='E:oracleproduct10.2.0adminSTANcdump'
*.user_dump_dest='E:oracleproduct10.2.0adminSTANudump'
*.compatible='10.2.0.3.0'
control_files='E:ORACLEPRODUCT10.2.0ORADATASTANCONTROLFILESTAN.CTL','
F:ORACLEFLASH_RECOVERY_AREASTANCONTROLFILESTAN.CTL'
db_name='PRIM'
db_unique_name=STAN
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(PRIM,STAN)’
LOG_ARCHIVE_DEST_1=
‘LOCATION=F:Oracleflash_recovery_areaSTANARCHIVELOG
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=STAN’
LOG_ARCHIVE_DEST_2=
‘SERVICE=PRIM LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=PRIM’
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=PRIM
FAL_CLIENT=STAN
remote_login_passwordfile='EXCLUSIVE'
# Specify the location of the primary DB datafiles followed by the standby location
DB_FILE_NAME_CONVERT=’E:oracleproduct10.2.0oradataPRIMDATAFILE’,’
E:oracleproduct10.2.0oradataSTANDATAFILE’
# Specify the location of the primary DB online redo log files followed
by the standby location
LOG_FILE_NAME_CONVERT=’E:oracleproduct10.2.0oradataPRIMONLINELOG’,’
E:oracleproduct10.2.0oradataSTANONLINELOG’,’
F:Oracleflash_recovery_areaPRIMONLINELOG’,’
F:Oracleflash_recovery_areaSTANONLINELOG’
STANDBY_FILE_MANAGEMENT=AUTO
(注意:这里并没有列出所有的参数条目)
4、在后备服务器上,为转储和日志归档目的地创建对应的目录:
创建目录adump,bdump,cdump,udump,并为归档日志目的地创建目录。
5、从主服务器拷贝后备控制文件STAN.ctl到后备目的地。
6、拷贝主密码文件到后备服务器,并重命名为pwdSTAN.ora。
在Windows平台上拷贝到database文件夹,在Unix平台上拷贝到/dbs目录,然后重命名这个密码文件。
7、 在Windows上创建一个服务(可选的):
$oradim –NEW –SID STAN –STARTMODE manual
8、 配置主备数据库的监听器
8.1)在主系统上:使用Oracle Net Manager创建监听器PRIM和STAN,然后重启监听
$lsnrctl stop
$lsnrctl start
8.2)在后备服务器上:使用Net Manager创建监听器PRIM和STAN,然后重启监听
$lsnrctl stop
$lsnrctl start
9、 创建Oracle网络服务名
9.1)在主系统上:使用Oracle Net Manager创建网络服务名PRIM和STAN,用tnsping检查这两个服务
$tnsping PRIM
$tnsping STAN
10、 在后备服务器上,设置环境变量ORACLE_HOME和ORACLE_SID。
11、 启动后备数据库到nomount状态,产生一个spfile文件。
在Windows平台:
SQL>startup nomount pfile=’databasepfileSTAN.ora’;
SQL>create spfile from pfile=’databasepfileSTAN.ora’;
使用新创建的spfile重新启动后备数据库:
SQL>shutdown immediate;
SQL>startup mount;
在Unix平台:
SQL>startup nomount pfile=’/dbs/pfileSTAN.ora’;
SQL>create spfile from pfile=’/dbs/pfileSTAN.ora’;
使用新创建的spfile重新启动后备数据库:
SQL>shutdown immediate;
SQL>startup mount;
(注意:请用你自己的ORACLE home目录替换‘’中的内容)
12、 开始应用重做日志
12.1在后备数据库上,启动重做日志应用:
SQL>alter database recover managed standby database disconnect from session;
如果你永远都不需要停止日志应用服务:
SQL> alter database recover managed standby database cancel;
13、 校验后备数据库运转是否正常
13.1在后备数据库上执行一个查询:
SQL>select sequence#, first_time, next_time from v$archived_log;
13.2在主数据库上,强制切换日志:
SQL>alter system switch logfile;
13.3在后备数据库上,校验被应用的归档重做日志文件:
SQL>select sequence#, applied from v$archived_log order by sequence#;
14、 如果你不想等待归档当前重做日志文件就应用重做数据,需要启用实时应用:SQL> alter database recover managed standby database using current logfile disconnect;
15、 要创建多个后备数据库,重复这些步骤即可。
四、维护
1、经常检查主/备数据库的警告日志,监视数据卫士环境中的数据操作。
2、清除主/备数据库上的归档日志。
我每周会对整个主数据库进行热备份,并备份归档日志,然后删除主服务器上的归档日志。
在后备数据库上,我每周运行RMAN执行备份和删除归档日志。
$rman target /@STAN;
Rman>backup archivelog all delete input;
3、密码管理。
每个系统上的sys用户的密码必须一致,以便参考二.2中步骤2更新或重新创建passwd文件。