12.1.0.2 單機 升級 19.16 RAC步驟詳解

jason_yehua發表於2023-01-17

叢集環境搭建

作業系統規劃

節點

系統版本

cpu

記憶體

節點一

RHEL7.6

>=32

>=256G

節點二

RHEL7.6

>=32

>=256G

備註:兩個系統配置需完全一樣。以上為最低配置,可以對應增大。系統版本 RHEL7.6 19C 最佳實踐版本。

主機檔案規劃

兩個節點:

掛載點

大小

/

100G

/oracle

100G

/swap

32G

/backup

1T+

備註:以上檔案系統都必須建立單獨的 lv 裝置。

主機網路卡規劃

 

節點

網路卡數

用途

節點一

2 張物理網路卡或則4張物理網路卡

一個網路卡用於叢集內部的私有通訊(私有網路卡),另一個網路卡用於提供對外服務(公共網路卡)

節點二

2 張物理網路卡或者4張物理網路卡

備註:4張網路卡可以兩兩做bond(冗餘)。

規劃

節點

IP 規劃

用途

節點一

提供2個公網IP

一個為物理IP,一個為VIP

提供1個私網IP(不對外,自行設定)

用於叢集之間通訊IP

節點二

提供2個公網IP

一個為物理IP,一個為VIP

提供1個私網IP(不對外,自行設定)

用於叢集之間通訊IP


提供1個SCAN IP

SCAN IP

  備註:客戶需要提供 5 個公網 IP 地址,兩個私網 IP 地址。

共享儲存規劃

磁碟名稱

大小

OCRVOTE

3 塊5G盤

DATA

1.5T+

備註:共享儲存需要對映到兩臺主機,並且主機上看到的磁碟名字對應一致。

安裝前準備

    兩臺主機安裝上述配置完成之後,需要將相應介質上傳至主機上,如下:

上傳節點

上傳目錄

上傳安裝包

說明

節點一

/oracle

系統映象ISO

rhel-server-7.6-x86_64-dvd.iso

叢集安裝前,系統配置使用

LINUX.X64_193000_db_home.zip

資料庫軟體安裝包

LINUX.X64_193000_grid_home.zip

叢集軟體安裝包

p34130714_190000_Linux-x86-64.zip

p6880880_190000_Linux-x86-64.zip

資料庫和叢集補丁包

compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

額外需要作業系統包


目標庫資料同步後開啟(12.1.0.2單機)

業務停止

    業務停止,確保無新增資料寫入。

源庫和目標庫禁止自動作業任務

alter system set job_queue_processes=0 scope=both sid='*';


源庫雙節點關閉後,啟動一號節點

    源庫關閉,重新啟動一號節點例項,並確保無業務會話連線至資料庫。在一號節點切換歸檔,資料完全同步後,開啟目標庫。

srvctl stop database -d XX

一號節點:

startup

切換歸檔:

alter system swich logfile;

 

目標庫開啟

 

停止應用歸檔:  

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE   CANCEL;

將STANDBY資料庫切換為PRIMARY資料庫: ­

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE   FINISH;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH   FORCE;

檢查狀態:

SELECT DATABASE_ROLE FROM V$DATABASE;

開啟目標庫:

ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

ALTER DATABASE OPEN;

或者

shutdown immediate;

startup;

 


源庫正常關閉

    源庫一號節點正常關閉:

shutdown immediate;

    至此,完成源庫到目標庫資料同步及切換。

和SYSTEM重複物件檢查

select object_name, object_type from dba_objects   where (object_name,object_type) in (select object_name,object_type from   dba_objects where owner = 'SYS') and owner = 'SYSTEM';

 

無效物件檢查

create table object_2021 as select * from   dba_objects;

select count(*) from object_2021 where status='INVALIED';

 

確認資料檔案不需要介質恢復且不處於backup模式

select * from v$recover_file;
  SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';

 

密碼狀態為 EXPIRED 的使用者檢查

確保業務使用者正常:


備註:

在開始升級之前,請確定是否要對密碼處於 EXPIRED 狀態且其帳戶處於 LOCKED 狀態的預設 Oracle 資料庫帳戶使用密碼身份驗證。

 

在升級到 Oracle Database 19c 之後,預設的 Oracle 賬號(沒有設定密碼並且處於 EXPIRED LOCKED 狀態)會被置為   NO AUTHENTICATION 狀態。

 

由於此新功能,這些預設賬號會變為 schema-only 帳戶,並無法使用密碼驗證。此功能的好處是管理員不再需要定期修改這些 Oracle 預設賬號的密碼。

 

