源库 db_name=primary sid=primary
复制库standby db_name=standby sid= standby
1:首先为standby库添加静态注册信息
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER = --这是静态注册,这样rman客户端才能连接到nomount状态的实例
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = standby)
(ORACLE_HOME = /u01/app/oracle/product/11g)
(SID_NAME = standby)
)
)
LISTENER = --这是动态注册监听信息 也是netca图形界面下创建出来的监听
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
2:为standby库创建一个密码文件和adump和其他目录否则复制的时候会报错哦
[oracle@standby dbs]$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=redhat entries=10
[oracle@standby admin]$ mkdir -p $ORACLE_BASE/admin/primary/adump
[oracle@standby admin]$ mkdir -p $ORACLE_BASE/diag/rdbms/primary/primary
[oracle@standby admin]$ mkdir -p $ORACLE_BASE/fast_recovery_area/primary
3:为standby实例建立一个初始化参数文件用于standby实例启动到nomount
[oracle@standby dbs]$ echo DB_NAME='standby' > initstandby.ora
4: 备份primary库
backup database plus archivelog delete input format='/u01/app/oracle/backup/dd_%U';
5:将备份的文件拷贝到standby里
[oracle@standby backup]$ scp oracle@primary:/u01/app/oracle/backup/* /u01/app/oracle
[oracle@standby backup]$ scp oracle@primary:/u01/app/oracle/fast_recovery_area/PRIMARY/backupset/2013_11_24/* /u01/app/oracle
6:启动standby实例到 nomount状态
[oracle@standby dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sun Nov 24 11:30:13 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount pfile='/u01/app/oracle/product/11g/dbs/initstandby.ora';
ORACLE instance started.
Total System Global Area 263090176 bytes
Fixed Size 2252256 bytes
Variable Size 205521440 bytes
Database Buffers 50331648 bytes
Redo Buffers 4984832 bytes
7:rman客户端连接到standby(only auxiliary) 执行脚本
[oracle@primary primary]$ rman auxiliary sys/redhat@standby
run
{
allocate auxiliary channel dup type disk;
SET NEWNAME FOR DATABASE TO '/oradata/standby%U'; --db_name被修改为standby了
SET NEWNAME FOR DATAFILE 1 TO '/u01/app/oracle/oradata/standby/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/u01/app/oracle/oradata/standby/sysaux01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/u01/app/oracle/oradata/standby/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/u01/app/oracle/oradata/standby/users01.dbf';
SET NEWNAME FOR TEMPFILE 1 TO '/u01/app/oracle/oradata/standby/temp01.dbf';
duplicate database to 'standby' spfile backup location '/u01/app/oracle/backup' nofilenamecheck --因为只连了auxiliary所以要指定backup location
logfile
GROUP 1 ('/u01/app/oracle/oradata/standby/redo01.log') size 50m,
GROUP 2 ('/u01/app/oracle/oradata/standby/redo02.log') size 50m,
GROUP 3 ('/u01/app/oracle/oradata/standby/redo03.log') size 50m;
}
8:rman客户端连接到target auxiliary (from active database) 执行脚本
[oracle@primary primary]$ rman target sys/redhat@primary auxiliary sys/redhat@standby
run
{
SET NEWNAME FOR DATABASE TO '/oradata/standby%U'; --db_name被修改为standby了
SET NEWNAME FOR DATAFILE 1 TO '/u01/app/oracle/oradata/standby/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/u01/app/oracle/oradata/standby/sysaux01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/u01/app/oracle/oradata/standby/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/u01/app/oracle/oradata/standby/users01.dbf';
SET NEWNAME FOR TEMPFILE 1 TO '/u01/app/oracle/oradata/standby/temp01.dbf';
duplicate database to 'standby' from active database spfile nofilenamecheck --因为直接从活动的数据库里复制需要加上 from active database
--skip tablespace tablespace_name --可以跳过复制某个表空间
logfile
GROUP 1 ('/u01/app/oracle/oradata/standby/redo01.log') size 50m,
GROUP 2 ('/u01/app/oracle/oradata/standby/redo02.log') size 50m,
GROUP 3 ('/u01/app/oracle/oradata/standby/redo03.log') size 50m;
}
脚本执行完毕之后OK了。如果报错就根据错误具体解决!
最后查询2个库的dbid 是不一样的,和手动复制有点不一样。
SQL> select dbid ,name from v$database;
DBID NAME
---------- ---------
1669545047 PRIMARY
SQL> select dbid ,name from v$database;
DBID NAME
---------- ---------
1644075315 STANDBY
所有的步骤官方网有帮助文档不明白的jump过去查