此次测试仍然使用两台服务器不同的目录结构来做。
TRGT 10-10-10-72 orcl
STANDBY 10-10-10-73 standby1 需要先把原来手工创建的备库给删除掉
CATDB 10-10-10-72 millet
在millet库上添加rman用户,并在主库和备库上同时添加catdb服务名连接millet数据库,
$ rman target sys/oracle@orcl catalog rman/cat@catdb
并对72.orcl做一个备份,备份集也放在/ww/目录下
RMAN> run {
2> backup incremental
3> level=0
4> format '/ww/full_%d_%p_%t_%s'
5> tag '72orcl_full'
6> database plus archivelog;
7> }
[@more@]目标库上的数据文件目录 /opt/oracle/oradata/orcl/
备库上的数据文件目录 /opt/oracle/oradata/standby1/
备库上control_files位置
/opt/oracle/oradata/standby1/control01.ctl,
/opt/oracle/oradata/standby1/control02.ctl,
/opt/oracle/oradata/standby1/control03.ctl
不能使用RMAN来完成的内容
1 设置主库的初始化参数
2 创建备库初始化参数,并修改个别参数
3 配置主备库通信的TNSNAMES
4 启动备库不加载控制文件
回忆原来的手工创建备库的过程
1 确认主库上的tnsnames,可以连通备库 名称standby1
备库也可以连通主库 名称 orcl
2 确认主库上的force logging 已启用YES;确认在归档模式下,确认归档启动
SQL> select force_logging from v$database;
3 确认主库上的数据文件(为COPY 数据文件准备)
select file#,name from v$database;
4 使用操作系统的CP复制数据文件到主库的一个临时目录;
5 从主库创建备库用的控制文件,必须在备份数据文件之后
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS
2> '/opt/oracle/oradata/standby1.ctl';
6 从主库创建备库用的初始化参数文件
SQL> CREATE PFILE='/opt/oracle/oradata/initstandby1.ora' from spfile;
7 将4-5-6三步准备的文件复制到备库服务器上
8 设置备库上的参数文件,要修改的地方包括以下内容
db_name='orcl'
control_files='/opt/oracle/oradata/standby1/control01.ctl','/opt/oracle/oradata/st
andby1/control02.ctl','/opt/oracle/oradata/standby1/control03.ctl'
standby_archive_dest='/ww/arch1'
db_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'
log_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'
remote_archive_enable='true'
log_archive_dest_1='LOCATION=/ww/arch2'
standby_file_management='auto'
instance_name='standby1'
9 如果是WINDOWS环境,需要添加windows service
oradim -new -sid standby1 -startmode manual
10 在主库和备库修改listener.ora 添加SID list 静态注册
11 设置备库上的sqlnet.ora文件,启用断连接检测,添加
$ more $ORACLE_HOME/network/admin/sqlnet.ora
sqlnet.expire_time=2
12 创建服务名,在主库和备库上都要同样添加两个连接名 orcl standby1
13 在备库上创建SPFILE from pfile
14 启动备库到nomount,然后mount standby database
sql> startup nomount;
sql> alter database mount standby database;
15 在备库上初始化日志应用服务
sql> alter database recover managed standby database disconnect from session;
16 在主库启用归档到备库上(前提条件是在参数文件中设置了dest_2='service=...')
sql> alter system archive log current;
中间遇到不少问题,比如控制文件中的最大日志数、主机不能归档到备机上(服务不通)、备机上能收日志但不能APP,也是因为最大日志数的限定;具体参见《9iDG学习笔记.doc》
-----------------------------------------------------------------------------------------------------------------
这里使用RMAN,因此从创建控制文件开始
确认主库上的初始化参数
*.db_name='orcl'
*.instance_name='orcl'
*.log_archive_dest_1='LOCATION=/ww/arch'
*.log_archive_dest_2='service=standby1'
确认备库上的初始化参数文件
*.db_name='orcl'
*.instance_name='standby1'
*.db_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'
*.log_file_name_convert='/opt/oracle/oradata/orcl/','/opt/oracle/oradata/standby1/'
*.remote_archive_enable='true'
*.log_archive_dest_1='LOCATION=/ww/arch2'
*.standby_archive_dest='/ww/arch1'
*.standby_file_management='auto'
*.star_transformation_enabled='FALSE'
0 删除原有的数据文件和控制文件
1 使用rman备份主库的控制文件给备库用(有三种备份方法)
方法1 backup
backup current controlfile for standby;
sql 'alter system archive log current'; # so backup is consistent and recoverable
backup archivelog all not backed up 1 times;
或者
backup database
include current controlfile for standby
plus archivelog;
如果不带plus archivelog,那么备份完后要做一个当前日志的归档
sql 'alter system archive log current';
此处忘记做导致duplicate 时出现 RMAN-05507 错误
方法2 copy
copy current controlfile for standby to '/tmp/sby_control01.ctl';
方法3 将已备份的控制文件catalog ,如:
sql> alter database create standby controlfile as '/tmp/sby_control01.ctl';
% rman target sys/oracle@trgt catalog rman/cat@catdb
catalog controlfilecopy '/tmp/sby_control01.ctl';
这里我使用第三种方法,过程如下:
$ sqlplus system/oracle@orcl
alter database create standby controlfile as '/ww/standby1.ctl'
$ rman target sys/oracle@orcl catalog rman/cat@catdb
catalog controlfilecopy '/ww/standby1.ctl' ;
2 对备库上的控制文件做一个镜像
RMAN> copy controlfilecopy '/ww/standby1.ctl' to '/ww/standby2.ctl';
3 使用RMAN时,重命名数据文件
因为数据文件结构相同,所以使用了初始化参数DB_FILE_NAME_CONVERT ,不需要显式地进行重命名。
因为主库上的数据文件与备库上的数据文件名称相同,所以在duplicate时,要加上NOFILENAMECHECK option
附db_file_name_convert参数的使用说明
DB_FILE_NAME_CONVERT = ('oldstring1', 'newstring1', 'oldstring2', 'newstring2', ...)For example, DB_FILE_NAME_CONVERT = ('/dbs/t1/', '/dbs/t1/s_', '/dbs/t2/', '/dbs/t2/s_')
4 使用RMAN时,重命名在线日志文件
此处也使用LOG_FILE_NAME_CONVERT 参数
5 使用rman进行数据文件的复制,备库的创建(两种方式 带恢复和不带恢复)
5.1start the standby instance
SQL> conn sys/change_on_install@standby1 as sysdba
Connected to an idle instance.
SQL> startup nomount
检查主库与CATDB,是否启动,没有启动,启之
在主机和备机都要能连通standby1服务
/ww/standby2.ctl 文件要FTP到73库上
使用 rman 登录备库
% rman TARGET / AUXILIARY SYS/sys_pwd@sbdb1
rman target sys/oracle@orcl auxiliary sys/change_on_install@standby1
run {
duplicate target database for standby
nofilenamecheck
dorecover;
}
遭遇RMAN-05507 错误
原因是备份控制文件后没有归档当前日志
解决方法,去TRGT 库archive log current;
然后成功。
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
主库上切日志,到备库上检查结果
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG
2 ORDER BY SEQUENCE#;
SEQUENCE# APP
---------- ---
39 YES
40 YES
41 YES
OK 一切顺利!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/271063/viewspace-1016395/ ,如需转载,请注明出处,否则将追究法律责任。