Welcome 微信登录

首页 / 数据库 / MySQL / Oracle11g 物理standby数据库的搭建

一、实验环境
主库配置:
操作系统:win7 64bit
Oracle数据库: Oracle 11.2.0.1
IP地址:127.0.0.1
db_unique_name:orcl
oracle_sid:orcl
备库配置:
操作系统:win7 64bit
ORACLE数据库: Oracle 11.2.0.1
IP地址:127.0.0.1
oracle_sid: pdb
db_unique_name:pdb_orcl
注意:主库和备库的DB_NAME必须一致,即orcl二、主库配置
1.归档模式
SQL> archive log list
数据库日志模式            存档模式
自动存档            启用
存档终点            E:ora_arch
最早的联机日志序列    4
下一个存档日志序列  6
当前日志序列          6
2.查看db_unqie_name
SQL> show parameter db_unique_nameNAME                                TYPE                  VALUE
------------------------------------ ---------------------- ---------
db_unique_name                      string                orcl
3.force logging模式
SQL> select force_logging from v$database;FORCE_
------
YES
如果是NO,需要进行修改
SQL>alter database force logging;
4.配置tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = kermart)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )PDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = kermart)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb)
    )
  )
5.参数文件
通过pfile的方式批量修改需要配置的参数,添加如下参数:
*.db_file_name_convert="D:oradatapdb","C:appAdministratororadataorcl"
*.fal_client="pdb"
*.fal_server="orcl"
*.log_archive_config="DG_CONFIG=(orcl,pdb_orcl)"
*.log_archive_dest_1="LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl"
*.log_archive_dest_2="SERVICE=pdb LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pdb_orcl"
*.log_file_name_convert="D:oradatapdb","C:appAdministratororadataorcl"
*.standby_file_management="AUTO"6.通过pfile创建spfile
SQL>shutdown immediate
SQL> create spfile from pfile;
文件已创建。
SQL> startup
ORACLE 例程已经启动。Total System Global Area 1235959808 bytes
Fixed Size                  2175288 bytes
Variable Size            989859528 bytes
Database Buffers          234881024 bytes
Redo Buffers                9043968 bytes
数据库装载完毕。
数据库已经打开。
SQL>三、备库配置
1.创建配置的instance service
C:>oradim -NEW -SID pdb -startmode manual
实例已创建。
2.配置tnsnames.ora
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = kermart)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )PDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = kermart)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb)
    )
  )
主库和备库的tnsnames.ora保持一致。
3.配置监听
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:appAdministratorproduct11.2.0dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:appAdministratorproduct11.2.0dbhome_1inoraclr11.dll")
    )
--添加静态静态
    (SID_DESC =
      (GLOBAL_DBNAME = pdb)
      (ORACLE_HOME = C:appAdministratorproduct11.2.0dbhome_1)
      (SID_NAME = pdb)
    )
  )
4.创建必要的目录
C:>mkdir -p C:appAdministratoradminpdb
C:>mkdir -p C:appAdministratoradminpdbadump
C:>mkdir -p D:oradataarchlog
C:>mkdir -p C:appAdministratorflash_recovery_areapdb
5.配置参数文件
将主库的pfile复制一份就行修改
*.db_create_file_dest="D:oradatapdb"
*.db_unique_name="pdb_orcl"
*.db_file_name_convert="C:appAdministratororadataorcl","D:oradatapdb"
*.fal_client="pdb"
*.fal_server="orcl"
*.log_archive_config="DG_CONFIG=(pdb_orcl,orcl)"
*.log_archive_dest_1="LOCATION=D:oradataarchlog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pdb_orcl"
*.log_archive_dest_2="SERVICE=orcl LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl"
*.log_file_name_convert="C:appAdministratororadataorcl","D:oradatapdb"
*.standby_file_management="AUTO"
6.创建口令文件
将主库下的口令文件拷贝一份,重命名即可,当然也可以创建,注意密码要跟主库保持一致。
mv PWDorcl.ora PWDpdb.ora三、创建physical standby database
创建物理standby有两种方式:
1)基于备份集创建
2)从活动的主库直接复制
选择2)直接复制
1.查看监听状态
C:>lsnrctl statusLSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 28-4月 -2014 11:14:04Copyright (c) 1991, 2010, Oracle.  All rights reserved.正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=kermart)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期                  28-4月 -2014 11:13:43
正常运行时间              0 天 0 小时 0 分 22 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          C:appAdministratorproduct11.2.0dbhome_1NETWORKADMINlistener.ora
监听程序日志文件          c:appadministratordiag nslsnrkermartlisteneralertlog.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=kermart)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC1521ipc)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "pdb" 包含 1 个实例。
  实例 "pdb", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功2.通过pfile将备库启动到NOMOUNT状态