此功能還可以降低未授權者使用預設密碼侵入這些帳戶的安全風險。

 

如果要在升級期間阻止將這些 Oracle 帳戶設定為僅 schema-only 帳戶,則必須在開始升級之前為該帳戶設定有效的強密碼,或者在升級後為這些帳戶設定有效的強密碼,   或者在升級前解鎖帳戶。

 

升級後,管理員還可以為僅 schema-only 啟用密碼身份驗證。 但是,為了更好的安全性, Oracle 建議您將這些帳戶保留為 schema-only 賬號。

 

處理分散式事務

SQL>

 

IF THIS RETURNS ROWS YOU SHOULD DO THE FOLLOWING:

SQL> SELECT LOCAL_TRAN_ID FROM DBA_2PC_PENDING;

SQL> EXECUTE   DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('');

SQL> COMMIT;

 

 

檢查

    如果安裝了 Oracle Multimedia 或者 Oracle Spatial ,在安裝前檢查 PUBLIC synonym AREA 。它應當被定義為 OGC_AREA 的同義詞,否則會導致升級後一些 DB 元件是失效的狀態

SQL> select owner, synonym_name, table_owner,   table_name from dba_synonyms where synonym_name = 'AREA';

 

OWNER           SYNONYM_NAME TABLE_OWNER TABLE_NAME

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

PUBLIC           AREA                      MDSYS            OGC_AREA

 

 

禁用所有自定義的 before/after DDL 型別的觸發器

SQL> SELECT   TRIGGER_NAME,TRIGGER_TYPE,STATUS,ACTION_TYPE FROM all_triggers where trigger_name   like '%DDL%';

 

SQL> SELECT   TRIGGER_NAME,TRIGGER_TYPE,STATUS,ACTION_TYPE FROM all_triggers where   TRIGGERING_EVENT like '%DDL%';

 

ALTER TRIGGER   GGS_DDL_TRIGGER_BEFORE DISABLE;

 

 

收集資料字典統計資訊

EXEC   DBMS_STATS.GATHER_DICTIONARY_STATS;

 

執行preupgrade.jar升級預檢

    19c preupgrade.jar 替換了 utlu112i.sql 來執行預檢工作,這個 java 程式會生成兩個 sql 指令碼檔案來修復一些簡單的問題,比如提前收集字典統計資訊之類,但是很多仍然需要手工操作

preupgrade.jar 語法如下

 

$Earlier_release_Oracle_home/jdk/bin/java -jar $New_release_Oracle_home/rdbms/admin/preupgrade.jar [FILE|TERMINAL] [TEXT|XML] [DIR output_dir]

FILE|TERMINAL  指定檢查結果輸出到終端還是檔案,預設是檔案

TEXT|XML       指定結果格式是文字還是 XML ,預設是文字

DIR -            指定日誌輸出到 <output_dir> 目錄 .

如果沒有指定 output_dir 目錄,則優先到 $ORACLE_BASE/cfgtoollogs/<dbname>/preupgrade/ 目錄,如果沒有 ORACLE_BASE 環境變數則到 $ORACLE_HOME/cfgtoollogs/<db_name>/preupgrade/

 

~

export   ORACLE_BASE=/u01/app/oracle     #### 注意要用 12c jdk 來執行

export   ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1

export ORACLE_SID=XX

 

$ORACLE_HOME/jdk/bin/java -jar /oracle/product/19.3.0/dbhome_1/rdbms/admin/preupgrade.jar   file text dir ./precheck.log

 

==================

PREUPGRADE SUMMARY

==================

  /home/oracle/precheck.log/preupgrade.log

    /home/oracle/precheck.log/preupgrade_fixups.sql

    /home/oracle/precheck.log/postupgrade_fixups.sql

 

Execute fixup scripts   as indicated below:

 

Before upgrade:

 

Log into the database   and execute the preupgrade fixups

@/home/oracle/precheck.log/preupgrade_fixups.sql

 

After the upgrade:

 

Log into the database   and execute the postupgrade fixups

@/home/oracle/precheck.log/postupgrade_fixups.sql

 

 

日誌顯示:

more preupgrade.log

Report generated by   Oracle Database Pre-Upgrade Information Tool Version

19.0.0.0.0 Build: 1 on   2021-01-05T16:47:28

.........

.........

  ORACLE GENERATED FIXUP SCRIPT

  =============================

  All of the issues in database XX

  which are identified above as AFTER UPGRADE   "(AUTOFIXUP)" can be resolved by

  executing the following

 

      SQL>@/home/oracle/precheck.log/postupgrade_fixups.sql

 

 

