Oracle從10g升級到11g詳細步驟
資料庫舊版本:10.2.0.4
資料庫新版本:11.2.0.2
OS 版本: Solaris 10
參考文件:Complete Checklist for Manual Upgrades to 11gR2 [ID 837570.1]
第一部分 - 安裝11gR2軟體
這裡對軟體的安裝就不詳細說明了,可以參考相應的文件。
這裡需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在軟體級別上打上PSU或CPU,這樣就不用跑兩次catbundle.sql,減少停機時間。
第二部分 - 初步檢查
1. 在升級之前,確保所有的元件和物件都是valid:
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_name; --針對元件
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_type; --針對物件
如果有invalid的物件,執行utlrp.sql重新編譯物件。
2. 確保sys和system下沒有重複的物件:
select object_name, object_type from dba_objects where object_name||object_type in (select object_name||object_type from dba_objects where wner = 'SYS') and wner = 'SYSTEM';
上面這條語句只能返回以下4條記錄:
OBJECT_NAME OBJECT_TYPE
---------------------------------------- ---------------
DBMS_REPCAT_AUTH PACKAGE BODY
DBMS_REPCAT_AUTH PACKAGE
AQ$_SCHEDULES_PRIMARY INDEX
AQ$_SCHEDULES TABLE
如果有其它記錄返回,則必須根據下面這篇文件把重複記錄刪除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID 1030426.6]
第三部分 - 升級前工作
Step 1.
從11gR2的Oracle Home下複製以下檔案至一個臨時資料夾:
$ORACLE_HOME/rdbms/admin/utlu112i.sql
Step 2.
登陸資料庫,執行:
Normal 0 false false false EN-US ZH-CN X-NONE</w:LidThemeComplexScript. MicrosoftInternetExplorer4 <style. /* Style. Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style.
Step 3.
從下面這篇文件裡可以下載到指令碼dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID 556610.1]
執行這個指令碼:
從10.2開始,CONNECT角色的許可權變少了,所以如果你是從10.2之前升級到11g的話,升級之後,需要重新授予缺少的許可權,但是如果是從10.2及之後升級到11g的話,就不需要重新賦許可權了,本例是從10.2.0.4升級到11g的,因此不需要該步驟。
Step 5.
生成重建dblink的指令碼,以防萬一資料庫需要降級。和Step 4一樣,本例是從10.2.0.4升級到11g的,因此不需要該步驟。
Step 6.
檢查Timezone版本,主要參考:
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID 1201253.1]
注意:11g的軟體裡已經自帶了版本1-14的Timezone。
先檢查一下當前timezone版本:
SQL> conn / as sysdba
Connected.
SQL>SELECT version FROM v$timezone_file;
根據當前timezone的版本,又分三種情況:
1)等於14:這已經是11g需要的版本了,所以升級前後都不需要做任何事,這種情況很罕見。
2)高於14:升級前,必須得給11g軟體打上該timezone版本的DST補丁,這種情況也很罕見。
3)低於14:大多數都是這種情況,在升級前不需要在11g軟體層面打補丁,在升級後需要再資料庫層面將Timezone升級至14,具體看後面的步驟
Step 7.
檢查國家字符集是否是UTF8或AL16UTF16:
select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';
如果是,則什麼都不用做;如果不是,那你就慘了,跟著下面長長的這篇文件一步一步做吧:
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i, 10g and 11g [ID 276914.1]
Step 8.
收集統計資訊,以減少停機時間:
Step 9.
如果你有開啟Vault,那麼你需要先在11gR2軟體下禁用Vault,等升級結束後,再啟用Vault,否則會在升級過程中報錯。
Step 10.
備份Enterprise Manager Database Control Data,因為本例並沒有使用EM,所以不需要該步驟。
Step 11.
配置網路ACL's,在本例中不需要配置。
Step 12.
使用以下語句生產分析資料字典的指令碼 (as sysdba):
生成的指令碼名稱是:analyze.sql
現在執行該指令碼:
Step 13.
確保所有的snapshot都已被成功重新整理,且replication已被關閉:
Step 14.
確保當前沒有檔案需要介質恢復:
SELECT * FROM v$recover_file;
上面語句沒有返回結果才是正確的。
Step 15.
確保當前沒有檔案執行在備份模式下:
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
上面語句沒有返回結果才是正確的。
Step 16.
解決分散式事務。
先查詢是否還有分散式事務:
Step 17.
檢查是否有Standby資料庫存在:
Step 18.
禁用所有的batch和cron jobs
Step 19.
確保使用者SYS和SYSTEM的預設表空間都是SYSTEM:
Step 20.
確保AUD$表建在SYS使用者下和SYSTEM表空間下:
Step 21.
檢查是否有外部認證的SSL使用者:
SQL> SELECT name FROM sys.user$
WHERE ext_username IS NOT NULL
AND password = 'GLOBAL';
如果有,則在升級之後記得要做Step 34。
Step 22.
記下資料檔案、聯機日誌檔案和控制檔案的位置:
Step 23.
停止listener:
Step 24.
關閉資料庫:
Step 25.
以10g的pfile為模板,並根據Step 2生成的upgrade_info.log裡的建議,為11g建立一個新的pfile。
Step 26.
如果資料庫原本是執行在archive模式下,最好先改為noarchive,這樣可以減少升級停機時間,升級成功後再重新改回archive模式。
Step 27.
該步驟是針對Windows系統的,本例略過。
第四部分 - 升級
Step 28.
升級前的檢查步驟基本上已經完成了,在跑升級指令碼之前,需要把相關引數改為指向新的11g軟體:
接著修改oratab中的內容,使其指向新的11g Home目錄:
Step 29.
前面所有的一切準備,都是為了這一步能成功執行,先把資料庫起到upgrade狀態:
接著重新編譯一下無效物件:
第五部分 - 升級後工作
Step 30.
修改listener.ora,使listener執行新的11g Home,然後重新啟動listener:
Step 31.
再次檢查Step 28中設定的環境變數確實是指向了新的11g Home。
Step 32.
Timezone資料庫層面的升級。
注意:該步驟是否執行是和Step 6中的檢查結果相關的,只有當Timezone的版本小於14時,才需要執行該步驟。
主要參考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID 977512.1]
1)Timezone升級前的準備工作:
先檢查一下當前的timezone版本:
conn / as sysdba
SELECT version FROM v$timezone_file;
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
然後開始準備工作:
alter session set "_with_subquery"=materialize;
exec DBMS_DST.BEGIN_PREPARE(14);
接著檢查準備狀態:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 14
DST_UPGRADE_STATE PREPARE
-- truncate logging tables if they exist.
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
-- log affected data
set serveroutput on
BEGIN
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables => 'sys.dst$affected_tables',
log_errors => TRUE,
log_errors_table => 'sys.dst$error_table');
END;
/
下面的語句都不能有返回結果:
SELECT * FROM sys.dst$affected_tables;
SELECT * FROM sys.dst$error_table;
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');
-- end prepare window, the rows above will stay in those tables.
EXEC DBMS_DST.END_PREPARE;
-- check if this is ended
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
2)真正開始升級Timezone
conn / as sysdba
shutdown immediate;
startup upgrade;
set serveroutput on
purge dba_recyclebin;
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
alter session set "_with_subquery"=materialize;
EXEC DBMS_DST.BEGIN_UPGRADE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 4
DST_UPGRADE_STATE UPGRADE
下面這條語句應該沒有返回結果:
SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';
重啟資料庫:
shutdown immediate
startup
升級相關的table:
alter session set "_with_subquery"=materialize;
set serveroutput on
VAR numfail number
BEGIN
DBMS_DST.UPGRADE_DATABASE(:numfail,
parallel => TRUE,
log_errors => TRUE,
log_errors_table => 'SYS.DST$ERROR_TABLE',
log_triggers_table => 'SYS.DST$TRIGGER_TABLE',
error_on_overlap_time => FALSE,
error_on_nonexisting_time => FALSE);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
END;
/
如果沒有錯誤,則結束升級:
VAR fail number
BEGIN
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
END;
/
最後一次檢查:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
典型輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
SELECT * FROM v$timezone_file;
FILENAME VERSION
-------------------- ----------
timezlrg_14.dat 14
Step 33.
該步驟可省略。
Step 34.
升級外部認證SSL使用者。
由於本例是從10.2升級到11g,所以可忽略該步驟。
Step 35.
如果在Step 9中,你關閉了Vault,則必須在此步驟重新啟用。
- Enabling and Disabling Oracle Database Vault in UNIX
Step 36.
忽略
Step 37.
建立spfile:
Step 38.
鎖住系統使用者,可忽略。
Step 39.
升級Oracle Text,可忽略。
Step 40.
升級Oracle Clusterware,可忽略。
Step 41.
配置EM,可忽略。
最後,記得修改compatible引數:
Normal 0 false false false EN-US ZH-CN X-NONE</w:LidThemeComplexScript. MicrosoftInternetExplorer4 <style. /* Style. Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style.
資料庫新版本:11.2.0.2
OS 版本: Solaris 10
參考文件:Complete Checklist for Manual Upgrades to 11gR2 [ID 837570.1]
第一部分 - 安裝11gR2軟體
這裡對軟體的安裝就不詳細說明了,可以參考相應的文件。
這裡需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在軟體級別上打上PSU或CPU,這樣就不用跑兩次catbundle.sql,減少停機時間。
第二部分 - 初步檢查
1. 在升級之前,確保所有的元件和物件都是valid:
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_name; --針對元件
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_type; --針對物件
如果有invalid的物件,執行utlrp.sql重新編譯物件。
2. 確保sys和system下沒有重複的物件:
select object_name, object_type from dba_objects where object_name||object_type in (select object_name||object_type from dba_objects where wner = 'SYS') and wner = 'SYSTEM';
上面這條語句只能返回以下4條記錄:
OBJECT_NAME OBJECT_TYPE
---------------------------------------- ---------------
DBMS_REPCAT_AUTH PACKAGE BODY
DBMS_REPCAT_AUTH PACKAGE
AQ$_SCHEDULES_PRIMARY INDEX
AQ$_SCHEDULES TABLE
如果有其它記錄返回,則必須根據下面這篇文件把重複記錄刪除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID 1030426.6]
第三部分 - 升級前工作
Step 1.
從11gR2的Oracle Home下複製以下檔案至一個臨時資料夾:
$ORACLE_HOME/rdbms/admin/utlu112i.sql
Step 2.
登陸資料庫,執行:
Normal 0 false false false EN-US ZH-CN X-NONE</w:LidThemeComplexScript. MicrosoftInternetExplorer4 <style. /* Style. Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style.
$ sqlplus '/ as sysdba'
SQL> spool upgrade_info.log
SQL> @utlu112i.sql
SQL> spool off
SQL>
SQL> spool upgrade_info.log
SQL> @utlu112i.sql
SQL> spool off
SQL>
生成的upgrade_info.log裡的內容很重要,後續步驟要根據該檔案的內容做相應的修改,因此一定要保留下來。
Step 3.
從下面這篇文件裡可以下載到指令碼dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID 556610.1]
執行這個指令碼:
cd <location of the script>
$ sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @dbupgdiag.sql
sql> exit
如果該指令碼報告有invalid物件,執行以下命令重編譯無效物件:
Step 4.$ sqlplus / as sysdba
sql> alter session set nls_language='American';
sql> @dbupgdiag.sql
sql> exit
如果該指令碼報告有invalid物件,執行以下命令重編譯無效物件:
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL> @utlrp.sql
$ sqlplus "/ as sysdba"
SQL> @utlrp.sql
從10.2開始,CONNECT角色的許可權變少了,所以如果你是從10.2之前升級到11g的話,升級之後,需要重新授予缺少的許可權,但是如果是從10.2及之後升級到11g的話,就不需要重新賦許可權了,本例是從10.2.0.4升級到11g的,因此不需要該步驟。
Step 5.
生成重建dblink的指令碼,以防萬一資料庫需要降級。和Step 4一樣,本例是從10.2.0.4升級到11g的,因此不需要該步驟。
Step 6.
檢查Timezone版本,主要參考:
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID 1201253.1]
注意:11g的軟體裡已經自帶了版本1-14的Timezone。
先檢查一下當前timezone版本:
SQL> conn / as sysdba
Connected.
SQL>SELECT version FROM v$timezone_file;
根據當前timezone的版本,又分三種情況:
1)等於14:這已經是11g需要的版本了,所以升級前後都不需要做任何事,這種情況很罕見。
2)高於14:升級前,必須得給11g軟體打上該timezone版本的DST補丁,這種情況也很罕見。
3)低於14:大多數都是這種情況,在升級前不需要在11g軟體層面打補丁,在升級後需要再資料庫層面將Timezone升級至14,具體看後面的步驟
Step 7.
檢查國家字符集是否是UTF8或AL16UTF16:
select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';
如果是,則什麼都不用做;如果不是,那你就慘了,跟著下面長長的這篇文件一步一步做吧:
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i, 10g and 11g [ID 276914.1]
Step 8.
收集統計資訊,以減少停機時間:
$ sqlplus "/as sysdba"
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
Step 9.
如果你有開啟Vault,那麼你需要先在11gR2軟體下禁用Vault,等升級結束後,再啟用Vault,否則會在升級過程中報錯。
Step 10.
備份Enterprise Manager Database Control Data,因為本例並沒有使用EM,所以不需要該步驟。
Step 11.
配置網路ACL's,在本例中不需要配置。
Step 12.
使用以下語句生產分析資料字典的指令碼 (as sysdba):
Set verify off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql
SELECT 'Analyze cluster "'||cluster_name||'" validate structure cascade;'
FROM dba_clusters
WHERE owner='SYS'
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade;'
FROM dba_tables
WHERE owner='SYS'
AND partitioned='NO'
AND (iot_type='IOT' OR iot_type is NULL)
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
FROM dba_tables
WHERE owner='SYS'
AND partitioned='YES';
spool off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql
SELECT 'Analyze cluster "'||cluster_name||'" validate structure cascade;'
FROM dba_clusters
WHERE owner='SYS'
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade;'
FROM dba_tables
WHERE owner='SYS'
AND partitioned='NO'
AND (iot_type='IOT' OR iot_type is NULL)
UNION
SELECT 'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
FROM dba_tables
WHERE owner='SYS'
AND partitioned='YES';
spool off
生成的指令碼名稱是:analyze.sql
現在執行該指令碼:
$ sqlplus "/ as sysdba"
SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL> @analyze.sql
SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL> @analyze.sql
Step 13.
確保所有的snapshot都已被成功重新整理,且replication已被關閉:
SELECT DISTINCT(TRUNC(last_refresh))
FROM dba_snapshot_refresh_times;
FROM dba_snapshot_refresh_times;
Step 14.
確保當前沒有檔案需要介質恢復:
SELECT * FROM v$recover_file;
上面語句沒有返回結果才是正確的。
Step 15.
確保當前沒有檔案執行在備份模式下:
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
上面語句沒有返回結果才是正確的。
Step 16.
解決分散式事務。
先查詢是否還有分散式事務:
SQL> select * from dba_2pc_pending;
如果有返回結果,則:SQL> SELECT local_tran_id
FROM dba_2pc_pending;
SQL> EXECUTE dbms_transaction.purge_lost_db_entry('');
SQL> COMMIT;
FROM dba_2pc_pending;
SQL> EXECUTE dbms_transaction.purge_lost_db_entry('');
SQL> COMMIT;
Step 17.
檢查是否有Standby資料庫存在:
SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';
如果有返回結果,則在升級之前,要保證Standby和Primary是處於同步的狀態。FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';
Step 18.
禁用所有的batch和cron jobs
Step 19.
確保使用者SYS和SYSTEM的預設表空間都是SYSTEM:
SQL> SELECT username, default_tablespace
FROM dba_users
WHERE username in ('SYS','SYSTEM');
如果不是,則要用以下語句修改為SYSTEM:FROM dba_users
WHERE username in ('SYS','SYSTEM');
SQL> ALTER user SYS default tablespace SYSTEM;
SQL> ALTER user SYSTEM default tablespace SYSTEM;
SQL> ALTER user SYSTEM default tablespace SYSTEM;
Step 20.
確保AUD$表建在SYS使用者下和SYSTEM表空間下:
SQL> SELECT
owner,tablespace_name
FROM dba_tables
WHERE table_name='AUD$';
如果不是,則要做相應的修改。FROM dba_tables
WHERE table_name='AUD$';
Step 21.
檢查是否有外部認證的SSL使用者:
SQL> SELECT name FROM sys.user$
WHERE ext_username IS NOT NULL
AND password = 'GLOBAL';
如果有,則在升級之後記得要做Step 34。
Step 22.
記下資料檔案、聯機日誌檔案和控制檔案的位置:
SQL> SELECT name FROM v$controlfile;
SQL> SELECT file_name FROM dba_data_files;
SQL> SELECT group#, member FROM v$logfile;
且備份listener.ora, tnsnames.ora, sqlnet.ora等檔案。SQL> SELECT file_name FROM dba_data_files;
SQL> SELECT group#, member FROM v$logfile;
Step 23.
停止listener:
$ lsnrctl stop
停止其它可執行程式,如dbconsole, isqlplus等$ emctl stop dbconsole
$ isqlplusctl stop
$ isqlplusctl stop
Step 24.
關閉資料庫:
$ sqlplus "/as sysdba"
SQL> shutdown immediate;
接著對全庫做個冷備。SQL> shutdown immediate;
Step 25.
以10g的pfile為模板,並根據Step 2生成的upgrade_info.log裡的建議,為11g建立一個新的pfile。
Step 26.
如果資料庫原本是執行在archive模式下,最好先改為noarchive,這樣可以減少升級停機時間,升級成功後再重新改回archive模式。
Step 27.
該步驟是針對Windows系統的,本例略過。
第四部分 - 升級
Step 28.
升級前的檢查步驟基本上已經完成了,在跑升級指令碼之前,需要把相關引數改為指向新的11g軟體:
$ export ORACLE_HOME=<location of Oracle 11.2>
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_BASE=<Oracle_Base set during installation>
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_BASE=<Oracle_Base set during installation>
接著修改oratab中的內容,使其指向新的11g Home目錄:
Sample /etc/oratab
#orcl:/opt/oracle/product/10.2/db_1:N
orcl:/opt/oracle/product/11.2/db_1:N
#orcl:/opt/oracle/product/10.2/db_1:N
orcl:/opt/oracle/product/11.2/db_1:N
Step 29.
前面所有的一切準備,都是為了這一步能成功執行,先把資料庫起到upgrade狀態:
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus "/ as sysdba"
SQL> startup UPGRADE
接著開始跑升級指令碼:$ sqlplus "/ as sysdba"
SQL> startup UPGRADE
SQL> set echo on
SQL> SPOOL upgrade.log
SQL> @catupgrd.sql
SQL> spool off
這個指令碼大概持續1.5個小時,指令碼的最後會自動關閉資料庫。升級指令碼跑完之後,再跑下面這個指令碼,檢查資料庫狀態:SQL> SPOOL upgrade.log
SQL> @catupgrd.sql
SQL> spool off
$ sqlplus "/as sysdba"
SQL> STARTUP
SQL> @utlu112s.sql
如果該報告中包含錯誤,請查閱相關文件解決,直到沒有錯誤之後,再跑下面的指令碼:SQL> STARTUP
SQL> @utlu112s.sql
SQL> @catuppst.sql
前面的升級指令碼是執行在upgrade模式下,該指令碼主要是在open模式下做些升級動作,不需要花很多時間。接著重新編譯一下無效物件:
SQL> @utlrp.sql
最後,再跑一下Step 3中的dbupgdiag.sql,確保資料庫是好的。第五部分 - 升級後工作
Step 30.
修改listener.ora,使listener執行新的11g Home,然後重新啟動listener:
lsnrctl start
Step 31.
再次檢查Step 28中設定的環境變數確實是指向了新的11g Home。
Step 32.
Timezone資料庫層面的升級。
注意:該步驟是否執行是和Step 6中的檢查結果相關的,只有當Timezone的版本小於14時,才需要執行該步驟。
主要參考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID 977512.1]
1)Timezone升級前的準備工作:
先檢查一下當前的timezone版本:
conn / as sysdba
SELECT version FROM v$timezone_file;
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
然後開始準備工作:
alter session set "_with_subquery"=materialize;
exec DBMS_DST.BEGIN_PREPARE(14);
接著檢查準備狀態:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 14
DST_UPGRADE_STATE PREPARE
-- truncate logging tables if they exist.
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
-- log affected data
set serveroutput on
BEGIN
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables => 'sys.dst$affected_tables',
log_errors => TRUE,
log_errors_table => 'sys.dst$error_table');
END;
/
下面的語句都不能有返回結果:
SELECT * FROM sys.dst$affected_tables;
SELECT * FROM sys.dst$error_table;
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');
-- end prepare window, the rows above will stay in those tables.
EXEC DBMS_DST.END_PREPARE;
-- check if this is ended
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
2)真正開始升級Timezone
conn / as sysdba
shutdown immediate;
startup upgrade;
set serveroutput on
purge dba_recyclebin;
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_tables;
TRUNCATE TABLE sys.dst$error_table;
alter session set "_with_subquery"=materialize;
EXEC DBMS_DST.BEGIN_UPGRADE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一個典型的輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 4
DST_UPGRADE_STATE UPGRADE
下面這條語句應該沒有返回結果:
SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';
重啟資料庫:
shutdown immediate
startup
升級相關的table:
alter session set "_with_subquery"=materialize;
set serveroutput on
VAR numfail number
BEGIN
DBMS_DST.UPGRADE_DATABASE(:numfail,
parallel => TRUE,
log_errors => TRUE,
log_errors_table => 'SYS.DST$ERROR_TABLE',
log_triggers_table => 'SYS.DST$TRIGGER_TABLE',
error_on_overlap_time => FALSE,
error_on_nonexisting_time => FALSE);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
END;
/
如果沒有錯誤,則結束升級:
VAR fail number
BEGIN
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
END;
/
最後一次檢查:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
典型輸出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
SELECT * FROM v$timezone_file;
FILENAME VERSION
-------------------- ----------
timezlrg_14.dat 14
Step 33.
該步驟可省略。
Step 34.
升級外部認證SSL使用者。
由於本例是從10.2升級到11g,所以可忽略該步驟。
Step 35.
如果在Step 9中,你關閉了Vault,則必須在此步驟重新啟用。
- Enabling and Disabling Oracle Database Vault in UNIX
Step 36.
忽略
Step 37.
建立spfile:
SQL> create spfile from pfile;
Step 38.
鎖住系統使用者,可忽略。
Step 39.
升級Oracle Text,可忽略。
Step 40.
升級Oracle Clusterware,可忽略。
Step 41.
配置EM,可忽略。
最後,記得修改compatible引數:
Normal 0 false false false EN-US ZH-CN X-NONE</w:LidThemeComplexScript. MicrosoftInternetExplorer4 <style. /* Style. Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style.
SQL> ALTER SYSTEM SET COMPATIBLE = ’11.2.0’ SCOPE=SPFILE;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31536640/viewspace-2155487/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 靜默升級oracle 11g (從11.2.0.1升級到11.2.0.4)Oracle
- 超詳細oracle 11g安裝步驟 win版本Oracle
- windows10怎樣升級到10586_windows10電腦升級到10586詳細步驟Windows
- ORACLE9I升級到10G(zt)Oracle
- Oracle 11g升級到12COracle
- 【UPGRADE】升級到Oracle18c基本步驟參考(留存)Oracle
- Windows升級到oracle 11g的異機物理升級文件(冷備)WindowsOracle
- 【Zabbix】ZABBIX3.0升級到3.2步驟
- CentOS6.4 升級到7.0的步驟CentOS
- 【ASK_ORACLE】Relink RAC叢集詳細步驟Oracle
- Oracle 11g dataguard 配置簡約步驟Oracle
- 12.1.0.2 單機 升級 19.16 RAC步驟詳解
- ORACLE10G升級11GOracle
- 【Oracle升級】Oracle指令碼升級11g to 19c non-CDBOracle指令碼
- nodejs專案部署到騰訊雲詳細步驟NodeJS
- 【BUILD_ORACLE】Oracle RAC配置ASM Filter Driver(ASMFD)(二)詳細配置步驟UIOracleASMFilter
- 配置PLSQL Developer詳細步驟SQLDeveloper
- LVM建立的詳細步驟LVM
- Oracle 12c升級需遵循的簡單步驟NFOracle
- centos升級openssl方法及步驟CentOS
- dp安裝包升級步驟
- CH592_IAP升級步驟H5
- CATIA許可證升級步驟
- A*演算法(超級詳細講解,附有舉例的詳細手寫步驟)演算法
- oracle 10 rac 升級 10.2.0.1升級到10.2.0.5Oracle
- Github配置ssh key詳細步驟Github
- OpenHarmony執行docker詳細步驟Docker
- docker安裝portainer詳細步驟DockerAI
- MySQL的安裝步驟(詳細)MySql
- 【UP_ORACLE】Oracle 19c之從19.3升級到19.9Oracle
- oracle 11g建立基線詳細資訊Oracle
- 【ASK_ORACLE】Relink ASM單例項資料庫詳細步驟OracleASM單例資料庫
- Oracle 字符集從GBK升級到Utf8Oracle
- CentOS 7 安裝MongoDB詳細步驟CentOSMongoDB
- Linux安裝jdk的詳細步驟LinuxJDK
- Linux安裝jdk的詳細步驟。LinuxJDK
- ubuntu 18.04安裝kalibr(詳細步驟)Ubuntu
- MyBatis的逆向工程詳細步驟操作MyBatis