首页 > 数据库 > Oracle > oracle DG案例测试
测试环境:
OS:HPUNIX 11.11
Primary:
IP:10.134.196.123
SID:orapri
Hostname:MPEDB
DB_UNIQUE_NAME:orapri
DBNAME=oradata
Database:10.2.0.5(64)
OS:HPUNIX 11.11
Primary:
IP:10.134.196.124
SID:orapri
Hostname:MSEDB
DB_UNIQUE_NAME:orastd
DBNAME=oradata
Database:10.2.0.5(64)
实施DG前的准备工作
装好备库数据库
建实例:(windows)
oradim -new -sid 实例名
linux 直接export=实例名就OK
开启数据库logging及数据库archivelog
开启数据库logging
select FORCE_LOGGING from v$database;
SQL> alter database force logging;
检查数据库是否开启archivelog
SQL> archive log list;
如果数据库未开启archivelog,则要开启archivelog
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
检查数据库是否开启archivelog
SQL> archive log list;
standby端:
export ORACLE_SID=orapri
修改或新增listener.ora 和tnsnames.ora(或者用GUI工具配置)
注意:listener.ora 中新增的部分在括号内而非括号外
primary端:
listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle/production/10.2)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = orapri)
(ORACLE_HOME = /u01/oracle/production/10.2)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.123)(PORT = 1521))
)
tnsnames.ora
orapri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
orastd =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.124)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orastd)
)
)
standby端:
listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle/production/10.2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orapri)
(ORACLE_HOME = /u01/oracle/production/10.2)
(SID_NAME = orapri)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MSEDB)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
tnsnames.ora
orapri =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
orastd =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.196.124)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orapri)
)
)
具体实施DG的步骤:
在primary端修改相应参数
primary端:
Oracle$sqlplus / as sysdba
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT='AUTO' scope=both;
ALTER SYSTEM SET fal_server='orastd(網絡服務名)' scope=both;
ALTER SYSTEM SET fal_client='orapri(網絡服務名)' scope=both;
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orapri,orastd(是指數據庫的DB_UNIQUE_NAME))' scope=both;
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/data1/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orapri' scope=both;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orastd(網絡服務名) LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orastd' scope=both;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1='ENABLE' scope=both;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='ENABLE' scope=both;
#ALTER SYSTEM SET standby_archive_dest='/data1/stdlog' scope=both;(11g不需要)
在primary上生成pfile,并修改添加相应参数,生成standby需要的pfile
primary端:
oracle$>sqlplus / as sysdba
SQL> CREATE PFILE='/export/home/oracle/standby.ora' FROM SPFILE;
將生成的pfile拷贝到standby端
scp /u01/oracle/production/10.2/dbs/file.ora oracle@10.134.196.124:/u01/oracle/production/10.2/dbs/file.ora
對照编辑生成的pfile文件('/export/home/oracle/standby.ora'),更改添加如下参数:
*.db_unique_name='orastd'
*.fal_server='orapri'
*.fal_client='orastd'
*.log_archive_config='DG_CONFIG=(orapri,orastd)'
*.log_archive_dest_1='LOCATION=/data1/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orastd'
*.log_archive_dest_2='SERVICE=orapri LGWR ASYNC=40960 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orapri'
*.LOG_ARCHIVE_DEST_STATE_1='ENABLE'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.standby_archive_dest='/data1/archstd' (備幾端路徑)
*.standby_file_management='AUTO'
创建pfile中相应目录(根据具体情况,primary和standby端要一致)
創建數據文件需要的相應目錄(在主機數據庫中查看dba_data_files)
主機備份控制文件成standby類型,備份完copy到備機器
alter database create standby controlfile as '/data1/rmanbk/control01.ctl' reuse;
在primary端用命令创建数据库密码文件,并接拷贝至standby端相同路径下(如已存在,可直接拷贝)
primary端手工创建数据库密码文件
orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=system entries=10 force=y
primary端拷贝数据库密码文件至standby端
scp $ORACLE_HOME/dbs/orapw$ORACLE_SID oracle@10.134.196.124:$ORACLE_HOME/dbs
在standby端使用pfile启动实例
oradim -new -sid orapri----windows上執行
export ORACLE_SID=orapri--linux執行
sqlplus / as sysdba或sqlplus sys/Foxconn99 as sysdba
sqlplus / as sysdba
startup nomount pfile='$ORACLE_HOME/dbs/file.ora';
CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/file.ora';
在primary端开始使用rman备份数据库
primary端:
rman target /
backup full format='/data1/rmanbk/ora10g_%d_%T_%s' database include current controlfile for standby plus archivelog format='/data1/rmanbk/arch_%d_%T_%s';
备份完毕后,把相应备份文件拷贝到丛库的相应目录(目录必须一致)
scp /data1/rmanbk/* oracle@10.134.196.124:/data1/rmanbk/
还原standby数据库
primary端:
rman target / auxiliary sys/system@orastd
duplicate target database for standby nofilenamecheck dorecover;(此法一般不用)
catalog start with '備份文件': #註冊備份(一般用這個)
restore database;
(這一步一般不做)
//**********
收尾工作及开启dg
standby端建立standby log(至少比redo多一组):
sqlplus / as sysdba
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/data1/stdlog/stdredo01.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/data1/stdlog/stdredo02.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/data1/stdlog/stdredo03.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/data1/stdlog/stdredo04.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 8 ('/data1/stdlog/stdredo05.log') size 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 9 ('/data1/stdlog/stdredo06.log') size 50M;
***************//
(備庫應處於mount狀態)
开启服务(standby端):
SQL> alter database recover managed standby database disconnect from session;
關閉服务(standby端):
SQL> alter database recover managed standby database cancel;
测试服务是否正常
standby端(看归档日志号):
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
primary端(强制一个日志切换):
SQL> alter system switch logfile;
standby端(看归档日志号):
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
standby端(看应用归档日志的号):
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
查看數據庫角色:
select database_role from v$database;
查錯:select status,target,archiver,error,process from v$archive_dest;
实现primary、standby的切换:
primary端:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
primary端(上一步的结果必须是”TO STANDBY”才可以)
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
OR(上一步结果为”SESSIONS ACTIVE”,且解决不掉)
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
Primary端:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
standby端:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
standby端(上一步的结果必须是”TO STANDBY”才可以):
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
OR(上一步结果为”SESSIONS ACTIVE”,且解决不掉)
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
打开新的primary:
SQL>ALTER DATABASE OPEN;
OR(最后一次启动后以read only模式打开过)
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
在新standby上重新启动log apply services(如果必要):
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
OR(后台模式)
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
OR(实时应用redo)
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;
新primary端(开始发送redo 数据到新standby端):
SQL> ALTER SYSTEM SWITCH LOGFILE;
DG不能正常传archivelog 可能的原因及解决办法:
1,服务没开,重启服务;
2,主库密码变更,重新将主库密码文件copy到备库,重启备库;
3,监听问题
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69978530/viewspace-2849452/ ,如需转载,请注明出处,否则将追究法律责任。