Oracle 11.2.0.1.0通过rman在win xp上创建物理standby

0. 概要说明

  ORACLE版本:32位的Oracle Database 11.2.0.1.0

  OS版本:32位的WinXP SP3

  主库SID:primary

  从库SID:standby

  优势:通过RMAN创建Dataguard无需主库宕机,实施起来相对简单

1. DBCA建立主库,SID为primary

2. 开启主库归档模式

C:\>set oracle_sid=primary

C:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 6月 17 15:09:39 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select log_mode from v$database;

LOG_MODE
------------------------
NOARCHIVELOG

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  313860096 bytes
Fixed Size                  1374304 bytes
Variable Size             138413984 bytes
Database Buffers          167772160 bytes
Redo Buffers                6299648 bytes
数据库装载完毕。
SQL> alter database archivelog;

数据库已更改。

SQL> select log_mode from v$database;

LOG_MODE
------------------------
ARCHIVELOG

SQL> alter database open;

数据库已更改。

SQL>


3. 开启强制日志记录

SQL> ALTER DATABASE FORCE LOGGING;

数据库已更改。

SQL>

4. 为主库添加Standby Redo LogOracle建议Standby Redo Log大小和Online Redo Log大小一致,并至少多出一组

SQL> select group#,thread#,bytes/1024/1024 from v$log;

    GROUP#    THREAD# BYTES/1024/1024
---------- ---------- ---------------
         1          1              50
         2          1              50
         3          1              50

SQL> alter database add standby logfile 'C:\ORACLE\ORADATA\PRIMARY\SRL01' size 50M;

数据库已更改。

SQL> alter database add standby logfile 'C:\ORACLE\ORADATA\PRIMARY\SRL02' size 50M;

数据库已更改。

SQL> alter database add standby logfile 'C:\ORACLE\ORADATA\PRIMARY\SRL03' size 50M;

数据库已更改。

SQL> alter database add standby logfile 'C:\ORACLE\ORADATA\PRIMARY\SRL04' size 50M;

数据库已更改。

SQL> select group#,bytes/1024/1024 from v$standby_log;

    GROUP# BYTES/1024/1024
---------- ---------------
         4              50
         5              50
         6              50
         7              50

SQL>



5. 配置Dataguard相关参数

SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)';

系统已更改。

SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=C:\oracle\oradata\primary\arch1\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary';

系统已更改。

SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';

系统已更改。

SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;

系统已更改。

SQL> alter system set FAL_SERVER=standby;

系统已更改。

SQL> alter system set FAL_CLIENT=primary;

系统已更改。

SQL> alter system set DB_FILE_NAME_CONVERT='C:\oracle\oradata\standby\','C:\oracle\oradata\primary' scope=spfile;

系统已更改。

SQL> alter system set LOG_FILE_NAME_CONVERT='C:\oracle\oradata\standby\arch1\','C:\oracle\oradata\primary\arch1' scope=spfile;

系统已更改。



6. 配置监听相关参数

编辑C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora为如下内容

# listener.ora Network Configuration File: C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = primary)
      (ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
      (SID_NAME = primary)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = standby)
      (ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
      (SID_NAME = standby)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = PC8896-20120219)(PORT = 1521))
  )

ADR_BASE_LISTENER = c:\oracle\product\11.2.0\dbhome_1\log



编辑C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora为如下内容

PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = PC8896-20120219)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = primary)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = PC8896-20120219)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = standby)
    )
  )


测试tnsping可以同时连通主库和从库

C:\>tnsping primary

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 17-6月 -2012 20:22:56

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

已使用的参数文件:
C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora


已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = PC8896-20120219)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = primary)))
OK (40 毫秒)

C:\>tnsping standby

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 17-6月 -2012 20:23:01

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

已使用的参数文件:
C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora


已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = PC8896-20120219)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = standby)))
OK (30 毫秒)

C:\>lsnrctl status

LSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 17-6月 -2012 20:23:24

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=PC8896-20120219)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
启动日期                  17-6月 -2012 14:00:01
正常运行时间              0 天 6 小时 23 分 31 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
监听程序日志文件          c:\oracle\product\11.2.0\dbhome_1\log\diag\tnslsnr\PC8896-20120219\listener\alert\log.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PC8896-20120219)(PORT=1521)))
服务摘要..
服务 "primary" 包含 2 个实例。
  实例 "primary", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
  实例 "primary", 状态 READY, 包含此服务的 1 个处理程序...