執行:

@/home/oracle/precheck.log/preupgrade_fixups.sql 

 

正式升級資料庫 ,刷資料字典升級資料庫

  把引數檔案從 12C $ORACLE_HOME/dbs 下複製到 19C $ORACLE_HOME/dbs 下。

    19c 軟體啟動

source .profile19c

echo $ORACLE_HOME

SQL> startup upgrade

 

cd / oracle /product/19.3.0/dbhome_1/bin

nohup ./dbupgrade &

 

複製tnsnames.ora和密碼檔案到19c環境

$ cp $ORACLE_HOME/network/admin/tnsnames.ora   .

$ cp   $ORACLE_HOME/dbs/orapwXX .

 

備註:

如果 REMOTE_LOGIN_PASSWORDFILE 初始化引數設定為 EXCLUSIVE ,則使用 ORAPWD 建立或遷移密碼檔案。   Oracle Database 12c 及更高版本為 ORAPWD 提供了一個新選項,用於從現有資料庫遷移密碼檔案。

 

對於 Oracle   Database 12c 2 版( 12.2 )及更高版本,如果 REMOTE_LOGIN_PASSWORDFILE 設定為 SHARED ,則會收到升級前檢查驗證警告。 您可以選擇以下選項之一來解決此問題:

 

    透過設定 REMOTE_LOGIN_PASSWORDFILE = NONE 完全禁用基於密碼檔案的身份驗證

 

    透過設定 REMOTE_LOGIN_PASSWORD = EXCLUSIVE 限制基於密碼檔案的身份驗證

 

重新開啟資料庫刷無效物件

sqlplus / as sysdba

SQL>

SQL> startup

 

元件狀態檢查:

SQL>col COMP_NAME   for a55;

SQL> set pages 400;

SQL> select   comp_name,version,status from dba_registry;

 

修復無效物件:

$ sqlplus "/ AS SYSDBA"

SQL> @

 

    此時 dba_registry 內所有元件狀態從 UPGRADED 變為 VALID

    如果元件 Oracle Real Application Clusters 的狀態為 OPTION OFF ,則 當轉換為RAC後,再 對該元件進行重新編譯。

 

執行 Post-Upgrade Status 工具, utlusts.sql 並且檢查升級的日誌

$ sqlplus "/as sysdba"

SQL> STARTUP

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

 

    注意 : 之前版本的 utluNNNs.sql 19c 上被替換為 utlusts.sql

    注意 : 如果執行 utlusts.sql 時碰到錯誤 "ORA-06502: PL/SQL: numeric or value error: character string buffer too small" ,那麼執行

$ sqlplus "/as sysdba"

SQL> STARTUP

SQL> @?ORACLE_HOME/rdbms/admin/utlusts.sql   TEXT

 

 

資料庫升級後 ,無效物件比對

對比之前的無效物件進行確認

select   owner,object_name from dba_objects where status<>'VALID' and   object_name not in (select object_name from object_2021 where   status<>'VALID');

 

執行預檢生成的修復指令碼

SQL>@/home/oracle/precheck.log/postupgrade_fixups.sql

 

重新收集統計資訊

 

升級那些使用 DBMS_STATS 建立的統計資訊表(Statistics Tables)

如果我們使用 DBMS_STATS.CREATE_STAT_TABLE 手工建立了一些統計資訊表( statistics tables ),那麼執行下面的命令來升級這些表(如果沒有建立過統計資訊表,那這一步驟可以忽略)。例如:

 

EXECUTE   DBMS_STATS.UPGRADE_STAT_TABLE('SYS', 'dictstattab');

對每個統計資訊表都要執行一遍上面的命令。

 

 

修改RAC引數檔案

mv /oracle/app/product/19.3.0/db_1/dbs/initXX1.ora /oracle/app/product/19.3.0/db_1/dbs/initXX1.ora.bak

 

vi /oracle/app/product/19.3.0/db_1/dbs/initXX1.ora

*.audit_file_dest=xxx

*.compatible=xxx

*.control_files=xxx

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='XX'

*.db_recovery_file_dest='+DATA'

*.db_recovery_file_dest_size=429496729600

*.dispatchers='(PROTOCOL=TCP) (SERVICE=XXXDB)'

*.job_queue_processes=0

*.log_archive_dest_1='LOCATION=+DATA'

*.log_archive_format='%t_%s_%r.dbf'

*.open_cursors=300

*.pga_aggregate_target=21474800000

*.processes=3000

*.remote_login_passwordfile='exclusive'

*.sessions=3305