SQL> startup nomount pfile="C:appAdministratorproduct11.2.0dbhome_1databaseinitpdb.ora";
ORACLE 例程已经启动。Total System Global Area 1235959808 bytes
Fixed Size                  2175288 bytes
Variable Size            989859528 bytes
Database Buffers          234881024 bytes
Redo Buffers                9043968 bytes
3.进行复制
C:>rman target / auxiliary sys/oracle@pdb恢复管理器: Release 11.2.0.1.0 - Production on 星期一 4月 28 11:15:53 2014Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.连接到目标数据库: ORCL (DBID=1364729008)
已连接到辅助数据库: ORCL (未装载)
RMAN> duplicate target database for standby from active database nofilenamecheck dorecover;启动 Duplicate Db 于 28-4月 -14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=10 设备类型=DISK内存脚本的内容:
{
  backup as copy reuse
  targetfile  "C:appAdministratorproduct11.2.0dbhome_1DATABASEPWDorcl.ORA" auxiliary format
 "C:appAdministratorproduct11.2.0dbhome_1DATABASEPWDpdb.ORA"  ;
}
正在执行内存脚本启动 backup 于 28-4月 -14
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=20 设备类型=DISK
完成 backup 于 28-4月 -14内存脚本的内容:
{
  backup as copy current controlfile for standby auxiliary format  "D:ORADATAPDBCONTROL01.CTL";
  restore clone controlfile to  "C:APPADMINISTRATORFLASH_RECOVERY_AREAPDBCONTROL02.CTL" from
 "D:ORADATAPDBCONTROL01.CTL";
}
正在执行内存脚本启动 backup 于 28-4月 -14
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
复制备用控制文件
输出文件名=C:APPADMINISTRATORPRODUCT11.2.0DBHOME_1DATABASESNCFORCL.ORA 标记=TAG20140428T111659 RECID=6 STAMP=846069421
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:04
完成 backup 于 28-4月 -14启动 restore 于 28-4月 -14
使用通道 ORA_AUX_DISK_1通道 ORA_AUX_DISK_1: 已复制控制文件副本
完成 restore 于 28-4月 -14内存脚本的内容:
{
  sql clone "alter database mount standby database";
}
正在执行内存脚本sql 语句: alter database mount standby database内存脚本的内容:
{
  set newname for tempfile  1 to
 "D:ORADATAPDBTEMP01.DBF";
  switch clone tempfile all;
  set newname for datafile  1 to
 "D:ORADATAPDBSYSTEM01.DBF";
  set newname for datafile  2 to
 "D:ORADATAPDBSYSAUX01.DBF";
  set newname for datafile  3 to
 "D:ORADATAPDBUNDOTBS01.DBF";
  set newname for datafile  4 to
 "D:ORADATAPDBUSERS01.DBF";
  set newname for datafile  5 to
 "D:ORADATAPDBEXAMPLE01.DBF";
  set newname for datafile  6 to
 "D:ORADATAPDBTBS01.DBF";
  set newname for datafile  7 to
 "D:ORADATAPDBUNDOTBS02.DBF";
  set newname for datafile  8 to
 "D:ORADATAPDBRMAN_TBS01.DBF";
  backup as copy reuse
  datafile  1 auxiliary format
 "D:ORADATAPDBSYSTEM01.DBF"  datafile
 2 auxiliary format
 "D:ORADATAPDBSYSAUX01.DBF"  datafile
 3 auxiliary format
 "D:ORADATAPDBUNDOTBS01.DBF"  datafile
 4 auxiliary format
 "D:ORADATAPDBUSERS01.DBF"  datafile
 5 auxiliary format
 "D:ORADATAPDBEXAMPLE01.DBF"  datafile
 6 auxiliary format
 "D:ORADATAPDBTBS01.DBF"  datafile
 7 auxiliary format
 "D:ORADATAPDBUNDOTBS02.DBF"  datafile
 8 auxiliary format
 "D:ORADATAPDBRMAN_TBS01.DBF"  ;
  sql "alter system archive log current";
}
正在执行内存脚本正在执行命令: SET NEWNAME临时文件 1 在控制文件中已重命名为 D:ORADATAPDBTEMP01.DBF正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME启动 backup 于 28-4月 -14
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00006 名称=C:APPADMINISTRATORORADATAORCLTBS01.DBF
输出文件名=D:ORADATAPDBTBS01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:55
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00001 名称=C:APPADMINISTRATORORADATAORCLSYSTEM01.DBF
输出文件名=D:ORADATAPDBSYSTEM01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:55
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00002 名称=C:APPADMINISTRATORORADATAORCLSYSAUX01.DBF
输出文件名=D:ORADATAPDBSYSAUX01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00003 名称=C:APPADMINISTRATORORADATAORCLUNDOTBS01.DBF
输出文件名=D:ORADATAPDBUNDOTBS01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00007 名称=C:APPADMINISTRATORORADATAORCLUNDOTBS02.DBF
输出文件名=D:ORADATAPDBUNDOTBS02.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00005 名称=C:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF
输出文件名=D:ORADATAPDBEXAMPLE01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00008 名称=C:APPADMINISTRATORORADATAORCLRMAN_TBS01.DBF
输出文件名=D:ORADATAPDBRMAN_TBS01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00004 名称=C:APPADMINISTRATORORADATAORCLUSERS01.DBF
输出文件名=D:ORADATAPDBUSERS01.DBF 标记=TAG20140428T111715
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:07
完成 backup 于 28-4月 -14sql 语句: alter system archive log current内存脚本的内容:
{
  backup as copy reuse
  archivelog like  "C:APPADMINISTRATORFLASH_RECOVERY_AREAORCLARCHIVELOG2014_04_28O1_MF_1_8_9OVL1Z3C_.ARC" auxiliary format
 "D:ORADATAARCHLOGARC0000000008_0844855394.0001"  archivelog like
 "C:APPADMINISTRATORFLASH_RECOVERY_AREAORCLARCHIVELOG2014_04_28O1_MF_1_9_9OVL9CLM_.ARC" auxiliary format
 "D:ORADATAARCHLOGARC0000000009_0844855394.0001"  ;
  catalog clone archivelog  "D:ORADATAARCHLOGARC0000000008_0844855394.0001";
  catalog clone archivelog  "D:ORADATAARCHLOGARC0000000009_0844855394.0001";
  switch clone datafile all;
}
正在执行内存脚本启动 backup 于 28-4月 -14
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始复制归档日志
输入归档日志线程=1 序列=8 RECID=165 STAMP=846069440
输出文件名=D:ORADATAARCHLOGARC0000000008_0844855394.0001 RECID=0 STAMP=0
通道 ORA_DISK_1: 归档日志复制完成, 经过时间: 00:00:01
通道 ORA_DISK_1: 正在开始复制归档日志
输入归档日志线程=1 序列=9 RECID=166 STAMP=846069675
输出文件名=D:ORADATAARCHLOGARC0000000009_0844855394.0001 RECID=0 STAMP=0
通道 ORA_DISK_1: 归档日志复制完成, 经过时间: 00:00:01
完成 backup 于 28-4月 -14已编目的归档日志
归档日志文件名=D:ORADATAARCHLOGARC0000000008_0844855394.0001 RECID=1 STAMP=846069680已编目的归档日志
归档日志文件名=D:ORADATAARCHLOGARC0000000009_0844855394.0001 RECID=2 STAMP=846069680数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=6 STAMP=846069680 文件名=D:ORADATAPDBSYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=7 STAMP=846069681 文件名=D:ORADATAPDBSYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=846069681 文件名=D:ORADATAPDBUNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=9 STAMP=846069681 文件名=D:ORADATAPDBUSERS01.DBF
数据文件 5 已转换成数据文件副本
输入数据文件副本 RECID=10 STAMP=846069681 文件名=D:ORADATAPDBEXAMPLE01.DBF
数据文件 6 已转换成数据文件副本
输入数据文件副本 RECID=11 STAMP=846069682 文件名=D:ORADATAPDBTBS01.DBF
数据文件 7 已转换成数据文件副本
输入数据文件副本 RECID=12 STAMP=846069682 文件名=D:ORADATAPDBUNDOTBS02.DBF
数据文件 8 已转换成数据文件副本
输入数据文件副本 RECID=13 STAMP=846069682 文件名=D:ORADATAPDBRMAN_TBS01.DBF内存脚本的内容:
{
  set until scn  2918155;
  recover
  standby
  clone database
    delete archivelog
  ;
}
正在执行内存脚本正在执行命令: SET until clause启动 recover 于 28-4月 -14
使用通道 ORA_AUX_DISK_1正在开始介质的恢复线程 1 序列 8 的归档日志已作为文件 D:ORADATAARCHLOGARC0000000008_0844855394.0001 存在于磁盘上
线程 1 序列 9 的归档日志已作为文件 D:ORADATAARCHLOGARC0000000009_0844855394.0001 存在于磁盘上
归档日志文件名=D:ORADATAARCHLOGARC0000000008_0844855394.0001 线程=1 序列=8
归档日志文件名=D:ORADATAARCHLOGARC0000000009_0844855394.0001 线程=1 序列=9
介质恢复完成, 用时: 00:00:03
完成 recover 于 28-4月 -14
完成 Duplicate Db 于 28-4月 -144.检查standby数据库
set oracle_sid=pdb
SQL>sqlplus / as sysdba
SQL> select status from v$instance;
STATUS
------------------------
MOUNTED
SQL> select member from v$logfile;
MEMBER
------------------------------------
D:ORADATAPDBREDO03.LOG
D:ORADATAPDBREDO02.LOG
D:ORADATAPDBREDO01.LOG
SQL> select * from v$dbfile;
    FILE# NAME
