ORACLE Data Guard 理论知识
请查看此blog :http://blog.csdn.net/haibusuanyun/article/details/11519241
Oracle Data Guard搭建步骤
1、主库设置归档模式
2、主库设置Force Logging模式
3、备库创建相应的dump文件夹
4、配置辅助实例参数文件
5、生成辅助实例密码文件
6、配置辅助实例监听
7、实施数据库克隆(辅助实例启动到nomount状态后)
8、启动日志传送
9、应用redo日志操作。
创建数据验证环境
primary>conn lottu/li0924 Connected. primary>create table tbl_lottu(id number,name varchar2(10)); Table created. primary>insert into tbl_lottu select level,'lottu'||level from dual connect by level <= 10; 10 rows created. primary>commit; Commit complete.
1、主库设置归档模式
SQL> set sqlprompt "primary>" primary>archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /home/oracle/oradata/arch Oldest online log sequence 73 Next log sequence to archive 75 Current log sequence 75
2、主库设置Force Logging模式
primary>select force_logging from v$database; FORCE_LOG --------- NO primary>alter database force logging; Database altered.
3、备库创建相应的dump文件夹
主库查询sql;看下是否需要补漏目录
elect name, value from v$parameter where name in ('audit_file_dest', 'background_dump_dest', 'control_files', 'core_dump_dest', 'user_dump_dest', 'db_recovery_file_dest' ) ORDER BY name ASC;
备库用oracle用户执行创建目录
mkdir -p /u01/app/admin/ora234/adump mkdir -p /u01/app/diag/rdbms/ora234/ora234/trace mkdir -p /u01/app/oradata/ora234 mkdir -p /u01/app/flash_recovery_area mkdir -p /u01/app/diag/rdbms/ora234/ora234/cdump mkdir -p /home/oracle/oradata/arch mkdir -p /home/oracle/oradata/ora234
4、配置辅助实例参数文件
4.1主库通过spfile生成pfile文件;
primary>create pfile from spfile;
4.2修改参数文件。
#主库添加部分
*.DB_UNIQUE_NAME=db_primary *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(db_primary,db_standby)' *.LOG_ARCHIVE_DEST_2='SERVICE=tns_standby ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=db_standby' *.LOG_ARCHIVE_DEST_STATE_2=DEFER *.FAL_SERVER=tns_standby *.FAL_CLIENT=tns_primary *.STANDBY_FILE_MANAGEMENT=AUTO
#备库添加部分
*.DB_UNIQUE_NAME=db_standby *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(db_primary,db_standby)' *.LOG_ARCHIVE_DEST_2='SERVICE=tns_primary ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=db_primary' *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.FAL_SERVER=tns_primary *.FAL_CLIENT=tns_standby *.STANDBY_FILE_MANAGEMENT=AUTO
4.3主备库以新建的参数文件启动
#主库
primary>shutdown immediate; primary>create spfile from pfile; primary>startup
#备库
standby>startup nomount
5、生成辅助实例密码文件
方法1: 直接从Primary数据库复制密钥文件过来
方法2: orapwd生成
若忘记密码;采用第二种方法生成
orapwd file='$ORACLE_HOME/dbs/oraora234.ora' password=oracle
6、配置辅助实例监听
6.1配置监听文件listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ********)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = db_primary) #/(GLOBAL_DBNAME = db_standby) (SID_NAME = ora234) (ORACLE_HOME =/u01/app/oracle) ) ) ADR_BASE_LISTENER = /u01/app
6.2配置文件tnsnames.ora
tns_primary = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ********)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = db_primary) ) ) tns_standby = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ********)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = db_standby) ) )
6.3 若开启了防火墙;须先打开1521数据库端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
6.4 验证是否配置成功
[oracle@localhost admin]$ tnsping tns_standby TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 15-FEB-2017 10:47:01 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ********)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = db_standby))) OK (10 msec) [oracle@localhost admin]$ tnsping tns_primary TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 15-FEB-2017 10:47:10 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ********)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = db_primary))) OK (0 msec)
7、实施数据库克隆(辅助实例启动到nomount状态后)
rman target sys/Oracle123__@tns_primary auxiliary sys/Oracle123__@tns_standby DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
操作日志如下:
[oracle@oracle234 ~]$ rman target sys/Oracle123__@tns_primary auxiliary sys/Oracle123__@tns_standby Recovery Manager: Release 11.2.0.3.0 - Production on Wed Feb 15 12:37:32 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORA234 (DBID=2038937181) connected to auxiliary database: ORA234 (not mounted) RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK; Starting Duplicate Db at 15-FEB-17 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=254 device type=DISK …… contents of Memory Script: { set until scn 960540; recover standby clone database delete archivelog ; } executing Memory Script executing command: SET until clause Starting recover at 15-FEB-17 using channel ORA_AUX_DISK_1 starting media recovery archived log for thread 1 with sequence 76 is already on disk as file /home/oracle/oradata/arch/1_76_935749853.dbf archived log file name=/home/oracle/oradata/arch/1_76_935749853.dbf thread=1 sequence=76 media recovery complete, elapsed time: 00:00:00 Finished recover at 15-FEB-17 Finished Duplicate Db at 15-FEB-17
8、启动日志传送
Primary> alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE; System altered.
9、应用/关闭redo日志操作。验证是否数据/日志同步
primary>conn lottu/li0924 Connected. primary>create table t as select level id from dual connect by level < 10; Table created. primary>alter system switch logfile; alter system switch logfile * ERROR at line 1: ORA-01031: insufficient privileges primary>alter system switch logfile; System altered.
备库验证
standby> alter database recover managed standby database disconnect from session; Database altered. standby> alter database recover managed standby database cancel; Database altered. standby> select count(1) from lottu.t; COUNT(1) ---------- 9