Standby研究(zt)

一、在一个机器上配置dataguard
环境:Windows,Oracle92,已建数据库biti,instance biti(主节点)
目的:在数据库biti中建一instance cjh(备用节点),做为instance biti的dataguard。

1)把主节点改为归档模式
SQL> alter system set log_archive_start=true scope=spfile;
System altered.

SQL> alter system set log_archive_format='ARC%t%s.arc' scope=spfile;
System altered.

SQL> alter system set log_archive_dest_1='location=D:oracleoradatabitiarchive' scope=spfile;
System altered.
SQL> shutdown immediate
...

SQL> startup mount
...

SQL> alter database archivelog;
Database altered.

SQL> alter database open;
Database altered.
2)复制数据文件、日志文件
biti的数据文件、日志文件在D:oracleoradatabiti下面,在biti关闭的情况下,把它们复制到D:oradatacjh下面,这个便是新建的cjh的数据库文件目录。
3)复制参数文件
SQL> create pfile from spfile;
File created.
biti的参数文件initbiti.ora从spfile创建来,放在D:oracleora92database下面,在biti关闭的情况下,把initbiti.ora另存一份为initcjh.ora放在同样的目录下面。
4)修改cjh的参数文件
修改路径名,增加几个参数,修改后如下:
*.db_name='biti'
...
*.aq_tm_processes=1
*.background_dump_dest='D:oracleadmincjhbdump'
*.compatible='9.2.0.0.0'
*.control_files='D:oradatacjhSTDBYCTL.CTL'
*.core_dump_dest='D:oracleadmincjhcdump'
...
*.log_archive_dest_1='LOCATION=D:oradatacjharchive'
*.log_archive_dest_2=''
*.log_archive_format='ARC%t%s.arc'
*.log_archive_start=true
...
*.user_dump_dest='/opt/oracle/admin/primary/udump'
*.standby_archive_dest='d:oradatacjhstdarch'
*.fal_server='BITI'
*.fal_client='CJH'
*. standby_file_management='AUTO'
...
*.lock_name_space='CJH'
注意:
fal_server与fal_client
这两个参数是9i的新参数,指明了自动日志同步,在以前的环境中(如8i),只有手工解决日志差异,但是9i的这两
个参数可以自动检测并解决日志差异。
例如:
fal_server='primary'
fal_client='standby'
其中primary与standby必须是连接到主数据库与备用数据库的连接

standby_file_management
这个参数也是9i的新参数,可以自动同步数据文件。
例如:
standby_file_management =auto

在同一台机器上面做standby的标准的做法,是用同样的db_name, 不通的SID, 然后通过Lock_name_space来配置的。

如果db_name相同,不配置Lock_name_space,那么Instance 是无法Mount的。

standby和primary的db_name必须一致的。不能修改。
修改db_name需要resetlogs,所以是不可一的。
最后一行参数是在一个机器上配置dataguard必须的。
另外还要把参数文件中的*.standby_file_management='AUTO'去掉,这是为了下面可以改控制文件
5)创建instance cjh
C:Documents and SettingsUser>oradim -new -sid cjh -srvc OracleServicecjh
6)创建口令文件

D:oracleora92database>orapwd file=pwdcjh.ora password=oracle entries=2
7)从biti创建cjh的控制文件
SQL> alter database create standby controlfile as 'D:/oradata/cjh/stdbyctl.ctl';
Database altered.
8)修改cjh的控制文件
因为cjh的数据库文件跟biti的数据库文件不在同一目录,所以必须修改cjh的控制文件stdbyctl.ctl,在cjh这个instance的mount状态修改
SQL> startup nomount
ORACLE instance started.
Total System Global Area 139534344 bytes
Fixed Size 454664 bytes
Variable Size 67108864 bytes
Database Buffers 71303168 bytes
Redo Buffers 667648 bytes

SQL> alter database mount standby database;
Database altered.
SQL> select name from v$datafile;
NAME
--------------------------------------
D:ORACLEORADATABITISYSTEM01.DBF
D:ORACLEORADATABITIUNDOTBS01.DBF
D:ORACLEORADATABITIUSERS01.DBF
SQL> alter database rename file 'D:ORACLEORADATABITISYSTEM01.DBF' to 'D:ORADATACJHSYSTEM01.DBF';
Database altered.
SQL> alter database rename file 'D:ORACLEORADATABITIUNDOTBS01.DBF' to 'D:ORADATACJHUNDOTBS01.DBF';
Database altered.
SQL> alter database rename file 'D:ORACLEORADATABITIUSERS01.DBF' to 'D:ORADATACJHUSERS01.DBF';
Database altered.