服务 "primaryXDB" 包含 1 个实例。
  实例 "primary", 状态 READY, 包含此服务的 1 个处理程序...
服务 "standby" 包含 1 个实例。
  实例 "standby", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功

C:\>



7. 创建从库密码文件

C:\>copy C:\oracle\product\11.2.0\dbhome_1\database\PWDprimary.ora C:\oracle\product\11.2.0\dbhome_1\database\PWDstandby.ora
已复制         1 个文件。

C:\>


8. 创建从库启动参数文件

编辑C:\oracle\product\11.2.0\dbhome_1\database\INITstandby.ora为如下内容

DB_NAME=primary
DB_UNIQUE_NAME=standby
DB_BLOCK_SIZE=8192


9. 创建从库目录结构

mkdir C:\oracle\oradata\standby\arch1

mkdir c:\oracle\diag\rdbms\primary\standby\trace

mkdir c:\oracle\diag\rdbms\primary\standby\cdump


10. 创建并启动从库实例到nomount状态

C:\>oradim -new -sid standby -startmode manual
实例已创建。

C:\>set oracle_sid=standby

C:\>sqlplus "/ as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 6月 17 20:27:27 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup nomount pfile=C:\oracle\product\11.2.0\dbhome_1\database\INITstandby.ora
ORACLE 例程已经启动。

Total System Global Area  150667264 bytes
Fixed Size                  1373152 bytes
Variable Size              92277792 bytes
Database Buffers           50331648 bytes
Redo Buffers                6684672 bytes
SQL> create spfile from pfile;

文件已创建。

SQL>


11. 测试可以通过Oracle Net正常连通主从库

C:\>sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 6月 17 20:28:34 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

SQL> connect sys/oracle@primary as sysdba
已连接。
SQL> connect sys/oracle@standby as sysdba
已连接。
SQL>



12. 通过RMAN创建从库

通过RMAN连接目标库(主库)与辅助库(从库)然后执行以下脚本,注意脚本里面的是反斜杠(unix需用正斜杠)

rman target sys/oracle@primary auxiliary sys/oracle@standby

run {
duplicate target database for standby from active database
spfile
  parameter_value_convert 'primary','standby'
  set db_unique_name='standby'
  set db_file_name_convert='\primary\','\standby\'
  set log_file_name_convert='\primary\','\standby\'
  set control_files='C:\oracle\oradata\standby\CONTROL01.CTL'
  set log_archive_max_processes='5'
  set fal_client='standby'
  set fal_server='primary'
  set standby_file_management='AUTO'
  set log_archive_config='dg_config=(primary,standby)'
  set log_archive_dest_1='service=primary ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primary'
;
}


脚本输出

C:\>rman target sys/oracle@primary auxiliary sys/oracle@standby

恢复管理器: Release 11.2.0.1.0 - Production on 星期日 6月 17 20:46:53 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

连接到目标数据库: PRIMARY (DBID=1623612784)
已连接到辅助数据库: PRIMARY (未装载)

RMAN> run {
2> duplicate target database for standby from active database
3> spfile
4>   parameter_value_convert 'primary','standby'
5>   set db_unique_name='standby'
6>   set db_file_name_convert='\primary\','\standby\'
7>   set log_file_name_convert='\primary\','\standby\'
8>   set control_files='C:\oracle\oradata\standby\CONTROL01.CTL'
9>   set log_archive_max_processes='5'
10>   set fal_client='standby'
11>   set fal_server='primary'
12>   set standby_file_management='AUTO'
13>   set log_archive_config='dg_config=(primary,standby)'
14>   set log_archive_dest_1='service=primary ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primary'
15> ;
16> }

启动 Duplicate Db 于 17-6月 -12
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=96 设备类型=DISK

内存脚本的内容:
{
   backup as copy reuse
   targetfile  'c:\oracle\product\11.2.0\dbhome_1\DATABASE\PWDprimary.ORA' auxiliary format
 'c:\oracle\product\11.2.0\dbhome_1\DATABASE\PWDstandby.ORA'   targetfile
 'C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILEPRIMARY.ORA' auxiliary format
 'C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILESTANDBY.ORA'   ;
   sql clone "alter system set spfile= ''C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILESTANDBY.ORA''";
}
正在执行内存脚本

