靜默升級oracle 11g (從11.2.0.1升級到11.2.0.4)

czxin788發表於2020-03-28

    一個環境是oracle 11.2.0.1,一個環境是oracle 11.2.0.4,同樣的資料,同樣的sql,在兩個版本資料庫表現不一樣。於是,乾脆都統一為11.2.0.4。

    但由於環境限制,只能用靜默的方法,把oracle 11.2.0.1 升級到 11.2.0.4。

    不過,還好,根據網上的文件,升級過程還算順利。

    下面,我記錄一下升級過程,供自己以後檢視,也供有需要的人參考。

1、11.2.0.1環境(待升級資料庫)

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE11.2.0.4.0Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

[root@localhost ~]# su - oracle
[oracle@localhost ~]$ cat .bash_profile 
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
alias sqlplus='rlwrap sqlplus'

2、升級前的準備工作

2.1、 備份資料庫

    升級資料庫是一個有風險的過程,需要仔細規劃和慎重處理。首先要做資料庫的完全備份,備份的內容包括資料檔案,控制檔案,歸檔檔案,日誌檔案,引數檔案,密碼檔案等。可以備份一下整個ORACLE_HOME目錄,如果升級有問題,還可以還原回來。備份的方法可以使用dump資料泵,tar,rman等。

     如:RMAN全備

[oracle@localhost ~]$ export ORACLE_SID=orcl
[oracle@localhost ~]$ rman target /
RMAN>backup database format '/home/oracle/rmanbak/df_%t_%s_%p.bak';

    備份老的ORACLE_HOME和oraInventory

[oracle@localhost ~]$tar –cvfp product.tar.gz /u01/app/oracle/
[oracle@localhost ~]$tar –cvfp oraInventory.tar.gz /u01/app/oraInventory/

2.2、乾淨的關閉資料庫

SQL> shutdown immediate;

2.3、 關閉資料庫的監聽

在資料庫的升級中,會對資料庫的監聽檔案做重新的配置,建議正常的關閉監聽,如下:

[oracle@localhost ~]$ lsnrctl stop
[oracle@localhost ~]$  netstat -an |grep 1521

2.4、 關閉OEM 

在升級中需要關閉EM

[oracle@localhost ~]$emctl stop dbconsole
[oracle@localhost ~]$netstat -an |grep 1158

2.5、不 對資料庫的任何原有檔案做操作   

    本人在升級中,編輯資料庫的監聽檔案,導致配置監聽和EM錯誤,故不對資料庫的任何原有檔案做操作。

3、安裝oracle 11.2.0.4軟體包

    把oracle 11.2.0.4的安裝包上傳到/home/oracle目錄下,解壓後得到database目錄。

[oracle@localhost ~]$ ls
p13390677_112040_Linux-x86-64_1of7.zip   p13390677_112040_Linux-x86-64_2of7.zip
[oracle@localhost ~]$ unzip p13390677_112040_Linux-x86-64_1of7.zip
[oracle@localhost ~]$ unzip p13390677_112040_Linux-x86-64_2of7.zip
[oracle@localhost ~]$ ls
database

    開始安裝資料庫軟體11.2.0.4。

[oracle@localhost ~]$ cd database
[oracle@localhost ~]$./runInstaller -silent -debug -force -ignorePrereq \
DECLINE_SECURITY_UPDATES=true \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.DBA_GROUP=dba \
oracle.install.db.OPER_GROUP=oinstall

     說明:INVENTORY_LOCATION可以和老版本共用一個目錄。ORACLE_BASE和老版本保持一樣,ORACLE_HOME指向了一個新的目錄11.2.0.4/dbhome_1(以前是11.2.0/db_1)。

     不過,這些目錄都是可以隨意指定,我上面做是隻是為了版本管控方便。

    安裝過程大概需要15分鐘左右(根據機型配置時間也不同),安裝過程中有警告[WARNING] 時需要安裝一些i386 的包。檢視log安裝即可。

     出現以下字樣表示升級成功。