*.sga_max_size=85899300000

*.sga_target=80899300000

*.undo_management='AUTO'

*.undo_retention=86400

*.undo_tablespace='UNDOTBS1'

*.diagnostic_dest='/oracle/app'

*.cluster_database=true

*.db_files=500

*.remote_listener='rac-scanip:1521'

XX1.instance_number=1

XX2.instance_number=2

XX2.thread=2

XX1.thread=1

XX2.undo_tablespace='UNDOTBS2'

XX1.undo_tablespace='UNDOTBS1'

 

使用ORACLE_SID=XX1

startup nomount 建立:

create spfile='+data' from pfile;

 

修改雙節點$ORACLE_HOME/dbs 目錄下引數檔案,指向asm中的spfile路徑

一節點:

vi $ORACLE_HOME/dbs/initXX1.ora

SPFILE='+data/XX/PARAMETERFILE/spfile.434.989222673'

 

二節點:

vi $ORACLE_HOME/dbs/initXX2.ora

SPFILE='+data/XX/PARAMETERFILE/spfile.434.989222673'

 

注意:如果例項從單機的名稱變成rac的名稱,那麼兩個節點的密碼檔名字都需要作出相應的更改。

 

新增二節點資源

shutdown immediate;

export ORACLE_SID=XX1

startup;

建立二節點undo (如果undotbs2已經複製過來,這步忽略)

create undo tablespace undotbs2 datafile   '+DATA/XX/datafile/undotbs02.dbf' size 1G autoextend on;

 

建立二節點日誌檔案

alter database add logfile thread 2 group 8 '+DATA/XX//ONLINELOG/redo2_01'   size 800m;

alter database add logfile thread 2 group 9   '+DATA/XX/ONLINELOG/redo2_02' size 800m;

 

 

啟用2節點redo

alter database enable thread 2;

 

重置temp檔案

SQL> select file_name from dba_temp_files; 

 

create temporary tablespace temp1 tempfile '+DATA' size 1G autoextend on;  

alter database default temporary tablespace temp1;

drop tablespace temp including contents and datafiles;

create temporary tablespace temp tempfile '+DATA' size 1G autoextend on;

alter database default temporary tablespace temp;

drop tablespace temp1 including contents and datafiles;

 

( 刪除臨時表空間hang,嘗試推出當前會話,重新登陸後刪除。)

 

 

重新整理RAC元件

SQL>spool on

SQL>spool catclust.txt

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

SQL>spool off

 

重新整理完成後,重新編譯無效物件

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

 

將資料庫及例項加入叢集管理

二節點:

檢查二節點是否存在目錄 :*.audit_file_dest='/oracle/app/admin/XX/adump'

 

一節點:

手工關閉正在執行的例項

shutdown immediate;

 

su - oracle

srvctl add database -d XX -o '/oracle/app/product/19.3.0/db_1' -p   '+data/XX/PARAMETERFILE/spfile.434.989222673'

srvctl add instance -d XX -i XX1 -n rac1

srvctl add instance -d XX -i XX2 -n rac2

 

srvctl start instance -d XX -n rac1

srvctl start instance -d XX -n rac2

srvctl status database -d XX

 

    檢視磁碟組版本:

select name,state,type,total_mb,compatibility,database_compatibility from   v$asm_diskgroup;

 

    修改磁碟組版本:

ALTER DISKGROUP data SET ATTRIBUTE 'compatible.asm' = '19.0.0.0.0';

ALTER DISKGROUP data SET ATTRIBUTE 'compatible.rdbms' = '19.0.0.0.0';

 

    磁碟組的屬性只能增大,不能減小,如果增大過程出現錯誤,那麼只能透過重建磁碟組來調整相容性屬性值。

 

    重啟兩節點驗證有沒有報錯

srvctl stop database -d XX

srvctl start database -d XX

su – gird

crs_stat –t

 

    啟動之前的DDL觸發器:

SQL> SELECT TRIGGER_NAME,TRIGGER_TYPE,STATUS,ACTION_TYPE FROM   all_triggers where trigger_name like '%DDL%';

TRIGGER_NAME                     TRIGGER_TYPE     STATUS   ACTION_TYPE

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

GGS_DDL_TRIGGER_BEFORE           BEFORE EVENT     ENABLED  PL/SQL

NO_VM_DDL                        BEFORE EVENT     DISABLED PL/SQL

 

ALTER TRIGGER GGS_DDL_TRIGGER_BEFORE ENABLE;

   

    開啟自動任務:

alter system set job_queue_processes=1000 scope=both sid='*';

 


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

相關文章