启动 backup 于 17-6月 -12
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=146 设备类型=DISK
完成 backup 于 17-6月 -12

sql 语句: alter system set spfile= ''C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILESTANDBY.ORA''

内存脚本的内容:
{
   sql clone "alter system set  audit_file_dest =
 ''c:\oracle\admin\standby\adump'' comment=
 '''' scope=spfile";
   sql clone "alter system set  dispatchers =
 ''(PROTOCOL=TCP) (SERVICE=standbyXDB)'' comment=
 '''' scope=spfile";
   sql clone "alter system set  db_unique_name =
 ''standby'' comment=
 '''' scope=spfile";
   sql clone "alter system set  db_file_name_convert =
 ''\primary\'', ''\standby\'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_file_name_convert =
 ''\primary\'', ''\standby\'' comment=
 '''' scope=spfile";
   sql clone "alter system set  control_files =
 ''C:\oracle\oradata\standby\CONTROL01.CTL'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_max_processes =
 5 comment=
 '''' scope=spfile";
   sql clone "alter system set  fal_client =
 ''standby'' comment=
 '''' scope=spfile";
   sql clone "alter system set  fal_server =
 ''primary'' comment=
 '''' scope=spfile";
   sql clone "alter system set  standby_file_management =
 ''AUTO'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_config =
 ''dg_config=(primary,standby)'' comment=
 '''' scope=spfile";
   sql clone "alter system set  log_archive_dest_1 =
 ''service=primary ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primary'' comment=
 '''' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
}
正在执行内存脚本

sql 语句: alter system set  audit_file_dest =  ''c:\oracle\admin\standby\adump'' comment= '''' scope=spfile

sql 语句: alter system set  dispatchers =  ''(PROTOCOL=TCP) (SERVICE=standbyXDB)'' comment= '''' scope=spfile

sql 语句: alter system set  db_unique_name =  ''standby'' comment= '''' scope=spfile

sql 语句: alter system set  db_file_name_convert =  ''\primary\'', ''\standby\'' comment= '''' scope=spfile

sql 语句: alter system set  log_file_name_convert =  ''\primary\'', ''\standby\'' comment= '''' scope=spfile

sql 语句: alter system set  control_files =  ''C:\oracle\oradata\standby\CONTROL01.CTL'' comment= '''' scope=spfile

sql 语句: alter system set  log_archive_max_processes =  5 comment= '''' scope=spfile

sql 语句: alter system set  fal_client =  ''standby'' comment= '''' scope=spfile

sql 语句: alter system set  fal_server =  ''primary'' comment= '''' scope=spfile

sql 语句: alter system set  standby_file_management =  ''AUTO'' comment= '''' scope=spfile

sql 语句: alter system set  log_archive_config =  ''dg_config=(primary,standby)'' comment= '''' scope=spfile

sql 语句: alter system set  log_archive_dest_1 =  ''service=primary ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=primary'' comment= '''' scope=spfile

Oracle 实例已关闭

已连接到辅助数据库 (未启动)
Oracle 实例已启动

系统全局区域总计     313860096 字节

Fixed Size                     1374304 字节
Variable Size                104859552 字节
Database Buffers             201326592 字节
Redo Buffers                   6299648 字节

内存脚本的内容:
{
   backup as copy current controlfile for standby auxiliary format  'C:\ORACLE\ORADATA\STANDBY\CONTROL01.CTL';
}
正在执行内存脚本

启动 backup 于 17-6月 -12
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
复制备用控制文件
输出文件名=C:\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFPRIMARY.ORA 标记=TAG20120617T204715 RECID=2 STAMP=786228436
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
完成 backup 于 17-6月 -12

内存脚本的内容:
{
   sql clone 'alter database mount standby database';
}
正在执行内存脚本

sql 语句: alter database mount standby database

内存脚本的内容:
{
   set newname for tempfile  1 to
 "C:\ORACLE\ORADATA\STANDBY\TEMP01.DBF";
   switch clone tempfile all;
   set newname for datafile  1 to
 "C:\ORACLE\ORADATA\STANDBY\SYSTEM01.DBF";
   set newname for datafile  2 to
 "C:\ORACLE\ORADATA\STANDBY\SYSAUX01.DBF";
   set newname for datafile  3 to
 "C:\ORACLE\ORADATA\STANDBY\UNDOTBS01.DBF";
   set newname for datafile  4 to
 "C:\ORACLE\ORADATA\STANDBY\USERS01.DBF";
   backup as copy reuse
   datafile  1 auxiliary format
 "C:\ORACLE\ORADATA\STANDBY\SYSTEM01.DBF"   datafile
 2 auxiliary format
 "C:\ORACLE\ORADATA\STANDBY\SYSAUX01.DBF"   datafile
 3 auxiliary format
 "C:\ORACLE\ORADATA\STANDBY\UNDOTBS01.DBF"   datafile
 4 auxiliary format
 "C:\ORACLE\ORADATA\STANDBY\USERS01.DBF"   ;
   sql 'alter system archive log current';
}
正在执行内存脚本

正在执行命令: SET NEWNAME

临时文件 1 在控制文件中已重命名为 C:\ORACLE\ORADATA\STANDBY\TEMP01.DBF

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

正在执行命令: SET NEWNAME

启动 backup 于 17-6月 -12
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00001 名称=C:\ORACLE\ORADATA\PRIMARY\SYSTEM01.DBF
输出文件名=C:\ORACLE\ORADATA\STANDBY\SYSTEM01.DBF 标记=TAG20120617T204729
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:45
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00002 名称=C:\ORACLE\ORADATA\PRIMARY\SYSAUX01.DBF
输出文件名=C:\ORACLE\ORADATA\STANDBY\SYSAUX01.DBF 标记=TAG20120617T204729
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00003 名称=C:\ORACLE\ORADATA\PRIMARY\UNDOTBS01.DBF
输出文件名=C:\ORACLE\ORADATA\STANDBY\UNDOTBS01.DBF 标记=TAG20120617T204729
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00004 名称=C:\ORACLE\ORADATA\PRIMARY\USERS01.DBF
输出文件名=C:\ORACLE\ORADATA\STANDBY\USERS01.DBF 标记=TAG20120617T204729
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 17-6月 -12

sql 语句: alter system archive log current

内存脚本的内容:
{
   switch clone datafile all;
}
正在执行内存脚本

数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=2 STAMP=786228540 文件名=C:\ORACLE\ORADATA\STANDBY\SYSTEM01.DBF
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=3 STAMP=786228541 文件名=C:\ORACLE\ORADATA\STANDBY\SYSAUX01.DBF
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=4 STAMP=786228541 文件名=C:\ORACLE\ORADATA\STANDBY\UNDOTBS01.DBF
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=5 STAMP=786228541 文件名=C:\ORACLE\ORADATA\STANDBY\USERS01.DBF
完成 Duplicate Db 于 17-6月 -12

RMAN>



13. 验证日志传输

查看primary最大归档日志序号:

SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
             9

SQL>


查看standby最大归档日志序号,刚开始没有,开启MRP (Managed Recovery Process)后同步完成,可能有几秒的延迟:

SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------


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

数据库已更改。

SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------


SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
             9

SQL>


除此之外,也可以在主库执行select group#,sequence#,archived,status from v$log查询和在从库执行select group#,sequence#,archived,status from v$standby_log查询来查看日志的传输情况。




REF:

1. Step by Step Guide on Creating Physical Standby Using RMAN DUPLICATE...FROM ACTIVE DATABASE [ID 1075908.1]


2. Oracle® Data Guard Concepts and Administration 11g Release 2 (11.2)

http://docs.oracle.com/cd/E11882_01/server.112/e25608/toc.htm


3. Creating a Physical Standby Database

http://docs.oracle.com/cd/E11882_01/server.112/e25608/create_ps.htm#i63561


4. Managing Physical and Snapshot Standby Databases

http://docs.oracle.com/cd/E11882_01/server.112/e25608/manage_ps.htm


5. Duplicating a Database

http://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmdupdb.htm#i1008564

你可能感兴趣的:(oracle,sql,XP,database,System,archive)