一:注意事项
1:
目录不同
db_file_name_convert=('/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/oradu/')
log_file_name_convert=('/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/oradu/')
必须设置
2:
创建密码文件,必须保持target DB和auxiliary DB的密码一致。这里我直接对target DB密码文件重命名使用
[root@oracledba dbs]# cp orapworcl orapworadu
3:
开始复制,复制时需要注意是否使用nofilenamecheck参数,如果两个实例相关数据目录结构完全相同,则需要指定,否则会报错。这里不需要使用。复制日志太多,有兴趣的可以看看,或者
跳过直接看结果!
[oracle@oracledba ~]$ export ORACLE_SID=oradu --------异机操作可省略此步操作
[oracle@oracledba ~]$rman target sys/oracle@orcl auxiliary sys/oracle@oradu
duplicate target database to oradu from active database;
如果目录相同:
duplicate target database to oradu from active database nofilenamecheck;
4:
alter database open read only;
5:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
6:特别注意:在修改主库参数时必须创建pfile
create pfile='/home/oracle/init.ora' from spfile;
二:ADG配置
1、确定数据库是否为归档模式
On primarydb:
select log_mode from v$database;
archive log list;
2、开启强制日志模式
On primarydb:
select FORCE_LOGGING from v$database;
ALTER DATABASE FORCE LOGGING;
3、验证是否有密码文件(HA备库也验证)
On primarydb:
cd $ORACLE_HOME/dbs
ls orap*
4、添加standby redo
On primarydb:
确认redo 大小和路径
set linesize 200
col member for a55
select a.group#,a.thread#,b.type,a.bytes/1024/1024 mb ,b.member from v$log a ,v$logfile b where a.group#=b.group#;
select a.group#,a.thread#,b.type,a.bytes/1024/1024 mb ,b.member from v$standby_log a ,v$logfile b where a.group#=b.group#;
alter database add standby logfile thread 1 group 11 '/oradata/PROD/redo11.log' size 1000M;
alter database add standby logfile thread 1 group 12 '/oradata/PROD/redo12.log' size 1000M;
alter database add standby logfile thread 1 group 13 '/oradata/PROD/redo13.log' size 1000M;
alter database add standby logfile thread 1 group 14 '/oradata/PROD/redo14.log' size 1000M;
alter database add standby logfile thread 1 group 15 '/oradata/PROD/redo15.log' size 1000M;
alter database add standby logfile thread 2 group 16 '/oradata/PROD/redo16.log' size 1000M;
alter database add standby logfile thread 2 group 17 '/oradata/PROD/redo17.log' size 1000M;
alter database add standby logfile thread 2 group 18 '/oradata/PROD/redo18.log' size 1000M;
alter database add standby logfile thread 2 group 19 '/oradata/PROD/redo19.log' size 1000M;
alter database add standby logfile thread 2 group 20 '/oradata/PROD/redo20.log' size 1000M;
/oradata/PROD/
5、修改主库参数
On primarydb:
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD,PRODDG)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+FRADG/PROD/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROD';
alter system set LOG_ARCHIVE_DEST_3='SERVICE=PRODDG LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRODDG';
alter system set fal_server='PRODDG';
alter system set standby_file_management=AUTO scope=both;
下列2个参数需要下次重启后生效
alter system set DB_FILE_NAME_CONVERT='/oradata/PROD/','+DATADG/PROD/data/' scope=spfile;
alter system set LOG_FILE_NAME_CONVERT='/oradata/PROD/','+DATADG/PROD/data/' scope=spfile;
7、创建备库静态监听文件
On Standbydb:
cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin
vi listener.ora
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST= 10.18.0.210)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=PRODDG)
(SID_NAME= PRODDG)
(ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_1)
)
)
8、启动备库监听
On Standbydb:
lsnrctl start
9、修改主、备库的TNSNAMES文件(主库另外一节点也要复制)
PROD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.0.83)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PROD)
)
)
PRODDG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.0.210)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PRODDG)
)
)
11、tnsping测试,确保都能通
主库:(主库另外一节点也要测试)
On Primarydb:
tnsping PROD
tnsping PRODDG
备库:
On Standbydb:
tnsping PROD
tnsping PRODDG
12、创建备库密码文件
从主库中scp 密码文件备库,sys密码不能有下划线
On Primarydb:
cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs
scp orapwPROD1 10.18.0.210:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwPRODDG
13、为备库创建初始化参数文件
On Primarydb:
create pfile= '/tmp/p.ora' from spfile;
scp /tmp/p.ora 10.18.0.210:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/
修改参数文件
On Standbydb:
cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs/
*.db_unique_name='PRODDG'
*.fal_server='PROD'
*.log_archive_dest_1='location=/arch/PROD VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRODDG'
*.log_archive_dest_3='service=PROD lgwr async noaffirm valid_for=(online_logfiles,primary_role) db_unique_name=PROD'
*.db_create_file_dest='/oradata'
*.db_file_name_convert='+DATADG/PROD/','/oradata/PROD/'
*.log_file_name_convert='+DATADG/PROD/','/oradata/PROD/'
*.control_files='/oradata/PROD/controlfile/ctrol01.ctl','/oradata/PROD/controlfile/ctrol02.ctl'
#*.cluster_database=true
#testdb2.thread=2
#testdb1.thread=1
#testdb1.instance_number=1
#testdb2.instance_number=2
#*.remote_listener='testcluster:1521'
*.undo_tablespace='UNDOTBS1'
#testdb2.undo_tablespace='UNDOTBS2'
检查文件目录权限
/oradata
/arch
chown -R oracle:oinstall /oradata
chown -R oracle:oinstall /arch
14、创建备库相应目录
On Standbydb:
su - oracle
mkdir -p /u01/app/oracle/admin/PROD/adump
mkdir -p /oradata/PROD/datafile
mkdir -p /oradata/PROD/tempfile
mkdir -p /oradata/PROD/onlinelog
mkdir -p /oradata/PROD/controlfile
mkdir -p /arch/PROD
15、为备库创建spfile
On Standbydb:
export ORACLE_SID=PRODDG
SQL> startup nomount pfile='/tmp/p.ora'
SQL> create spfile from pfile='/tmp/p.ora';
16、关闭重启
shutdown abort
startup nomount
SQL> show parameter name
SQL> show parameter log
17、连接至主数据库作为其目标数据库,以运行创建备用 ON STANDBY
On Primarydb:
sqlplus sys/oracle@PROD as sysdba
sqlplus sys/oracle@PRODDG as sysdba
On Standbydb:
sqlplus sys@PROD as sysdba
<<<
sqlplus sys@PRODDG as sysdba
<<<
18、配置dataguard备库
On Primarydb:
export ORACLE_SID=PROD1
sqlplus / as sysdba
show parameter name
exit
export ORACLE_SID=PROD1
rman target sys/oracle auxiliary sys/oracle@PRODDG nocatalog <
run {
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database;
}
exit
EOF
19、只读模式打开数据库
备库:
alter database open;
20、应用实时日志
备库:
alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database disconnect from session;
21 ,check
#on standby
select * from v$archive_gap;
select process,client_process,sequence#,status from v$managed_standby;
select database_role,protection_mode,protection_level,open_mode from v$database;
set linsize 200
col value for a20
col name for a30
col time for a30
col time_computed for a20
select to_char(SYSDATE,'yyyymmdd hh24:mi:ss') CTIME,NAME,VALUE,DATUM_TIME from V$DATAGUARD_STATS WHERE NAME LIKE '%lag';
shutdown immediate;
startup
recover managed standby database using current logfile disconnect from session;
#on primary
create table adg_tst (id int);
insert into adg_tst values(1);
commit;
alter system switch logfile;
alter system archive log current;
#on standby
select * from adg_tst;