Oracle 11g Data Guard 使用duplicate from active database 创建 standby database_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2746 | 回复: 0   主题: Oracle 11g Data Guard 使用duplicate from active database 创建 standby database        下一篇 
cc
注册用户
等级:中校
经验:1900
发帖:195
精华:0
注册:2011-7-25
状态:离线
发送短消息息给cc 加好友    发送短消息息给cc 发消息
发表于: IP:您无权察看 2015-6-15 10:07:18 | [全部帖] [楼主帖] 楼主

Oracle 11g 的 pyhsical standby  支持 open read only  下的 apply 和 Real-time query 。 因此就有了 physical standby  稳定和 logical standby  的报表查询功能。

Oracle :  11.2.0.1
OS :  redhat 5.5
Primary IP: 192.168.2.42
DB_NAME= sanfu
Standby IP: 192.168.2.43
DB_NAME= sanfu


一 .  Primary  端操作:

1.  设置归档模式

这个生产库都是这种模式。

SQL> archive log list;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> archive log list;


2. Primary  设置 force logging

SQL> alter database force logging;
SQL> select force_logging from v$database;
FORCE_LOG
---------
YES


3.  配置 Oracle Net

在 Primary  库和 Standby  都要修改。也可以使用 netca  和 netmgr 命令配置。

注意:修改完后记得重启 listener 。

Listener.ora
[oracle@qs-dmm-rh1 admin]$ cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost6.localdomain6)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
--  配置静态注册
tnsname.ora
[oracle@qs-dmm-rh1 admin]$ cat tnsnames.ora
sanfus =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.43)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
sanfup =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.42)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)


4.  添加 data guard  参数

创建 pfile,  添加如下文件:

SQL> create pfile from spfile;
*.db_name='orcl'
*.db_unique_name=' sanfup '
*.log_archive_config='dg_config=( sanfup , sanfus )'
*.log_archive_dest_1='location=/u01/archivelog valid_for=(all_logfiles,all_roles) db_unique_name= sanfup '
*.log_archive_dest_2='service= sanfus  reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name= sanfus '
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.standby_file_management='auto'
*.fal_server=' sanfus '
*.fal_client=' sanfup '


注意:

在 Oracle 11g 的 Data Guard 中, standby_archive_dest 参数已经被取消了。

Standby 归档文件的存放位置按如下规则来进行:

( 1 )当 LOG_ARCHIVE_DEST_n 设置了 valid_for=(all_logfiles,all_roles) ,那么在不定义 standby_archive_dest 参数时, Oracle 就会选择 LOG_ARCHIVE_DEST_n 参数作为归档目标。

( 2 )如果在第一步设置的同时,又独立设置 LOG_ARCHIVE_DEST_n 参数为  valid_for=(standby_logfile,*)  属性,那么当 compatible 参数大于 10.0 的时候,会自动的选择任意一个 LOG_ARCHIVE_DEST_n 的值。

( 3 )如果 LOG_ARCHIVE_DEST_n  没有设置的话,默认位置是:

$ORACLE_HOME/dbs.


不过 valid_for 参数的默认值就是 all_logfiles 和 all_roles.  所以只要设置了本地的归档位置,远程的归档文件也会放到这个目录下面。

5.  用新 pfile 重启主库

SQL>  shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>  create spfile from pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora';
File created.
SQL>  startup
ORACLE instance started.
Total System Global Area  422670336 bytes
Fixed Size                  1336960 bytes
Variable Size             310380928 bytes
Database Buffers          104857600 bytes
Redo Buffers                6094848 bytes
Database mounted.
Database opened.
SQL>


二 .  Standby  端设置:

1.  创建相关目录结构

[oracle@qs-dmm-rh2 trace]$ mkdir -p /u01/app/oracle/oradata/dave
-- 这里我们创建的目录和 Target  库不同,我们在参数文件里需要转换一下。


2.  创建 standby 的口令文件

[oracle@qs-dmm-rh2 trace]$ orapwd file=?/dbs/orapwdave password=oracle