---------- ------------------------------
        4 D:ORADATAPDBUSERS01.DBF
        3 D:ORADATAPDBUNDOTBS01.DBF
        2 D:ORADATAPDBSYSAUX01.DBF
        1 D:ORADATAPDBSYSTEM01.DBF
        5 D:ORADATAPDBEXAMPLE01.DBF
        6 D:ORADATAPDBTBS01.DBF
        7 D:ORADATAPDBUNDOTBS02.DBF
        8 D:ORADATAPDBRMAN_TBS01.DBF
已选择8行。
SQL> select name from v$tempfile;
NAME
------------------------------------
D:ORADATAPDBTEMP01.DBF
SQL> show parameter control
NAME                                TYPE                  VALUE
------------------------------------ ---------------------- ------------------------------
control_file_record_keep_time        integer                14
control_files                        string                D:ORADATAPDBCONTROL01.CTL,
                                                            C:APPADMINISTRATORFLASH_REC
                                                            OVERY_AREAPDBCONTROL02.CTL
control_management_pack_access      string                DIAGNOSTIC+TUNING
SQL> show parameter spfile
NAME                                TYPE                  VALUE
------------------------------------ ---------------------- ------------------------------
spfile                              string5. 创建备库standby logfile
standby的redo log日志要比主库的redo log多一组。
主库的redo log
SQL> select group#,thread#,sequence#,members,archived,status from v$log;    GROUP#    THREAD#  SEQUENCE#    MEMBERS ARCHIV STATUS
---------- ---------- ---------- ---------- ------ ------------------------
        1          1        10          1 YES    INACTIVE
        2          1        11          1 NO    CURRENT
        3          1          9          1 YES    INACTIVE