如果在参数文件initcjh.ora中加入
*.db_file_name_convert='D:ORACLEORADATABITI','D:ORADATACJH'
那么这一步是可以省略的,oracle会根据这个参数强制将控制文件里面对应的文件做转换。
9)创建必要的目录
创建D:oracleadmincjh目录,其下再创建bdump,cdump,create,pfile,udump目录,这是跟dump有关的一些目录。
创建D:oradatacjharchive目录,作为本地归档路径,创建D:oradatacjhstdarch目录,作为网络归档路径。
10)配置监听器listener.ora

在SID_LIST_LISTENER 里面加入:
(SID_DESC =
(GLOBAL_DBNAME = cjh)
(ORACLE_HOME = D:oracleora92)
(SID_NAME = cjh)
)
11)配置tnsnames.ora

加入如下内容:
CJH =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = cjh)
)
)

BITI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = biti)
)
)
12)用tnsping测试网络连通,再用网络连接的方式登陆
D:oracleora92database>sqlplus system/oracle@biti
SQL*Plus: Release 9.2.0.6.0 - Production on Thu Jun 30 20:19:23 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production

SQL> select name from v$database;
NAME
---------
BITI
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
biti

D:oracleora92database>sqlplus " sys/oracle@cjh as sysdba"
SQL*Plus: Release 9.2.0.6.0 - Production on Thu Jun 30 20:15:40 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production
SQL> select name from v$database;
NAME
---------
BITI
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
cjh
13)启动备用数据库
备用库作为dataguard,是处于mount状态的。
SQL> startup nomount
ORACLE instance started.
Total System Global Area 139534344 bytes
Fixed Size 454664 bytes
Variable Size 67108864 bytes
Database Buffers 71303168 bytes
Redo Buffers 667648 bytes

SQL> alter database mount standby database;
Database altered.
SQL> alter database open read only --进行检测
此时可Query Database 中的数据。
SQL> alter database recover managed standby database disconnect from session;
Database altered.
14)在主节点设置网络归档路径,测试
SQL> alter system set log_archive_dest_2='service=CJH mandatory reopen=60';
System altered.
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.

在备用节点可以看到生成的日志传到D:oradatacjhstdarch。
二、关于standby_file_management参数

上次在《在一个机器上配置dataguard》里面说,为了改控制文件,把从库的*.standby_file_management='AUTO'这个参数去掉了,其实,这样子是不可取的,改控制文件还是在参数文件里用db_file_name_convert这个参数进行路径转换最方便。现在来看看standby_file_management这个参数是干什么用的。


首先看到,从库的参数文件里:*.standby_file_management='AUTO'

用rman备份来配置一个dataguard。


1)备份数据文件,不用备份日志

C:Documents and SettingsUser>rman target/

Recovery Manager: Release 9.2.0.6.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: BITI (DBID=2439083928)

RMAN> backup database format 'D:oracleoradatabitibakfull_%d_%T_%s';

Starting backup at 07-JUL-05
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=18 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00002 name=D:ORACLEORADATABITIUNDOTBS01.DBF
input datafile fno=00001 name=D:ORACLEORADATABITISYSTEM01.DBF
input datafile fno=00004 name=D:ORACLEORADATABITITEST.DBF
input datafile fno=00003 name=D:ORACLEORADATABITIUSERS01.DBF
channel ORA_DISK_1: starting piece 1 at 07-JUL-05
channel ORA_DISK_1: finished piece 1 at 07-JUL-05
piece handle=D:ORACLEORADATABITIBAKFULL_BITI_20050707_18 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:15
Finished backup at 07-JUL-05

Starting Control File and SPFILE Autobackup at 07-JUL-05
piece handle=D:ORACLEORA92DATABASEC-2439083928-20050707-03 comment=NONE
Finished Control File and SPFILE Autobackup at 07-JUL-05


D:oracleoradatabitibak>ls
FULL_BITI_20050707_18


2)参数文件等等步骤见《在一个机器上配置dataguard》


3)从主库创建从库的控制文件

SQL> alter database create standby controlfile as 'D:/oradata/cjh/stdbyctl.ctl';

