共计 5816 个字符,预计需要花费 15 分钟才能阅读完成。
Oracle DataGuard 升级 [11.2.0.1 -> 11.2.0.4]
Primary: 11.2.0.1 单机,Site A。
Standby: 11.2.0.1 单机,Site B、Site C。
当前 DG 环境示意图:
需求:升级至 11.2.0.4
升级思路:
主库暂停归档传输;备库安装新版本软件,备库启动到 mount;主库安装软件,主库升级数据库,主库启用归档传输,备库开启日志恢复。
注意:
11g 新版本软件安装到一个新目录下,注意 copy 之前的 spfile、密码文件、network file 等(监听配置文件的静态监听部分需要修改);
备库只升级软件版本。数据库升级是通过主库升级后通过应用主库归档完成升级和同步的。
- 1. 主库暂停归档向备库传输
- 2. 备库在新目录下安装新版本软件
- 3. 备库启动到 mount 状态
- 4. 主库安装软件,升级数据库
- 5. 主库启用归档向备库传输
- 6. 备库开启日志恢复
- 7. 检查备库、主库升级情况
- 8. 定时任务检查修正
1. 主库暂停归档向备库传输
show parameter log_archive_dest_state_X
alter system set log_archive_dest_state_X=defer scope=both sid=’*’;
这里是暂停 Site A 的主库的 log_archive_dest_state_2 和 log_archive_dest_state_3
show parameter log_archive_dest_state_2
show parameter log_archive_dest_state_3
alter system set log_archive_dest_state_2=defer scope=both sid='*';
alter system set log_archive_dest_state_3=defer scope=both sid='*';
2. 备库在新目录下安装新版本软件
2.1 关闭数据库,监听。
shutdown immediate
lsnrctl stop
2.2 备库在新目录下安装 Oracle 11.2.0.4 软件。
两个备库操作方法一样,以 Site C 为例:
–Site C:
-- 创建新的 $ORACLE_HOME 目录
$ mkdir -p /u01/app/oracle/product/11.2.0.4/dbhome_1
-- 编辑 oracle 用户环境变量,修改 ORACLE_HOME 变量值为新的目录
vi ~/.bash_profile
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
3. 备库启动到 mount 状态
环境变量修改为新目录 ORACLE_HOME 11.2.0.4
新目录注意 copy 之前的 spfile 和 network file(tnsnames.ora listener.ora)等
两个备库操作方法一样,以 Site C 为例:
–Site C:
--network file(tnsnames.ora listener.ora sqlnet.ora)[oracle@oracle2 admin]$ cp /u01/app/oracle/product/11.2.0/network/admin/*.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/
--SPFILE
cp /u01/app/oracle/product/11.2.0/dbs/spfileorcl.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
启动数据库到 mount 状态,启动监听。
4. 主库安装软件,升级数据库
安装、升级相关过程:
4.1 备份数据库
升级是一个很大的动作,升级前需要事先备份数据库。
--rman.sql
more rman.sql
run{
allocate channel d1 TYPE disk;
allocate channel d2 TYPE disk;
allocate channel d3 TYPE disk;
allocate channel d4 TYPE disk;
backup as compressed backupset database format '/home/oradata/rman/data_%d_%T_%s.bak' plus archivelog format '/home/oradata/rman/arch_%d_%T_%s.bak';
release channel d1;
release channel d2;
release channel d3;
release channel d4;
}
--rman.sh
cat rman.sh
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
rman target / @/home/oradata/rman/rman.sql log=/home/oradata/rman/rman.log
--nohup 执行 备份数据库
nohup sh rman.sh &
4.2 关闭数据库,监听
停止监听,关闭数据库:
$ lsnrctl stop
SQL> shutdown immediate
4.3 新目录下安装新版本软件
主库:
./runInstaller 图形安装新版本软件(upgrade)。
root 需要执行的脚本按提示执行。
注意,监听程序不需要配置。
4.4 旧版本软件执行升级检查
在 11.2.0.1 的 sqlplus 执行 11.2.0.4 的 utlu112i.sql,进行升级检查。
$ sqlplus / as sysdba
SQL> startup
SQL> SPOOL upgrade_info.log
SQL> @/u01/app/oracle/product/11.2.0.4/dbhome_1/rdbms/admin/utlu112i.sql
SQL> SPOOL OFF
根据提示修正不符合升级条件的地方。
--purge DBA_RECYCLEBIN;
select count(*) from DBA_RECYCLEBIN;
purge DBA_RECYCLEBIN;
--EXECUTE dbms_stats.gather_dictionary_stats;
EXECUTE dbms_stats.gather_dictionary_stats;
4.5 升级前确认无效对象数量
select count(*) from dba_objects where status<>'VALID';
这里是 0。-- 正常关闭数据库:
shutdown immediate
4.6 新版本软件对应的环境变量
修改环境变量中指定 11.2.0.4,并用 source 或者重新使用 oracle 用户登录生效
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME= /u01/app/oracle/product/11.2.0.4/dbhome_1
4.7 新版本软件环境,spfile,密码文件和网络配置相关文件
copy 参数文件 spfile,network file「tnsnames.ora listener.ora sqlnet.ora」,密码文件,
-- 拷贝参数文件 spfile:[oracle@oracle1 ~]$ cp /u01/app/oracle/product/11.2.0/dbs/spfileorcl.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/
-- 拷贝密码文件:[oracle@oracle1 ~]$ cp /u01/app/oracle/product/11.2.0/dbs/orapworcl /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/orapworcl
-- 拷贝网络配置相关文件「tnsnames.ora listener.ora sqlnet.ora」[oracle@oracle1 ~]$ cp /u01/app/oracle/product/11.2.0/network/admin/*.ora /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/
-- 修正 DG listener.ora 中静态监听内容(ORACLE_HOME),然后重启监听文件
SID_LIST_LISTENER=
(SID_DESC=(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)(SID_NAME = orcl)
)
4.8 升级数据库
--upgrade 模式打开数据库
SQL> startup UPGRADE
SQL> @?/rdbms/admin/catupgrd.sql
SQL> startup
SQL> @?/rdbms/admin/utlu112s.sql
SQL> select count(*) from dba_objects where status<>'VALID';
460
SQL> @?/rdbms/admin/utlrp.sql
0
SQL> shutdown immediate
SQL> startup
5. 主库启用归档向备库传输
show parameter log_archive_dest_state_X
alter system set log_archive_dest_state_X=enable scope=both sid=’*’;
alter system set log_archive_dest_state_2=enable scope=both sid='*';
alter system set log_archive_dest_state_3=enable scope=both sid='*';
show parameter log_archive_dest_state_2
show parameter log_archive_dest_state_3
6. 备库开启日志恢复
备库 mount 状态下开启日志恢复,等待恢复完成,终止日志恢复然后将数据库在 open 状态后再开启日志恢复。
--mount 状态下开启日志恢复
startup mount
alter database recover managed standby database disconnect from session;
-- 等待恢复完成...
-- 取消日志恢复
alter database recover managed standby database cancel;
-- 打开数据库
alter database open;
--open 状态下开启日志恢复
alter database recover managed standby database using current logfile disconnect from session;
7. 检查备库、主库升级情况
select ACTION_TIME,ACTION,NAMESPACE,VERSION,ID from registry$history;
select ACTION_TIME,ACTION,NAMESPACE,VERSION,ID from registry$history
ACTION_TIME ACTION NAMESPACE VERSION ID
--------------------------------------------------------------------------- ------------------------------ ------------------------------ ------------------------------ ----------
08-FEB-17 03.39.36.894771 AM VIEW INVALIDATE 8289601
08-FEB-17 03.39.36.926136 AM UPGRADE SERVER 11.2.0.4.0
8. 定时任务检查修正
检查各机器是否有定时任务,比如这里有定时任务有定期删除归档的任务。
需要根据新环境的变量修改脚本中 ORACLE_HOME 变量值。
以 Site A 为例,确认对应变量都是新版本数据库的变量值:
[oracle@oracle1 admin]$ crontab -l
0 0 * * * sh /home/oradata/scripts/delarch.sh > /dev/null 2&>1#
[oracle@oracle1 admin]$ cat /home/oradata/scripts/delarch.sh
#!/bin/bash
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
rman target / @/home/oradata/scripts/delarch.sql log=/home/oradata/scripts/delarch.log
[oracle@oracle1 admin]$ cat /home/oradata/scripts/delarch.sql
crosscheck archivelog all;
delete noprompt archivelog all completed before "sysdate-7";
[oracle@oracle1 admin]$
至此,Oracle DataGuard 从版本 11.2.0.1 成功升级到版本 11.2.0.4。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140557.htm