DG:
DG是dataguard,也叫standby,是oracle提供的一种容灾解决方案,只有企业版可用,标准版是不能用的,DG最多可以有一个主节点,9个从节点。可分为逻辑和物理两类,这里注意区分一下,逻辑的是通过redo转换成SQL语句,然后再standby上执行该SQL语句实现的同步,物理standby是接受主节点的redo数据后,以介质恢复的方式进行同步,这是这两者的本质区别。
DG的三种模式:
最大保护:主节点事务提交前,redo写入在线日志,而且从节点也要写入到standby redolog中,并且保证在从库中至少一个节点可用,在主节点才提交事务,注意,最大保护模式,从节点故障,主库会被shutdown。
最高性能:这种模式,主节点随时提交事务,事务提交时,redo至少写入一个从节点,但是写入不一定同步。
最高可用性:这种模式和最大保护有点类似,不同的是,从库故障,主库不会shutdown,而是转为最高性能模式,从库恢复后,转回最高可用性模式。
物理standby只能read only打开,此时只接受redo,不应用redo。应用redo,就不能打开。11G,可以以open read only模式打开,继续应用redo.所以大部分时间,物理standby都是在mount状态。
逻辑standby正常情况下就是read write模式,而且由于是应用sql语句实现同步,所以物理结构可以不一致。
硬件以及操作系统需求:
主库和从库运行的操作系统平台必须相同,版本可以有差异,数据库安装路径可以不同。主从服务器的配置差异最好不要太大,要不切换角色的时候,配置差的切换后,性能会有影响。
主库必须是归档模式,并且force logging模式,从库可以是非force logging。一个主节点,可以有逻辑从节点,可以有物理从节点,但是时区和时间设置必须一致,否则同步会出现问题。
RFS(remote file server):运行在备库上的进程,用于在备库上进行主库的日志恢复。默认,这个进程用于接收从主库传送过来的归档日志。
当物理备库启用了 Redo Apply时,备库可以通过实时应用这个特性,直接使用这个进程从 standby redo log 中直接应用 redo 日志。
LNSn:LGWR触发以后真正负责传输的进程,包括初始化网络I/O等一些列功能。
MRP:managed recovery process,简单来说就是物理standby是通过这个进程来实现数据的同步的,直接通过standby redo log或者是归档日志(取决于模式不同)来进行的一个数据恢复。
LSP:logical standby process:逻辑standby的方式,和上面的一样,只不过当中多了一步将redo信息转换成sql语句再恢复。也可以从这里看出逻辑standby和物理standby的不同。
1、准备条件:
归档模式;
监听参数:local_listener 默认是1521
关闭闪回---->数据库的bug,备库不能开闪回
如果有外部表,外部表也要删除
2、主要修改参数文件---->增加dg属性参数
一般是在主库修改完,需要根据参数文件创建不存在的目录,验证;
开启force logging,增加standby logfile
再把参数文件和口令文件传输到备库,更改环境变量,再次修改备库的参数文件及根据参数文件创建不存在的目录,最后验证;
3、配置监听网络:
需要配置主库和备库的静态监听,并且能够互相访问
备库启到Nomount时,查看监听状态,会有blocked状态。
4、复制主库生成备库:
11g-->rman 执行duplicate复制命令就可以完成复制主库生成备库操作
10g-->冷备恢复、rman备份集恢复
实验之搭建DG如下:
1. 准备工作
Linux虚拟机:两台
主备 | 虚拟机名称 | 主机名 | IP地址 | db_name | db_unique_name | 备注 |
主库 | wxb | wang | 192.168.10.2 | ORA11GR2 | ORA11GR2 |
|
备库 | www | bing | 192.168.10.3 | ORA11GR2 | OCMU | Oracle数据库只安装了软件 |
DB_NAME,在DG所以节点中必须要一样,而DB_UNIQUE_NAME参数值则是区分每个节点实例的唯一标识!!
——查看是否开启闪回数据库功能,必须设为NO,如果开启,备库以后不能应用闪回数据库功能(大bug),默认是NO的状态。
SYS@ORA11GR2>select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
——检查参数local_listener,其值为找1521的名为LISTENER的监听,如果端口号及监听名不是LISTENER,需要修改此参数,默认值为空;
SYS@ORA11GR2>show parameter local_listener
NAME TYPE VALUE
------------------------------------ ---------- ------------------------------
local_listener string
SYS@ORA11GR2>
注:如果主库有外部表,必须将外部表删除;
2. 主库数据库归档并强制生成日志
[oracle@wang ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Oct 19 20:13:16 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
——检查主库是否处于归档,必须设置为归档
SYS@ORA11GR2>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 12
Next log sequence to archive 14
Current log sequence 14
——开启主库的force logging 模式:(默认是关闭的)
SYS@ORA11GR2>select force_logging from v$database;
FOR
---
NO
SYS@ORA11GR2>alter database force logging;
Database altered.
SYS@ORA11GR2>select force_logging from v$database;
FOR
---
YES
默认情况下数据库操作会记录redo log,但是在一些特定的情况下可以使用nologging来不生成redo信息
(1)表的批量INSERT(通过/*+APPEND */提示使用“直接路径插入“。或采用SQL*Loader直接路径加载),表数据不生成redo,但是所有索引修改会生成redo(尽管表不生成日志,但这个表上的索引却会生成redo!)。
(2)LOB操作(对大对象的更新不必生成日志)。
(3)通过CREATE TABLE AS SELECT创建表
(4)各种altere table操作,如move和split
(5)在一些表迁移和表空间迁移中,可以使用alter table a nologging;或者alter tablespace snk nologging;在操作完成后再修改回logging状态
3. 主库创建standby logfile
主库增加standby database 日志组(此步操作是为主切备而进行的,且要求备库日志组要比主库日志多一组,并且大小要一样)
——先查看主库日志组数,及日志路径及日志组大小:
SYS@ORA11GR2>select group#,member from v$logfile order by 1;
GROUP# MEMBER
---------- ---------------------------------------------
1 /u01/app/oracle/oradata/ORA11GR2/redo01.log
2 /u01/app/oracle/oradata/ORA11GR2/redo02.log
3 /u01/app/oracle/oradata/ORA11GR2/redo03.log
SYS@ORA11GR2>
SYS@ORA11GR2>select group#,bytes/1024/1024 m from v$log;
GROUP# M
---------- ----------
1 50
2 50
3 50
——在主库上建立standby redo 日志组:
SYS@ORA11GR2>alter database add standby logfile group 4('/u01/app/oracle/oradata/ORA11GR2/standbyredo04_a.log','/u01/app/oracle/oradata/ORA11GR2/standbyredo04_b.log') size 50m;
Database altered.
SYS@ORA11GR2>alter database add standby logfile group 5('/u01/app/oracle/oradata/ORA11GR2/standbyredo05_a.log','/u01/app/oracle/oradata/ORA11GR2/standbyredo05_b.log') size 50m;
Database altered.
SYS@ORA11GR2>alter database add standby logfile group 6('/u01/app/oracle/oradata/ORA11GR2/standbyredo06_a.log','/u01/app/oracle/oradata/ORA11GR2/standbyredo06_b.log') size 50m;
Database altered.
SYS@ORA11GR2>alter database add standby logfile group 7('/u01/app/oracle/oradata/ORA11GR2/standbyredo07_a.log','/u01/app/oracle/oradata/ORA11GR2/standbyredo07_b.log') size 50m;
Database altered.
——验证建立的日志组:
SYS@ORA11GR2>select group#,thread#,sequence#,bytes/1024/1024 m,status from v$standby_log;
GROUP# THREAD# SEQUENCE# M STATUS
---------- ---------- ---------- ---------- -----------------------------------------------------------
4 0 0 50 UNASSIGNED
5 0 0 50 UNASSIGNED
6 0 0 50 UNASSIGNED
7 0 0 50 UNASSIGNED
SYS@ORA11GR2>col type for a10
SYS@ORA11GR2>col MEMBER for a55
SYS@ORA11GR2>select group#,type,member from v$logfile order by 1;
GROUP# TYPE MEMBER
---------- ---------- -------------------------------------------------------
1 ONLINE /u01/app/oracle/oradata/ORA11GR2/redo01.log
2 ONLINE /u01/app/oracle/oradata/ORA11GR2/redo02.log
3 ONLINE /u01/app/oracle/oradata/ORA11GR2/redo03.log
4 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo04_a.log
4 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo04_b.log
5 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo05_a.log
5 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo05_b.log
6 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo06_a.log
6 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo06_b.log
7 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo07_a.log
7 STANDBY /u01/app/oracle/oradata/ORA11GR2/standbyredo07_b.log
11 rows selected.
注:一定要确认备库日志组比主库日志组多一组:
4. 主库配置静态监听及作为客户端的tnsnames
——配置主库的静态监听:
[oracle@wang ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
[oracle@wang admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
[oracle@wang admin]$ vi listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521)))
)
sid_list_listener=
(sid_list=
(sid_desc=
(global_dbname=ORA11GR2)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(sid_name=ORA11GR2))
)
~
"listener.ora" 19L, 453C written
——配置好静态监听重启一下监听,以加载静态监听:
[oracle@wang admin]$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:38:22
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wang)(PORT=1521)))
The command completed successfully
[oracle@wang admin]$
[oracle@wang admin]$ lsnrctl start(此时静态已经起来了)
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:38:35
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/wang/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wang)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wang)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 19-OCT-2016 20:38:35
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/wang/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wang)(PORT=1521)))
Services Summary...
Service "ORA11GR2" has 1 instance(s).
Instance "ORA11GR2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@wang admin]$
——动态监听注册慢一点(1分钟左右),也可以手动注册动态监听(alter system register;)
再次查看监听状态:(动态监听也起来了)
[oracle@wang admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:40:16
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=wang)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 19-OCT-2016 20:38:35
Uptime 0 days 0 hr. 1 min. 40 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/wang/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=wang)(PORT=1521)))
Services Summary...
Service "ORA11GR2" has 2 instance(s).
Instance "ORA11GR2", status UNKNOWN, has 1 handler(s) for this service...
Instance "ORA11GR2", status READY, has 1 handler(s) for this service...
Service "ORA11GR2XDB" has 1 instance(s).
Instance "ORA11GR2", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@wang admin]$
——配置主库作为客户端对备库访问的连接字符串:
[oracle@wang admin]$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORA11GR2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORA11GR2)
)
)
ocm=
(description=
(address=(protocol=tcp)(host=192.168.10.3)(port=1521))
(connect_data=
(server=dedicated)
(service_name=OCMU)
)
)
~
~
"tnsnames.ora" 20L, 501C written
[oracle@wang admin]$
[oracle@wang admin]$ tnsping ocm (测试一下是否畅通)
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:45:53
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (description= (address=(protocol=tcp)(host=192.168.10.3)(port=1521)) (connect_data= (server=dedicated) (service_name=OCMU)))
OK (0 msec)
[oracle@wang admin]$
5. 备库配置静态监听及作为客户端的tnsnames
——设置环境变量:
[oracle@bing ~]$ export ORACLE_SID=OCMU
[oracle@bing ~]$ echo $ORACLE_SID
OCMU
[oracle@bing ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
[oracle@bing admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
——设置备库的静态监听:
[oracle@bing admin]$ vi listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bing)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
sid_list_listener=
(sid_list=
(sid_desc=
(global_dbname=OCMU)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(sid_name=OCMU))
)
~
"listener.ora" 19L, 477C written
[oracle@bing admin]$ lsnrctl stop(同理)
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:51:11
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bing)(PORT=1521)))
The command completed successfully
[oracle@bing admin]$ lsnrctl start (同理,静态监听已经起来了,动态监听虽然也配了,但是实例还没有启动)
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:51:21
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/bing/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bing)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bing)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 19-OCT-2016 20:51:21
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/bing/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bing)(PORT=1521)))
Services Summary...
Service "OCMU" has 1 instance(s).
Instance "OCMU", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@bing admin]$
——配置备库对于主库访问的tnsnames.ora,即连接字符串:
[oracle@bing admin]$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
12 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.3)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PROD)
)
)
ora=
(description=
(address=(protocol=tcp)(host=192.168.10.2)(port=1521))
(connect_data=
(server=dedicated)
(service_name=ORA11GR2)
)
)
~
"tnsnames.ora" 20L, 505C written
[oracle@bing admin]$
[oracle@bing admin]$ tnsping ora(测试一下是否畅通)
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 20:58:01
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (description= (address=(protocol=tcp)(host=192.168.10.2)(port=1521)) (connect_data= (server=dedicated) (service_name=ORA11GR2)))
OK (10 msec)
[oracle@bing admin]$
6. 主库修改参数增加DG相关的属性参数:
6.1. 生成pfile
SYS@ORA11GR2>create pfile from spfile;
File created.
SYS@ORA11GR2>exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@wang ~]$
6.2. 修改参数
[oracle@wang ~]$ cd $ORACLE_HOME/dbs
[oracle@wang dbs]$ vi initORA11GR2.ora
ORA11GR2.__db_cache_size=373293056
ORA11GR2.__java_pool_size=4194304
ORA11GR2.__large_pool_size=8388608
ORA11GR2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
ORA11GR2.__pga_aggregate_target=289406976
ORA11GR2.__sga_target=545259520
ORA11GR2.__shared_io_pool_size=0
ORA11GR2.__shared_pool_size=146800640
ORA11GR2.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/ORA11GR2/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/ORA11GR2/control01.ctl','/u01/app/oracle/oradata/ORA11GR2/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORA11GR2'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA11GR2,OCMU)'
*.db_recovery_file_dest_size=3221225472
*.db_recovery_file_dest='/u01/app/FRA'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORA11GR2XDB)'
*.memory_target=833617920
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
DB_UNIQUE_NAME=ORA11GR2
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA11GR2,OCMU)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/u01/arch1/ORA11GR2/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=ORA11GR2'
LOG_ARCHIVE_DEST_2=
'SERVICE=ocm ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=OCMU'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=OCMU
DB_FILE_NAME_CONVERT='OCMU','ORA11GR2'
LOG_FILE_NAME_CONVERT=
'/u01/app/oracle/oradata/OCMU/','/u01/app/oracle/oradata/ORA11GR2/'
STANDBY_FILE_MANAGEMENT=AUTO
~
~
"initORA11GR2.ora" 47L, 1565C written
[oracle@wang dbs]$
——根据上述参数文件创建没有的目录:
[oracle@wang dbs]$ mkdir -p /u01/arch1/ORA11GR2/
[oracle@wang dbs]$
6.3. 验证修改过的pfile,通过pfile重新生成spfile并启动数据库
[oracle@wang admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Oct 19 21:31:10 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SYS@ORA11GR2>shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ORA11GR2>create spfile from pfile;
File created.
SYS@ORA11GR2>startup
ORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2257800 bytes
Variable Size 503319672 bytes
Database Buffers 322961408 bytes
Redo Buffers 2392064 bytes
Database mounted.
Database opened.
SYS@ORA11GR2>show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0
/dbhome_1/dbs/spfileORA11GR2.ora
7. 拷贝相关文件至备库(即参数文件、密码文件)
[oracle@wang dbs]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
[oracle@wang dbs]$ ls
hc_ORA11GR2.dat initORA11GR2.ora orapwORA11GR2
init.ora lkORA11GR2 spfileORA11GR2.ora
[oracle@wang dbs]$ scp initORA11GR2.ora 192.168.10.3:$ORACLE_HOME/dbs/initOCMU.ora
The authenticity of host '192.168.10.3 (192.168.10.3)' can't be established.
RSA key fingerprint is 46:2d:74:b7:54:f9:5f:4b:13:7d:e0:0f:5a:a4:92:2f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.3' (RSA) to the list of known hosts.
oracle@192.168.10.3's password:
initORA11GR2.ora 100% 1762 1.7KB/s 00:00
[oracle@wang dbs]$
[oracle@wang dbs]$ scp orapwORA11GR2 192.168.10.3:$ORACLE_HOME/dbs/orapwOCMU
oracle@192.168.10.3's password:
orapwORA11GR2 100% 1536 1.5KB/s 00:00
[oracle@wang dbs]$
——到备库去验证:
[oracle@bing admin]$ cd $ORACLE_HOME/dbs/
[oracle@bing dbs]$ ls orapwOCMU initOCMU.ora
initOCMU.ora orapwOCMU
8. 备库参数修改增加DG相关的属性参数
8.1. 修改备库pfile
[oracle@bing dbs]$ vi initOCMU.ora
OCMU.__db_cache_size=373293056
OCMU.__java_pool_size=4194304
OCMU.__large_pool_size=8388608
OCMU.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
OCMU.__pga_aggregate_target=289406976
OCMU.__sga_target=545259520
OCMU.__shared_io_pool_size=0
OCMU.__shared_pool_size=146800640
OCMU.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/OCMU/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/OCMU/control01.ctl','/u01/app/oracle/oradata/OCMU/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORA11GR2'
*.db_recovery_file_dest_size=3221225472
*.db_recovery_file_dest='/u01/app/FRA'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=OCMUXDB)'
*.memory_target=833617920
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
DB_UNIQUE_NAME=OCMU
LOG_ARCHIVE_CONFIG='DG_CONFIG=(OCMU,ORA11GR2)'
LOG_ARCHIVE_DEST_1=
'LOCATION=/u01/arch1/OCMU/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=OCMU'
LOG_ARCHIVE_DEST_2=
'SERVICE=ora ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=ORA11GR2'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=ORA11GR2
DB_FILE_NAME_CONVERT='ORA11GR2','OCMU'
LOG_FILE_NAME_CONVERT=
'/u01/app/oracle/oradata/ORA11GR2/','/u01/app/oracle/oradata/OCMU/'
STANDBY_FILE_MANAGEMENT=AUTO
[oracle@bing dbs]$
——根据上述参数文件创建不存在的目录:
[oracle@bing dbs]$ mkdir -p /u01/app/oracle/admin/OCMU/adump
[oracle@bing dbs]$ mkdir -p /u01/app/oracle/oradata/OCMU/
[oracle@bing dbs]$ mkdir -p /u01/app/FRA
[oracle@bing dbs]$ mkdir -p /u01/arch1/OCMU/
8.2. 验证,备库通过pfile生成spfile并启动数据库至nomount
[oracle@bing dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Wed Oct 19 21:51:37 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create spfile from pfile;
File created.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 830930944 bytes
Fixed Size 2257800 bytes
Variable Size 536874104 bytes
Database Buffers 289406976 bytes
Redo Buffers 2392064 bytes
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0
/dbhome_1/dbs/spfileOCMU.ora
——此时查验备库监听状态,动态监听为block状态:
(因为确实库没有开,监听是由实例告诉其数据库的状况)
[oracle@bing admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2016 21:54:06
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bing)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 19-OCT-2016 20:55:57
Uptime 0 days 0 hr. 58 min. 8 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/bing/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bing)(PORT=1521)))
Services Summary...
Service "OCMU" has 2 instance(s).
Instance "OCMU", status UNKNOWN, has 1 handler(s) for this service...
Instance "OCMU", status BLOCKED, has 1 handler(s) for this service...
The command completed successfully
9. 使用RMAN auxiliary恢复数据库(在主库上操作)
主库为open状态,备库为nomount
监听为启动状态
[oracle@wang dbs]$ rman target / auxiliary sys/oracle@ocm
Recovery Manager: Release 11.2.0.4.0 - Production on Thu Oct 20 22:17:26 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORA11GR2 (DBID=237843809)
connected to auxiliary database: ORA11GR2 (not mounted)
RMAN>
RMAN> duplicate target database for standby from active database;
Starting Duplicate Db at 20-OCT-16
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=20 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwORA11GR2' auxiliary format
'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwOCMU' ;
}
executing Memory Script
Starting backup at 20-OCT-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=83 device type=DISK
Finished backup at 20-OCT-16
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/OCMU/control01.ctl';
restore clone controlfile to '/u01/app/oracle/oradata/OCMU/control02.ctl' from
'/u01/app/oracle/oradata/OCMU/control01.ctl';
}
executing Memory Script
Starting backup at 20-OCT-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_ORA11GR2.f tag=TAG20161020T221739 RECID=2 STAMP=925769860
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 20-OCT-16
Starting restore at 20-OCT-16
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 20-OCT-16
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/OCMU/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/OCMU/system01.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/OCMU/sysaux01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/OCMU/undotbs01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/OCMU/users01.dbf";
set newname for datafile 5 to
"/u01/app/oracle/oradata/OCMU/example01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/OCMU/system01.dbf" datafile
2 auxiliary format
"/u01/app/oracle/oradata/OCMU/sysaux01.dbf" datafile
3 auxiliary format
"/u01/app/oracle/oradata/OCMU/undotbs01.dbf" datafile
4 auxiliary format
"/u01/app/oracle/oradata/OCMU/users01.dbf" datafile
5 auxiliary format
"/u01/app/oracle/oradata/OCMU/example01.dbf" ;
sql 'alter system archive log current';
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/OCMU/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 20-OCT-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/ORA11GR2/system01.dbf
output file name=/u01/app/oracle/oradata/OCMU/system01.dbf tag=TAG20161020T221747
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/ORA11GR2/sysaux01.dbf
output file name=/u01/app/oracle/oradata/OCMU/sysaux01.dbf tag=TAG20161020T221747
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/ORA11GR2/example01.dbf
output file name=/u01/app/oracle/oradata/OCMU/example01.dbf tag=TAG20161020T221747
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/ORA11GR2/undotbs01.dbf
output file name=/u01/app/oracle/oradata/OCMU/undotbs01.dbf tag=TAG20161020T221747
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/ORA11GR2/users01.dbf
output file name=/u01/app/oracle/oradata/OCMU/users01.dbf tag=TAG20161020T221747
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 20-OCT-16
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=2 STAMP=925769910 file name=/u01/app/oracle/oradata/OCMU/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=3 STAMP=925769910 file name=/u01/app/oracle/oradata/OCMU/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=4 STAMP=925769910 file name=/u01/app/oracle/oradata/OCMU/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=5 STAMP=925769910 file name=/u01/app/oracle/oradata/OCMU/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=6 STAMP=925769910 file name=/u01/app/oracle/oradata/OCMU/example01.dbf
Finished Duplicate Db at 20-OCT-16
成功,此步骤完成,标志DG搭建完成,剩下的就是备库应用日志,和主库保持一致了!!!!
10. 备库同步数据
——检查备库状态:(由nomount自动转到mount)
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database open;
Database altered.
——查看备库状态:
SQL> select name,open_mode,protection_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- --------------------
ORA11GR2 READ ONLY MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
---------- ---------
18 NO
19 NO (备库未应用日志)
——应用日志:
SQL> recover managed standby database using current logfile disconnect from session;
Media recovery complete.
SQL>
SQL> set lines 100
SQL> select name,open_mode,protection_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- --------------------
ORA11GR2 READ ONLY WITH APPLY MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
---------- ---------
18 YES
19 IN-MEMORY
SQL> recover managed standby database cancel;(结束应用日志)
Media recovery complete.
SQL> select name,open_mode,protection_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- --------------------
ORA11GR2 READ ONLY MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
---------- ---------
18 YES
19 YES
——查看主库状态:
SYS@ORA11GR2>select name,open_mode,protection_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- --------------------
ORA11GR2 READ WRITE MAXIMUM PERFORMANCE PRIMARY SESSIONS ACTIVE
SYS@ORA11GR2>select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
19
SYS@ORA11GR2>alter system switch logfile;(切换日志,则归档日志)
System altered.
SYS@ORA11GR2>select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
20
——主库有新的归档产生,查看备库日志:
SQL> select sequence#,applied from v$archived_log;
(新传输过来的20号日志还没有应用)
SEQUENCE# APPLIED
---------- ---------
18 YES
19 YES
20 NO
——应用日志:
SQL> recover managed standby database using current logfile disconnect from session;
Media recovery complete.
——再次查看状态:
SQL> select name,open_mode,protection_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- --------------------
ORA11GR2 READ ONLY WITH APPLY MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
---------- ---------
18 YES
19 YES
20 IN-MEMORY(正在应用)
——结束应用日志:
SQL> recover managed standby database cancel;
Media recovery complete.
SQL>
SQL> select name,open_mode,protection_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
--------- -------------------- -------------------- ---------------- --------------------
ORA11GR2 READ ONLY MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APPLIED
---------- ---------
18 YES
19 YES
20 YES (日志应用结束)
主备一致!!!!!!!!!!!!!!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31397003/viewspace-2126909/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31397003/viewspace-2126909/