Database altered.


4)把从库启到mount standby状态

SQL> startup nomount
ORACLE instance started.

Total System Global Area 139534344 bytes
Fixed Size 454664 bytes
Variable Size 67108864 bytes
Database Buffers 71303168 bytes
Redo Buffers 667648 bytes
SQL> alter database mount standby database;

Database altered.


5)连到从库rman恢复

C:Documents and SettingsUser>set oracle_sid=cjh

C:Documents and SettingsUser>rman target/

Recovery Manager: Release 9.2.0.6.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

connected to target database: BITI (DBID=2439083928)

注意:由于Standby Controlfile是在Rman备份后创建的,所以Standby Controlfile中包括有Rman的备份信息,而且此测试中是相同Database name 不同Instance name的情况,所以Rman的备份是可用的,因为Rman的备份信息是通过Database name 和Database的创建日期经一算法后得到的DBID来区分的!

RMAN> restore database;

Starting restore at 07-JUL-05

using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=15 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to D:ORADATACJHSYSTEM01.DBFrestoring datafile 00002 to D:ORADATACJHUNDOTBS01.DBF
restoring datafile 00003 to D:ORADATACJHUSERS01.DBF
restoring datafile 00004 to D:ORADATACJHTEST.DBF
channel ORA_DISK_1: restored backup piece 1
piece handle=D:ORACLEORADATABITIBAKFULL_BITI_20050707_18 tag=TAG20050707T203615 params=NULL
channel ORA_DISK_1: restore complete
Finished restore at 07-JUL-05

Restore后的数据文件的位置发生变化,这是因为有

db_file_name_convert 参数据的存在!


6)从库置于恢复状态

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

Database altered.


7)在主库设置网络归档路径,测试

SQL> alter system set log_archive_dest_2='service=CJH mandatory reopen=60';

System altered.

SQL> alter system switch logfile;

System altered.

dataguard配置成功


8)在主库创建表空间,归档

SQL> create tablespace testone
2 datafile 'D:oracleoradatabititestone.dbf' size 10M;

Tablespace created.

SQL> alter system switch logfile;

System altered.

测试结果:从库自动建了表空间


9)在主库增加数据文件,归档

SQL> alter tablespace testone
2 add datafile 'D:oracleoradatabititesttwo.dbf' size 10M;

Tablespace altered.

SQL> alter system switch logfile;

System altered.

测试结果:从库自动增加了数据文件


到这里可以看到,standby_file_management='AUTO'就可以在从库自动创建表空间,增加数据文件。


10)改从库的参数文件:*.standby_file_management='manual'


11)再测试

SQL> alter tablespace testone
2 add datafile 'D:oracleoradatabititestthree.dbf' size 10M;

Tablespace altered.

SQL> alter system switch logfile;

System altered.

测试结果:从库上,日志已传,但是数据文件没有增加


这个时候,即使再改standby_file_managementdrop='auto'并且drop了主库的表空间也还是有问题的,因为从库的控制文件中已经有这个文件信息了,但是os上不能自动创建文件,现在有两个解决办法:
1:手工创建这个文件
2:手工从主数据库拷贝这个文件过去,并拷贝控制文件过去恢复

显然,第一种方法简单,那就用这个来试试吧。


12)在从库上手工创建这个文件

SQL> alter database create datafile 'D:oradatacjhtestthree.dbf' as 'D:oradatacjhtestthree.dbf';

Database altered.


13)因为数据文件的关系,恢复被迫停止了,创建数据文件之后,再启动恢复

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

Database altered.


14)看两边是否恢复到一致状态

主库上

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> select to_char(checkpoint_time,'yyyy-mm-dd hh24:mi:ss') from v$datafile;

TO_CHAR(CHECKPOINT_
-------------------
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22

7 rows selected.


从库上

SQL> select to_char(checkpoint_time,'yyyy-mm-dd hh24:mi:ss') from v$datafile;

TO_CHAR(CHECKPOINT_
-------------------
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22
2005-07-07 21:42:22

7 rows selected.


或者看从库的alert文件:alert_cjh.log

Media Recovery Log D:ORADATACJHSTDARCHARC1207.ARC
Media Recovery Log D:ORADATACJHSTDARCHARC1208.ARC
Media Recovery Log D:ORADATACJHSTDARCHARC1209.ARC
Media Recovery Waiting for thread 1 seq# 210
Media Recovery Log D:ORADATACJHSTDARCHARC1210.ARC
Media Recovery Waiting for thread 1 seq# 211


15)最后再改回*.standby_file_management='auto',又可以在从库自动创建表空间和数据文件了。

三、dataguard主从库的切换

主库:biti
从库:cjh
目的:主库从biti切换到cjh


1)biti的参数文件需要修改和增加的地方

*.log_archive_dest_1='LOCATION=D:oracleoradatabitiarchive'
*.log_archive_dest_2='service=CJH mandatory reopen=60'
*.standby_archive_dest='D:oracleoradatabitistdarch'
*.fal_client='biti'
*.fal_server='cjh'
*.standby_file_management ='AUTO'
*.lock_name_space='biti'
*.db_file_name_convert='D:ORADATACJH','D:ORACLEORADATABITI'
*.log_file_name_convert='D:ORADATACJH','D:ORACLEORADATABITI'


2)cjh的参数文件需要修改和增加的地方

*.log_archive_dest_1='LOCATION=D:oradatacjharchive'
*.log_archive_dest_2='service=BITI mandatory reopen=60'
*.standby_archive_dest='D:oradatacjhstdarch'
*.fal_client='cjh'
*.fal_server='biti'
*.standby_file_management ='AUTO'
*.lock_name_space='cjh'
*.db_file_name_convert='D:ORACLEORADATABITI','D:ORADATACJH'
*.log_file_name_convert='D:ORACLEORADATABITI','D:ORADATACJH'


3)切换biti到从库

SQL > alter database commit to switchover to physical standby with session shutdown;

Database altered.


4)关闭biti,以standby 方式打开

SQL> shutdown immediate
ORA-01507: database not mounted

ORACLE instance shut down.

SQL> create spfile from pfile;

File created.

SQL> startup nomount
ORACLE instance started.

Total System Global Area 139534344 bytes
Fixed Size 454664 bytes
Variable Size 67108864 bytes
Database Buffers 71303168 bytes
Redo Buffers 667648 bytes

SQL> alter database mount standby database;

Database altered.

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

Database altered.


5)切换cjh到主库

SQL> alter database commit to switchover to primary with session shutdown;

Database altered.


6)关闭cjh,以主库方式运行

SQL> shutdown immediate
ORA-01507: database not mounted

ORACLE instance shut down.

SQL> create spfile from pfile;

File created.

SQL> startup
ORACLE instance started.

Total System Global Area 139534344 bytes
Fixed Size 454664 bytes
Variable Size 67108864 bytes
Database Buffers 71303168 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.


SQL> alter system switch logfile;

System altered.

切换成功,cjh的日志已经正确恢复到biti,并且biti端可以自动创建表空间,增加数据文件及删除表空间。


参数文件中几个重要参数的说明:

log_archive_dest_1

动态参数。本地归档路径,由LOCATION指定是本地归档路径。


log_archive_dest_2

动态参数。网络归档路径,service指定tnsnames.ora中的tnsnames_service,mandatory指定在redo应用之前归档必须成功,reopen指定归档进程失败后试图再次归档之间的最小秒数,缺省为300秒。


Standby_archive_dest:

动态参数。指定Standby上面来自一个主库的归档日志的到达位置。


db_file_name_convert:

静态参数。将主库上的一个新数据文件的路径或文件名转换为从库上对等的路径或文件名。

log_file_name_convert:

静态参数。将主库上的一个新日志文件的路径或文件名转换为从库上对等的路径或文件名。

fal_server,fal_client:

动态参数。这两个参数是9i的新参数,指明了自动日志同步,在以前的环境中(如8i),只有手工解决日志差异,但是9i的这两个参数可以自动检测并解决日志差异。如:
fal_server='primary'
fal_client='standby'
其中primary与standby必须是连接到主数据库与备用数据库的连接 。


standby_file_management

动态参数。如值为auto,主库上表空间,数据文件的增加或者删除可以在从库上自动同步。但是当值为auto,不能进行alter database rename file ... to ... 操作。

值范围:manual,auto。默认值:manual。


lock_name_space

静态参数。在同一台机器上面用同样的db_name, 不同的SID做Standby的,通过Lock_name_space来配置mount哪个instance。

http://leetaedong.itpub.net/post/6161/39659  

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-399585/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-399585/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值