主库是3组,每组一个,那么备库就应该建立4组,每组一个。
SQL> alter database add standby logfile group 4 "D:oradatapdb edo04.log" size 50M;
数据库已更改。
SQL> alter database add standby logfile group 5 "D:oradatapdb edo05log" size 50M;
数据库已更改。
SQL> alter database add standby logfile group 6 "D:oradatapdb edo06log" size 50M;
数据库已更改。
SQL> alter database add standby logfile group 7 "D:oradatapdb edo07log" size 50M;
数据库已更改。6.在主库添加standby日志
SQL> alter database add standby logfile group 4 "C:appAdministratororadataorcl edo04.log" size 50M;
数据库已更改。
SQL> alter database add standby logfile group 5 "C:appAdministratororadataorcl edo05.log" size 50M;
数据库已更改。
SQL> alter database add standby logfile group 6 "C:appAdministratororadataorcl edo06.log" size 50M;
数据库已更改。
SQL> alter database add standby logfile group 7 "C:appAdministratororadataorcl edo07.log" size 50M;
数据库已更改。四、 测试
1. 主库的归档日志情况
SQL> archive log list;
数据库日志模式            存档模式
自动存档            启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列    9
下一个存档日志序列  11
当前日志序列          11
2. 备库的归档情况
SQL> archive log list;
数据库日志模式            存档模式
自动存档            启用
存档终点            D:oradataarchlog
最早的联机日志序列    11
下一个存档日志序列  0
当前日志序列          11
3.备库上开启redo apply
SQL>alter database recover managed standby database disconnect from session;数据库已更改。
4.在主库端切换日志,查看同步
SQL> alter system switch logfile;系统已更改。
SQL> select max(SEQUENCE#) from v$archived_log;MAX(SEQUENCE#)
--------------
          156
备库端:
SQL> select max(SEQUENCE#) from v$archived_log;MAX(SEQUENCE#)
--------------
          156至此,Oracle11gR2的physical standby database搭建完成。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址