3.  创建 standby 的初始化参数:

*.compatible='11.2.0.4.0'
*db_name=orcl
*.control_files='/u01/app/oracle/oradata/dave/control01.ctl', '/u01/app/oracle/oradata/dave/control02.ctl',
'/u01/app/oracle/oradata/dave/control03.ctl'
*.db_unique_name=' sanfus '
*.log_archive_config='dg_config=( sanfup , sanfus )'
*.log_archive_dest_1='location=/u01/archivelog valid_for=( standby_logfile, standby_role ) db_unique_name= sanfus '
*.log_archive_dest_2='service= sanfup  reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name= sanfup '
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.standby_file_management='auto'
*.fal_server=' sanfup '
*.fal_client=' sanfus '
*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/dave'
*.db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/dave'


4.  用 pfile  将 standby  启动到 nomount 状态:

SQL> startup nomount pfile=?/dbs/initorcl.ora
ORACLE instance started.
Total System Global Area  146472960 bytes
Fixed Size                  1335080 bytes
Variable Size              92274904 bytes
Database Buffers           50331648 bytes
Redo Buffers                2531328 bytes


5.  开始 duplicate

[oracle@qs-dmm-rh2 dbs]$ rman target sys/oracle@ sanfup auxiliary sys/oracle@ sanfus
Recovery Manager: Release 11.2.0.1.0 - Production on Tue Mar 8 16:10:25 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1272955137)
connected to auxiliary database: ORCL (not mounted)
RMAN> duplicate target database for standby from active database;
Starting Duplicate Db at 08-MAR-11
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/orapworcl' auxiliary format
      '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl' ;
      -- 用 duplicate  创建 standby  时会复制口令文件
}
executing Memory Script
Starting backup at 08-MAR-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=45 device type=DISK
Finished backup at 08-MAR-11
contents of Memory Script:
{
      backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/dave/control01.ctl';
      restore clone controlfile to '/u01/app/oracle/oradata/dave/control02.ctl' from
      '/u01/app/oracle/oradata/dave/control01.ctl';
      restore clone controlfile to '/u01/app/oracle/oradata/dave/control03.ctl' from
      '/u01/app/oracle/oradata/dave/control01.ctl';
      -- 创建控制文件
}
executing Memory Script
Starting backup at 08-MAR-11
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_orcl.f tag=TAG20110308T161152 RECID=4 STAMP=745258313
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 08-MAR-11
Starting restore at 08-MAR-11
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 08-MAR-11
Starting restore at 08-MAR-11
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 08-MAR-11
contents of Memory Script:
{
      sql clone 'alter database mount standby database';
      -- 将备库启动到 mount standby
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
      set newname for tempfile 1 to
      "/u01/app/oracle/oradata/dave/temp01.dbf";
      switch clone tempfile all;
      set newname for datafile 1 to
      "/u01/app/oracle/oradata/dave/system01.dbf";
      set newname for datafile 2 to
      "/u01/app/oracle/oradata/dave/sysaux01.dbf";
      set newname for datafile 3 to
      "/u01/app/oracle/oradata/dave/undotbs01.dbf";
      set newname for datafile 4 to
      "/u01/app/oracle/oradata/dave/users01.dbf";
      backup as copy reuse
      datafile 1 auxiliary format
      "/u01/app/oracle/oradata/dave/system01.dbf" datafile
      2 auxiliary format
      "/u01/app/oracle/oradata/dave/sysaux01.dbf" datafile
      3 auxiliary format
      "/u01/app/oracle/oradata/dave/undotbs01.dbf" datafile
      4 auxiliary format
      "/u01/app/oracle/oradata/dave/users01.dbf" ;
      sql 'alter system archive log current';
      -- 将 datafile convert  到其他目录
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /u01/app/oracle/oradata/dave/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 08-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
-- 开始 copy datafile ,如果数据文件比较大,这个会比较慢
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
output file name=/u01/app/oracle/oradata/dave/system01.dbf tag=TAG20110308T161204
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
output file name=/u01/app/oracle/oradata/dave/sysaux01.dbf tag=TAG20110308T161204
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
output file name=/u01/app/oracle/oradata/dave/undotbs01.dbf tag=TAG20110308T161204
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
output file name=/u01/app/oracle/oradata/dave/users01.dbf tag=TAG20110308T161204
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 08-MAR-11
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=4 STAMP=745258432 file name=/u01/app/oracle/oradata/dave/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=5 STAMP=745258432 file name=/u01/app/oracle/oradata/dave/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=6 STAMP=745258432 file name=/u01/app/oracle/oradata/dave/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=7 STAMP=745258432 file name=/u01/app/oracle/oradata/dave/users01.dbf
Finished Duplicate Db at 08-MAR-11
RMAN>


DG  复制到这一步已经操作完成了。   但是还有一些细节需要处理。

两点注意事项:


(1)如果使用的是非catalog,在rman 连接时,加上nocatalog关键字,如:

DG2:/home/oracle> rman targetsys/oracle@DG_PD  auxiliarysys/oracle@DG_ST  nocatalog
Recovery Manager: Release 11.2.0.3.0 -Production on Fri Oct 28 18:46:46 2011
Copyright (c) 1982, 2011, Oracle and/or itsaffiliates.  All rights reserved.
connected to target database: DG(DBID=1679060044)
using target databasecontrol file instead of recovery catalog
connected to auxiliary database: DG (notmounted)


不然会报如下错误:

DBGSQL:    TARGET> begin :fhdbi := dbms_rcvcat.getDbid; end;
DBGSQL:        sqlcode = 6550
DBGSQL:         B :fhdbi = 32767
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGESTACK FOLLOWS ===============
RMAN-00571:===========================================================
RMAN-03002: failure of Duplicate Db commandat 10/28/2011 17:53:04
RMAN-05501: aborting duplication of targetdatabase
RMAN-03015: error occurred in stored scriptMemory Script
ORA-06550: line 1, column 17:
PLS-00201: identifier'DBMS_RCVCAT.GETDBID' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


(2) 在执行duplicate的时候,如果源库和目标库目录相同,那么在duplicate 时,需要加上nofilenamecheck,如下:

RMAN> duplicate target database for standby from active database  dorecover nofilenamecheck;


在上面的示例中,目录结构不同,所以没有用该参数,如果目录相同,而又没有加该参数,那么就会报如下错误:

RMAN> duplicate target database forstandby from active database  dorecover nofilenamecheck;
RMAN-05501: aborting duplication of targetdatabase
RMAN-05001: auxiliary file name/u01/app/oracle/oradata/dg/users01.dbf conflicts with a file used by the targetdatabase
RMAN-05001: auxiliary file name/u01/app/oracle/oradata/dg/undotbs01.dbf conflicts with a file used by thetarget database
RMAN-05001: auxiliary file name/u01/app/oracle/oradata/dg/sysaux01.dbf conflicts with a file used by thetarget database
RMAN-05001: auxiliary file name/u01/app/oracle/oradata/dg/system01.dbf conflicts with a file used by thetarget database


三 .  后续工作

1.  主库已经使用了 spfile ,但是备库用的还是之前的 pfile :

Primary:
SQL> show parameter pfile
NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
spfile                               string  /u01/app/oracle/product/11.2.0
Standby:
SQL> show parameter pfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string


pfile 里面都是我们设置的一些基本参数。 但是备库有冗余的作用,所以这里还是建议用主库的 pfile copy 过来,然后修改相关参数后,在创建 spfile 。这样即使切换了,对 DB 的影响也不大。

2.   只要备库的监听不重启,重启备库后,主库还是能识别的。   如果备库的监听重启了。那么主库也就需要重启。

3.  复制结束后的 Standby  只启动到 mount standby  的状态。 并没有启动 MRP 的应用归档程序

。 所以这个时候查询主备库,归档是不同步的。需要手动的启动 MRP 进程。

SQL> alter database recover managed standby database disconnect from session;


4.   备库 Standby redo log  问题:

在 duplicat

e  结束后,备库没有添加 standby redo log file 。 但是主库采用的是: lgwr async 传送的日志。 当备库的 RFS  进程接收到日志后,发现备库没有 standby redo log 的时候,备库会自动用 ARCH 将其写入归档文件。

以下是备库的 alert log :

Tue Mar 08 16:53:32 2011
Archived Log entry 9 added for thread 1 sequence 21 rlc 745174404 ID 0x4bdfd301 dest 2:
RFS[2]: Opened log for thread 1 sequence 22  dbid 1272955137 branch 745174404
Tue Mar 08 16:53:36 2011
Media Recovery Log  /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_21_745174404.dbf
Media Recovery Waiting for thread 1 sequence 22  (in transit) -- 传输中
Tue Mar 08 16:58:58 2011
Archived Log entry 10 added for thread 1 sequence 22  rlc 745174404 ID 0x4bdfd301 dest 2:
RFS[2]: Opened log for thread 1 sequence 23 dbid 1272955137 branch 745174404
Tue Mar 08 16:59:00 2011
Media Recovery Log  /u01/app/oracle/product/11.2.0/dbhome_1/dbs/ arch1_22_745174404.dbf
Media Recovery Waiting for thread 1 sequence 23 (in transit)
--  注意这里归档文件目录,使用的是 $ORACLE_HOME/dbs,  自动转换为 ARCH 时,也是使用默认的归档目录。


5.   在备库添加 standby redo log :

SQL> alter database add standby logfile '/u01/app/oracle/oradata/dave/stdbyredo01.log' size 50m;
alter database add standby logfile '/u01/app/oracle/oradata/dave/stdbyredo01.log' size 50m
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files
-- 在备库添加 standby redo log 需要先停 MRP
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/dave/stdbyredo01.log' size 50m;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/dave/stdbyredo02.log' size 50m;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/dave/stdbyredo03.log' size 50m;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/dave/stdbyredo04.log' size 50m;
Database altered.
SQL> alter database recover managed standby database disconnect from session;
Database altered.


在看一下日志:

Tue Mar 08 17:47:39 2011
Archived Log entry 15 added for thread 1 sequence 27 ID 0x4bdfd301 dest 1:
RFS[2]: Selected log 4 for thread 1 sequence 28 dbid 1272955137 branch 745174404
Tue Mar 08 17:47:43 2011
Archived Log entry 16 added for thread 1 sequence 28 ID 0x4bdfd301 dest 1:
Media Recovery Log /u01/archivelog/1_27_745174404.dbf
RFS[2]: Selected log 4 for thread 1 sequence 29 dbid 1272955137 branch 745174404
Media Recovery Log /u01/archivelog/1_28_745174404.dbf
Media Recovery Waiting for thread 1 sequence 29 (in transit)
-- 我们添加 standby redo log  之后,归档文件变成了我们指定的 Log_archive_dest_n  指定的参数。


6.  在主库也添加一下 standby redo log

SQL> alter database add standby logfile '/u01/app/oracle/oradata/orcl/stdbyredo01.log' size 50m;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/orcl/stdbyredo02.log' size 50m;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/orcl/stdbyredo03.log' size 50m;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/orcl/stdbyredo04.log' size 50m;
Database altered.


7.  启用 real-time apply ,从而实现 real-time query :

SQL> alter database recover managed standby database cancel;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Database altered.


8.  验证 real-time apply  和 real-time query :

Primary :
SQL> create table dave(id number,name varchar2(20));
Table created.
SQL> insert into dave values(1,'tianlesoftware');
1 row created.
SQL> commit;
Commit complete.
Standby :
SQL>  select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
SQL> select * from dave;
ID NAME
---------- ---------------
1 tianlesoftware


小结:

11gR2  的物理 Data Guard  功能很强大 .

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论