oracle dg升级试验(10.2.0.1->10.0.2.4)

    我的总结思路是这样 的:
不管是升级单个数据库,还是升级DG,首先需要升级数据库软件,然后才升级数据字典。
升级数据库软件需要关闭数据库再升,而升级数据字典需要打开数据库再升。所以如果升级的环境是DG,那么首先升级数据库软件需要关库进行,那么这样肯定是,关原备库来升级备库的数据库软件了,因为主库还在是在用着,总不能关主库开备库吧。在备库的数据库软件升级以后,现在需要升级原备库数据字典。升级数据字典需要数据库打开状态且能读写,这样的数据库只能是主库角色了,所以需要把升级过数据库软件的原备库,切换成主库角色,来升级它的数据字典。这样原备库的数据库软件和数据字典整库升级
原来的主库也是这样操作,当原备库在升级数据字典的同时,原主库当前是备库角色,那顺便把原主库的数据库软件给升级了。而原主库的数据字典只能是再切回来,做主库角色的时候把原主库的数据字典给升级了。这样就完成原主库整套的升级。
      按照上面的分析,做DG的升级,需要做两次切换,才能完成。不管怎么最后角色还是都归位了,至少下面的升级步骤是这样的。
     
一、环境
 os :rhel 4.7
 db: oracle 10.2.0.1
 数据库A是主库, 数据库B是备库。A和B构成dataguard.

二、试验要求
  假设dataguard已经搭建好,并正常运行:A库处于open;B 库处于mount,并开启了恢复。
 
    要求:把DG从10.2.0.1升级到10.2.0.4

 三、升级步骤
   1、准备
提前做好主库A和备库B 的备份。建议停止服务后,对主备库做个冷备份。

   2、在数据库B上:
 (2.1)升级备库B的数据库软件:
升级软件之前需要关闭数据库,关闭listen等相关服务。否则后面运行runInstaller会报错的。
   [oracle@yitai u01]$ sqlplus / as sysdba
  SQL> select process, pid, status ,sequence# from v$managed_standby;

PROCESS          PID STATUS        SEQUENCE#
--------- ---------- ------------ ----------
ARCH            6733 CONNECTED             0
ARCH            6735 CONNECTED             0
ARCH            6737 CONNECTED             0
MRP0            6893 WAIT_FOR_LOG         26
RFS             6931 IDLE                  0
RFS             6898 IDLE                 26

SQL> alter database recover managed standby database cancel ;
SQL> shutdown immediate

[oracle@yitai u01]$ lsnrctl stop
[oracle@yitai u01]$ emctl stop dbconsole

进入10.2.0.4升级包的解压目录:(下面runInstaller需要图形界面支持,如xmanager等.命令附加参数可以-help查看)
[oracle@yitai Disk1]$ ./runInstaller  -ignoreSysPrereqs


bb

bb


bb


bb
bb

bb

执行完root.sh脚本,别忘了点击"ok"按钮。点击之后,会出现退出界面:
bb


 (2.2)修改数据库B的spfile参数compatible , 10.2.0.1.0改为10.2.0.4.0:
    [oracle@yitai Disk1]$ lsnrctl start
[oracle@yitai Disk1]$ sqlplus / as sysdba
  SQL> startup nomount
ORACLE instance started.

Total System Global Area  343932928 bytes
Fixed Size                  1267404 bytes
Variable Size             104859956 bytes
Database Buffers          234881024 bytes
Redo Buffers                2924544 bytes
SQL> show parameter compatible

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string      10.2.0.1.0
 
SQL> alter system set compatible='10.2.0.4.0' ;
alter system set compatible='10.2.0.4.0'
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified


SQL> alter system set compatible='10.2.0.4.0' scope=spfile;
SQL> shutdown immediate
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  343932928 bytes
Fixed Size                  1267404 bytes
Variable Size             104859956 bytes
Database Buffers          234881024 bytes
Redo Buffers                2924544 bytes
Database mounted.
SQL> show parameter compatible

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
compatible                           string       10.2.0.4.0

