您的位置:首页 > 数据库 > Oracle

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

2012-06-17 21:24 429 查看
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='\[code]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=[code]
primary
'
;
}

脚本输出

[code]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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: