发表于:2008.03.21 14:13
分类: 三思笔记
出处:http://junsansi.itpub.net/post/29894/457837
---------------------------------------------------------------
连载第九篇
一步一步学DataGuard(9)物理standby之高级管理2
一步一步学DataGuard(8)物理standby之高级管理1
一步一步学DataGuard(7)物理standby之failover
一步一步学DataGuard(6)物理standby之switchover
一步一步学DataGuard(5)物理standby之创建示例
一步一步学DataGuard(4)物理standby之创建步骤(2)
一步一步学DataGuard(3)物理standby之创建步骤(1)
管理影响standby的primary数据库事件
为预防可能的错误,你必须知道primary数据库的某些事件可能影响standby数据库,并且了解如何处理。
某些情况下,primary数据库的某些改动会自动通过redo数据传播到standby数据库,因此不需要在standby数据库做额外的操作,而某些情况,则需要你手工调整。
下列事件会由redo传输服务及redo应用自动处理,不需要dba的干预,分别是:
l ALTER DATABASE ENABLE|DISABLE THREAD 语句(主要针对rac环境,目前基本已废弃,因为ENABLE|DISABLE INSTANCE子句完全能够实现类似功能)
l 修改表空间状态(例如read-write到read-only,online到offline)
l 创建修改删除表空间或数据文件(如果初始化参数STANDBY_FILE_MANAGEMENT被设置为AUTO的话,这点在前面第一章的时候提到过)
下列事情则需要dba手工干预:
1、 添加修改删除数据文件或表空间
前面提到了,初始化参数STANDBY_FILE_MANAGEMENT可以控制是否自动将primary数据库增加删除表空间、数据文件的改动继承到standby。
l 如果该参数值设置为auto,则自动创建。
l 如果设置为manual,则需要手工复制新创建的数据文件到standby服务器。
不过需要注意一点,如果数据文件是从其它数据库复制而来(比如通过tts),则不管STANDBY_FILE_MANAGEMENT参数值如何设置,都必须同时复制到standby数据库,并注意要修改standby数据库的控制文件。
下面分别通过示例演示STANDBY_FILE_MANAGEMENT参数值为AUTO/MANUAL值时增加及删除数据文件时的情形:
1) .STANDBY_FILE_MANAGEMENT设置为AUTO,增加及删除表空间和数据文件
我们先来看看初始化参数的设置: ----standby数据库操作
SQL> show parameter standby_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string AUTO
A) .增加新的表空间 --primary数据库操作
SQL> create tablespace mytmp datafile 'e:ora10goradatajsswebmytmp01.dbf' size 20m;
表空间已创建。
检查刚添加的数据文件
SQL> select name from v$datafile;
NAME
-----------------------------------------------
E:ORA10GORADATAJSSWEBSYSTEM01.DBF
E:ORA10GORADATAJSSWEBUNDOTBS01.DBF
E:ORA10GORADATAJSSWEBSYSAUX01.DBF
E:ORA10GORADATAJSSWEBUSERS01.DBF
E:ORA10GORADATAJSSWEBWEBTBS01.DBF
E:ORA10GORADATAJSSWEBMYTMP01.DBF
已选择6行。
切换日志
SQL> alter system switch logfile;
系统已更改。
B) .验证standby库 --standby数据库操作
SQL> select name from v$datafile;
NAME
----------------------------------------------------
E:ORA10GORADATAJSSPDGSYSTEM01.DBF
E:ORA10GORADATAJSSPDGUNDOTBS01.DBF
E:ORA10GORADATAJSSPDGSYSAUX01.DBF
E:ORA10GORADATAJSSPDGUSERS01.DBF
E:ORA10GORADATAJSSPDGWEBTBS01.DBF
E:ORA10GORADATAJSSPDGMYTMP01.DBF
已选择6行。
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
WEBTBS
MYTMP
已选择7行。
可以看到,表空间和数据文件已经自动创建,你是不是奇怪为什么数据文件路径自动变成了jsspdg,赫赫,因为我们设置了db_file_name_convert嘛。
C) .删除表空间 --primary数据库操作
SQL> drop tablespace mytmp including contents and datafiles;
表空间已删除。
SQL> select name from v$datafile;
NAME
--------------------------------------------------
E:ORA10GORADATAJSSWEBSYSTEM01.DBF
E:ORA10GORADATAJSSWEBUNDOTBS01.DBF
E:ORA10GORADATAJSSWEBSYSAUX01.DBF
E:ORA10GORADATAJSSWEBUSERS01.DBF
E:ORA10GORADATAJSSWEBWEBTBS01.DBF
SQL> alter system switch logfile;
系统已更改。
提示:使用including子句删除表空间时,
D) .验证standby数据库 --standby数据库操作
SQL> select name from v$datafile;
NAME
--------------------------------------------------
E:ORA10GORADATAJSSPDGSYSTEM01.DBF
E:ORA10GORADATAJSSPDGUNDOTBS01.DBF
E:ORA10GORADATAJSSPDGSYSAUX01.DBF
E:ORA10GORADATAJSSPDGUSERS01.DBF
E:ORA10GORADATAJSSPDGWEBTBS01.DBF
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
WEBTBS
已选择6行。
得出结论,对于初始化参数STANDBY_FILE_MANAGMENT设置为auto的话,对于表空间和数据文件的操作完全无须dba手工干预,primary和standby都能很好的处理。
2) .STANDBY_FILE_MANAGEMENT设置为MANUAL,增加及删除表空间和数据文件
A) .增加新的表空间 --primary数据库操作
SQL> create tablespace mytmp datafile 'e:ora10goradatajsswebmytmp01.dbf' size 20m;
表空间已创建。
检查刚添加的数据文件
SQL> select name from v$datafile;
NAME
-----------------------------------------------
E:ORA10GORADATAJSSWEBSYSTEM01.DBF
E:ORA10GORADATAJSSWEBUNDOTBS01.DBF
E:ORA10GORADATAJSSWEBSYSAUX01.DBF
E:ORA10GORADATAJSSWEBUSERS01.DBF
E:ORA10GORADATAJSSWEBWEBTBS01.DBF
E:ORA10GORADATAJSSWEBMYTMP01.DBF
已选择6行。
切换日志
SQL> alter system switch logfile;
系统已更改。
B) .验证standby库 --standby数据库操作
SQL> select name from v$datafile;
NAME
----------------------------------------------------
E:ORA10GORADATAJSSPDGSYSTEM01.DBF
E:ORA10GORADATAJSSPDGUNDOTBS01.DBF
E:ORA10GORADATAJSSPDGSYSAUX01.DBF
E:ORA10GORADATAJSSPDGUSERS01.DBF
E:ORA10GORADATAJSSPDGWEBTBS01.DBF
E:ORA10GPRODUCT10.2.0DB_1DATABASEUNNAMED00006
已选择6行。
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
WEBTBS
MYTMP
已选择7行。
可以看到,表空间已经自动创建,但是,数据文件却被起了个怪名字,手工修改其与primary数据库保持一致,如下(注意执行命令之后手工复制数据文件到standby):
SQL> alter database create datafile 'E:ORA10GPRODUCT10.2.0DB_1DATABASEUNNAMED00006'
2 as 'E:ora10goradatajsspdgmytmp01.dbf' ;
数据库已更改。
C) .删除表空间 --primary数据库操作
SQL> drop tablespace mytmp including contents and datafiles;
表空间已删除。
SQL> select name from v$datafile;
NAME
--------------------------------------------------
E:ORA10GORADATAJSSWEBSYSTEM01.DBF
E:ORA10GORADATAJSSWEBUNDOTBS01.DBF
E:ORA10GORADATAJSSWEBSYSAUX01.DBF
E:ORA10GORADATAJSSWEBUSERS01.DBF
E:ORA10GORADATAJSSWEBWEBTBS01.DBF
SQL> alter system switch logfile;
系统已更改。
D) .验证standby数据库 --standby数据库操作
SQL> select name from v$datafile;
NAME
----------------------------------------------------
E:ORA10GORADATAJSSPDGSYSTEM01.DBF
E:ORA10GORADATAJSSPDGUNDOTBS01.DBF
E:ORA10GORADATAJSSPDGSYSAUX01.DBF
E:ORA10GORADATAJSSPDGUSERS01.DBF
E:ORA10GORADATAJSSPDGWEBTBS01.DBF
E:ORA10GPRODUCT10.2.0DB_1DATABASEUNNAMED00006
已选择6行。
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
WEBTBS
MYTMP
已选择7行。
呀,数据还在啊。赶紧分析分析,查看alert_jsspdg.log文件,发现如下(特别注意粗体):
File #6 added to control file as 'UNNAMED00006' because
the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL
The file should be manually created to continue.
Errors with log E:ORA10GORADATAJSSPDGLOG1_753_641301252.ARC
MRP0: Background Media Recovery terminated with error 1274
Fri Jan 18 09:48:45 2008
这下明白了,为什么有个UNNAMED00006的数据文件,也晓得为啥standby数据库没能删除新加的表空间了吧,原来是后台的redo应用被停掉了,重启redo应用再来看看:
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
SQL> select name from v$datafile;
NAME
----------------------------------------------
E:ORA10GORADATAJSSPDGSYSTEM01.DBF
E:ORA10GORADATAJSSPDGUNDOTBS01.DBF
E:ORA10GORADATAJSSPDGSYSAUX01.DBF
E:ORA10GORADATAJSSPDGUSERS01.DBF
E:ORA10GORADATAJSSPDGWEBTBS01.DBF
注意,既使你在primary数据库执行删除时加上了including子句,在standby数据库仍然只会将表空间和数据文件从数据字典中删除,你还需要手工删除表空间涉及的数据文件。
再次得出结论,初始化参数STANDBY_FILE_MANAGMENT设置为manual的话,对于表空间和数据文件的操作必须有dba手工介入,你肯定会问,这太麻烦了,那我干脆配置dg的时候直接把初始化参数设置为auto不就好了嘛,en,你想的很好,不过三思需要提醒你地是,如果你的存储采用文件系统,那当然没有问题,但是如果采用了裸设备,你就必须将该参数设置为manual。
2、 重命名数据文件
如果primary数据库重命令了一个或多个数据文件,该项修改并不会自动传播到standby数据库。因为此,如果你想让standby和数据文件与primary保持一致,那你也只能自己手工操作了。这会儿就算STANDBY_FILE_MANAGEMENT也帮不上忙啦,不管它是auto还是manual。
下面通过示例做个演示:
A) .将重命名的数据文件所在表空间offline --primary数据库操作
SQL> alter tablespace webtbs offline;
表空间已更改。
B) .手工将数据文件改名(操作系统) --primary数据库操作
方式多样,不详述。
C) .通过命令修改数据字典中的数据文件路径,并online表空间 --primary数据库操作
SQL> alter tablespace webtbs rename datafile
2 'E:ORA10GORADATAJSSWEBWEBTBS01.DBF' to
3 'E:ORA10GORADATAJSSWEBTBSWEB01.DBF';
表空间已更改。
SQL> alter tablespace webtbs online;
表空间已更改。
D) .暂停redo应用,并shutdown --standby数据库操作
SQL> alter database recover managed standby database cancel;
数据库已更改。
SQL> shutdown immediate
ORA-01109: 数据库未打开
......
E) .手工将数据文件改名(操作系统) --standby数据库操作
方式多样,不详述。
F) .重启standby,修改数据文件路径(数据字典) --standby数据库操作
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1289484 bytes
Variable Size 150995700 bytes
Database Buffers 8388608 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
SQL> alter database rename file
2 'E:ORA10GORADATAJSSPDGWEBTBS01.DBF' to
3 'E:ORA10GORADATAJSSPDGTBSWEB01.DBF';
数据库已更改。
G) .重新启动redo应用。
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
H) .切换日志 --primary数据库操作