SQL> alter database recover managed standby database disconnect from session;
Database altered.

3、验证主、备库同步
这一步是为下面即将上演的switchover做准备
(3.1)检查归档目录是否有误(在数据库A上做)
SQL> select error from v$archive_dest;

ERROR
-----------------------------------------------------------------
这个地方应该是空的....

10 rows selected.

SQL> select dest_name,status from v$archive_dest;

DEST_NAME                      STATUS
------------------------------ ---------
LOG_ARCHIVE_DEST_1             VALID
LOG_ARCHIVE_DEST_2             VALID
LOG_ARCHIVE_DEST_3             INACTIVE
LOG_ARCHIVE_DEST_4             INACTIVE
LOG_ARCHIVE_DEST_5             INACTIVE
LOG_ARCHIVE_DEST_6             INACTIVE
LOG_ARCHIVE_DEST_7             INACTIVE
LOG_ARCHIVE_DEST_8             INACTIVE
LOG_ARCHIVE_DEST_9             INACTIVE
LOG_ARCHIVE_DEST_10            INACTIVE

10 rows selected.

正常的话就是上面这样,没有错误出现。


(3.2)在数据库A上切换归档

SQL> alter system switch logfile;

System altered.

(3.3)查看刚才做的归档,A库和B库之间是否同步。

(注释:如果即时查看延迟不同步,就稍等会看,如果出现延迟一般都是在主库上出现。实际情况上是可能出现延迟的,经常遇到)

A上