As a root user, execute the following script(s):
        1. /u01/oracle/app/product/11.2.0.4/dbhome_1/root.sh
Successfully Setup Software.

     切換到 root 使用者執行指令碼。

[root@localhost ~]# /u01/oracle/app/product/11.2.0.4/dbhome_1/root.sh

4、配置新環境變數,複製引數檔案和監聽檔案

4.1、配置新環境變數

[oracle@localhost ~]$ whoami 
oracle
[oracle@localhost ~]$ cat .bash_profile 
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
alias sqlplus='rlwrap sqlplus'

    上面看到,新環境變數和老環境變數相比,我只修改了一個引數:

新引數:ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
老引數:ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

     注意: 在10g以後,一般情況下環境變數中沒有必要設定LD_LIBRARY_PATH,但是一旦將ORACLE_HOME遷移到其他目錄,則環境變數中還需要新增這個變數。

    source一下後,環境變數就指向新安裝的11.2.0.4位置了。

[oracle@localhost ~]$ source .bash_profile
[oracle@localhost ~]$ env  |grep ORA
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1

4.2、修改 /etc/oratab 內容為最新位置

[oracle@localhost ~]$ vim /etc/oratab
orcl:/u01/app/oracle/product/11.2.0.4/db_1:N

4.3、 將引數檔案copy到新的目錄下

[oracle@localhost ~]$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
[oracle@localhost dbs]$ cp -a * /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/

4.4、 複製監聽TNS配置檔案到新的目錄下

[oracle@localhost admin]$  cd /u01/app/oracle/product/11.2.0/db_1/network/admin/
[oracle@localhost dbs]$ cp -a * /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin

4.5、啟動監聽

    先修改新位置下的listener.ora裡面的路徑,然後啟動監聽。

[oracle@localhost admin]$ lsnrctl start

5、升級資料庫

    要注意退出oracle使用者重新su - oracle下,然後sqlplus能看到11.2.0.4.0字樣才行。

[oracle@19_mysql-slave ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Mon Mar 30 12:10:30 2020
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup upgrade
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size        2253664 bytes
Variable Size     1006636192 bytes
Database Buffers    587202560 bytes
Redo Buffers          7319552 bytes
Database mounted.
Database opened.
SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql   ---該指令碼會執行30分鐘左右

    以上catupgrd.sql指令碼整整執行了30分鐘,執行完之後會shutdown immediate資料庫。這個時候我們重啟資料庫即可。

[oracle@localhost admin]$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup
SQL>  select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

6、 執行 utlrp.sql 編譯失效物件

    檢查無效物件:

SQL> select * from dba_objects where status !='VALID';
SQL> SELECT count(*) FROM dba_objects WHERE status='INVALID';

    執行utlrp.sql編譯失效物件。

SQL> @?/rdbms/admin/utlrp

    該指令碼耗時約為3分鐘左右。 至此資料庫已經升級完成。

    最後,重啟資料庫沒有問題就是升級成功了。

7、更新資料庫服務指令碼

 將/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/ 下的 dbstart dbshut ORACLE_HOME_LISTNER=$1 改為 $ORACLE_HOME

#ORACLE_HOME_LISTNER=$1
ORACLE_HOME_LISTNER=$ORACLE_HOME

8、 升級後的檢查確認

SQL> select status from v$instance;
STATUS
  
------------
OPEN  #注意,成功開啟資料庫後,這裡將是OPEN,而非OPEN MIGRATE
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE   11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

9、升級成功後需重建EM(沒有EM可忽略該步)

手工建立EM資料庫:

####emca -repos drop
[oracle@localhost admin]$ emca -reposdrop
####emca -repos create
 
[oracle@localhost admin]$ emca -reposcreate
 
###emca -config dbcontrol db
[oracle@localhost admin]$ emca-config dbcontrol db

參考連結:

1、 https://blog.csdn.net/jycjyc/article/details/89948192

2、


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28916011/viewspace-2683059/,如需轉載,請註明出處,否則將追究法律責任。

相關文章