这里是采用了rman来复制standby数据库,发现rman的确非常方便。
1. 准备主库 db
创建密码文件
orapwd file=orapwdbs101 entries=4 password=pass
准备参数文件
-
DB_NAME=dbs101 #数据库名,主从数据库是用同一个数据库名
-
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
-
DB_UNIQUE_NAME=dbs101 #每个数据库一个唯一的名字。
-
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbs101,stdby)' #主从库唯一数据库名的映射
-
CONTROL_FILES='/u02/oradata/dbs101/control1.ctl','/u02/oradata/dbs101/control2.ctl','/u02/oradata/dbs101/control3.ctl'
-
LOG_ARCHIVE_DEST_1='LOCATION=/u02/oradata/dbs101/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbs101'
-
LOG_ARCHIVE_DEST_2='SERVICE=stdby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stdby'
-
#SERVICE:网络服务名,在tnsnames.ora中定义。
-
LOG_ARCHIVE_DEST_STATE_1=ENABLE
-
LOG_ARCHIVE_DEST_STATE_2=ENABLE
-
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
-
LOG_ARCHIVE_MAX_PROCESSES=30
-
DB_FILE_NAME_CONVERT=('/u02/oradata/dbs101/','/u02/oradata/dbs101/') #主从数据库之间的数据文件名的转换关系
-
LOG_FILE_NAME_CONVERT=('/u02/oradata/dbs101/','/u02/oradata/dbs101/') #主从数据库之间的日志文件名的转换关系
-
STANDBY_FILE_MANAGEMENT=AUTO #当增加或删除主库文件时,丛库也做相应的操作。
-
FAL_SERVER=stdby #当数据库为从库时,主数据的网络服务名
-
FAL_CLIENT=dbs101 #当数据库为从库时,从数据的网络服务名
创建tnsnames.ora
stdby和dbs101
启动archivelog
-
startup mount pfile=initdbs101.ora;
-
alter database archivelog;
-
alter database open;
切换日志
alter system switch logfile;
强制database logging
alter database force logging;
select force_logging from v$database;
创建standby log
在最大的保护或者最大的可用模式下,standby log是必须的。LGWR ASYNC传输模式是推荐的。DATA
GUARD可以从standby log文件中恢复,而不是从归档日志文件。
-
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u02/oradata/dbs101/stadby_redo04.log') SIZE 50M;
-
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u02/oradata/dbs101/stadby_redo05.log') SIZE 50M;
-
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u02/oradata/dbs101/stadby_redo06.log') SIZE 50M;
-
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u02/oradata/dbs101/stadby_redo07.log') SIZE 50M;
2. 准备从库 db
在主库上:
rman target /
为standby库备份控制文件
backup current controlfile for standby format '/u02/backup/standbycontrol.ctl';
为standby库备份数据库
-
run
-
{
-
allocate channel c2 device type disk format '/u02/backup/%u';
-
backup database plus archivelog;
-
}
准备stadnby库准备init文件
-
DB_NAME=stdby
-
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
-
DB_UNIQUE_NAME=dbs101
-
LOG_ARCHIVE_CONFIG='DG_CONFIG=(stdby,dbs101)'
-
CONTROL_FILES='/u02/oradata/dbs101/control1.ctl','/u02/oradata/dbs101/control2.ctl','/u02/oradata/dbs101/control3.ctl'
-
LOG_ARCHIVE_DEST_1='LOCATION=/u02/oradata/dbs101/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dbstdby'
-
LOG_ARCHIVE_DEST_2='SERVICE=dbs101 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbs101'
-
LOG_ARCHIVE_DEST_STATE_1=ENABLE
-
LOG_ARCHIVE_DEST_STATE_2=ENABLE
-
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
-
LOG_ARCHIVE_MAX_PROCESSES=30
-
DB_FILE_NAME_CONVERT=('/u02/oradata/dbs101/','/u02/oradata/dbs101/')
-
LOG_FILE_NAME_CONVERT=('/u02/oradata/dbs101/','/u02/oradata/dbs101/')
-
STANDBY_FILE_MANAGEMENT=AUTO
-
FAL_SERVER=dbs101
-
FAL_CLIENT=stdby
拷贝standby的控制文件,数据库备份和init.ora到丛库。
scp /u02/backup/*.* 10.10.10.60:/u02/backup
在从库上:
创建密码文件
orapwd file=orapwstdby password=pass entries=4
创建相关的路径
bdump
udump
cdump
adump
arch
启动数据库到nomount状态:
-
SQL> startup nomount pfile='/u02/backup/initstdby.ora';
-
ORACLE instance started.
-
-
Total System Global Area 1224736768 bytes
-
Fixed Size 2083560 bytes
-
Variable Size 318768408 bytes
-
Database Buffers 889192448 bytes
-
Redo Buffers 14692352 bytes
创建spfile
-
SQL> create spfile from pfile='/u02/backup/initstdby.ora';
-
-
File created.
-
-
SQL> shutdown immediate
-
ORA-01507: database not mounted
-
-
-
ORACLE instance shut down.
-
-
以nomount状态启动:
-
SQL> startup nomount
-
ORACLE instance started.
-
-
Total System Global Area 1224736768 bytes
-
Fixed Size 2083560 bytes
-
Variable Size 318768408 bytes
-
Database Buffers 889192448 bytes
-
Redo Buffers 14692352 bytes
在主库上:
用RMAN复制standby数据库
rman target / auxiliary sys@stdby
如果复制的数据库文件的目录和源数据库一致,需要加NOFILENAMECHECK选项。
duplicate target database for standby dorecover NOFILENAMECHECK;
查看主库的日志序列号,并切换主库日志。
select max(sequence#) from v$archived_log;
select name,open_mode,log_mode from v$database;
select recovery_mode from v$archive_dest_status;
select max(sequence#) from v$log_history;
在丛库:
准备接受主库的日志文件:
alter database recover managed standby database disconnect from session;
验证从库的日志序列号:
select max(sequence#) from v$archived_log;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25105315/viewspace-697224/
,如需转载,请注明出处,否则将追究法律责任。