SQL> select max(sequence#) from v$archived_log where applied='YES';

MAX(SEQUENCE#)

--------------

            27

B上:

SQL> select max(sequence#) from v$archived_log where applied='YES';

MAX(SEQUENCE#)

--------------

            27

可以看到主备一致,同步是正常的。


4.确认standby同步没有问题后,将主库A和备库B做一次switchovers 

(4.1) 查看主库(A)switchover 状态

SQL> select database_role, switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS

---------------- --------------------

PRIMARY          TO STANDBY

 附: A:switchover_status出现session active/not allowed

       当出现session active的时候表示还有活动的session,则运行

   Alter database commit to switchover to physical standby with session shutdown;

       当出现not allowed时,在官方文档说转换会不成功,但是我测试的时候成功了。

        B.ora- 01153: an incompatible media recovery is active

        运行下面代码

   Alter database recover managed standby database finish;

        或者

   Alter database recover managed standby database finish force;

   Alter database recover managed standby database disconnect from session;


(4.2)主库A切成备库

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

或者

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

如果(4.1)的状态是session actiive,这里就得加with session shutdown.如果是to standby,可以不加,不过这种情况加上也没错。

SQL> select instance_name ,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
cuug             STARTED

这时候 A 还没关完,后面A就给他关掉了。先不用管。这里是保证B能切换成主库就行。【小提示没什么用】

(4.3)查看备库(B机) switchover 状态

SQL> select database_role, switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS

---------------- --------------------

PHYSICAL STANDBY TO PRIMARY

附:若不是,用此语句切换:

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown

补充:若出现:ORA-16139: media recovery required

是因为没有执行:alter database recover managed standby database disconnect from session; 

(4.4) 将备库(B)切换成主库,然后关闭

SQL> alter database commit to switchover to primary;

SQL> select instance_name, status from v$instance;

INSTANCE_NAME    STATUS

---------------- ------------

cuug             MOUNTED


SQL> shutdown immediate;



注意:到目前为止B是主库, A是备库。

5、开始对B机升级

对数据字典的升级只能是主库才能,因为只有主库才允许在open状态下进行read write.显而易见备库是做不到的的。

前面步骤已经对B还是备库的时候,对B的数据库软件进行了升级,现在为了对B的数据字典进行升级,需要B是主库才行。所以在B的数据库软件升级以后,需要做主备切换,使B成为当前的主库,这样才能升级B的数据字典。从而完成数据库B的整个升级。升级A的原理也是这样。【在B备库时升级B的数据库软件,而在B是主库时升级B的数据字典;A也是这样】

sqlplus '/as sysdba'

SQL> startup upgrade;   ---upgrade方式打开数据库,否则无法打开实例

SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql

SQL> shutdown immediate

SQL>startup;

SQL>select count(1) from dba_objects where status='INVALID';

(5.1)编译无效对象

SQL> @?/rdbms/admin/utlrp.sql

(5.2) 再执行下面过程:

declare

threads pls_integer:=&&1;

begin

utl_recomp.recomp_parallel(threads);

end;

 

验证一下:

 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 SWITCHOVER_STATUS

--------------------

SESSIONS ACTIVE

这个时候, B 机的数据库就切换为 primary 数据库了。(可以把应用切换到这台服务器上了)

注:到目前为止A的角色是备库,B的角色是主库

6、在数据库A上:

 (2.1)升级备库A的数据库软件:
   [oracle@yitai u01]$ sqlplus / as sysdba
  SQL> select process, pid, status ,sequence# from v$managed_standby;

PROCESS          PID STATUS        SEQUENCE#
--------- ---------- ------------ ----------
ARCH            6733 CONNECTED             0
ARCH            6735 CONNECTED             0
ARCH            6737 CONNECTED             0
MRP0            6893 WAIT_FOR_LOG         26
RFS             6931 IDLE                  0
RFS             6898 IDLE                 26

SQL> alter database recover managed standby database cancel ;
SQL>  shutdown immediate

[oracle@yitai u01]$ lsnrctl stop
[oracle@yitai u01]$ emctl stop dbconsole

进入10.2.0.4升级包的解压目录:(下面runInstaller需要图形界面支持,如xmanager等.命令附加参数可以-help查看)
[oracle@yitai Disk1]$ ./runInstaller  -ignoreSysPrereqs
下面的跟在B上的截图一样,就不附图了。


 注:到目前为止A的角色是备库,B的角色是主库

7.由于A机此时在standby状态,需切换回PRIMARY状态才能完成升级,这需要B机先切回备库,A机才可以切回主库

 

(7.1)  首先,A机启动到recover managed standby状态:

lsnrctl start

sqlplus / as sysdba

startup nomount;

alter system set compatible='10.2.0.4.0' scope=spfile

alter database mount standby database;

alter database recover managed standby database disconnect from session;

 

(7.2) B机上:

 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 

SWITCHOVER_STATUS

--------------------

TO STANDBY

 

lsnrctl start

 

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

或者

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

 

检查一下:

 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 

SWITCHOVER_STATUS

--------------------

TO PRIMARY

 

 

(7.3) A机上:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 

SWITCHOVER_STATUS

--------------------

TO PRIMARY

 

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown

 

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 

SWITCHOVER_STATUS

--------------------

TO STANDBY

 

 

8.开始升级A

sqlplus '/as sysdba'

SQL>  startup upgrade;   ---upgrade方式打开数据库,否则无法打开实例

SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql

SQL> shutdown immediate

SQL> startup;

SQL> select count(1) from dba_objects where status='INVALID';

 

(8.1)编译无效对象

SQL> @?/rdbms/admin/utlrp.sql

(8.2) 再执行下面过程:

SQL>

declare

threads pls_integer:=&&1;

begin

utl_recomp.recomp_parallel(threads);

end;

 

最后验证一下:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

 

SWITCHOVER_STATUS

--------------------

TO STANDBY

 

表明A机已切换回primary数据库了。

 

回到第 3 验证同步。

fj.png2012-11-26_205058.jpg

fj.png2012-11-26_205115.jpg

fj.png2012-11-26_205132.jpg

fj.png2012-11-26_205139.jpg

fj.png2012-11-26_205817.jpg

fj.png2012-11-26_205657.jpg

fj.png2012-11-26_210346.jpg

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

转载于:http://blog.itpub.net/27042095/viewspace-750006/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值