首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Linux 環境下 Oracle 9i Data Guard 部署實戰

     編輯:Oracle 資料庫基礎

環境說明

  • 作業系統:Linux 9(Red Hat 9 / AS 3 等)
  • 資料庫版本:Oracle 9i
  • Primary:1.1.1.1
  • Standby:1.1.1.2(雙雙為普通 PC)

第一部分:Oracle 9i 在 Linux 9 上的安裝與常見問題排解

1. runInstaller 執行錯誤:缺少 libstdc++-libc6.1-1.so.2

-bash-2.05b$ ./runInstaller
Initializing Java Virtual Machine from /tmp/OraInstall.../jre/bin/java. Please wait...
/tmp/OraInstall.../jre/bin/i386/native_threads/Java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory

解決方法:

export LD_ASSUME_KERNEL=2.4.19
# 下載 libcwait.c
wget ftp://people.redhat.com/drepper/libcwait.c
# 編譯
gcc -shared -o libcwait.so -fpic -O2 libcwait.c
export LD_PRELOAD=/path/to/libcwait.so

此法可修正 NetCA、DBCA 安裝失敗。Agent Configuration Assistant 仍可能失敗,參考 ChinaUnix《在 RHAS3 上成功安裝 Oracle 9204》修復。

2. 安裝後修補與 Agent 修復

  1. 下載 p3238244_9204_Linux.zip 與 p2617419_220_GENERIC.zip (OPatch)
  2. 套用修補程式:
su - oracle
cp p2617419_210_GENERIC.zip /tmp
cd /tmp
unzip p2617419_210_GENERIC.zip
export PATH=$PATH:/tmp/OPatch:/sbin
unzip p3238244_9204_Linux.zip
cd 3238244
opatch apply
  1. 重新連結 ins_oemagent.mk:
cd $ORACLE_HOME/network/lib
make -f ins_oemagent.mk install

測試 agentctl start/stop/status 確認 Agent 正常。若資料庫無法啟動(找不到初始化檔),用 DBCA 刪除重建資料庫。

3. 其他常見安裝問題

  • 安裝介面亂碼:export LANG=en_us 再執行 runInstaller
  • /etc/oratab 錯誤:cp /dev/null /etc/oratab 清空
  • 建庫 46% 共享記憶體不足 (ORA-27123):
    echo 4294967295 > /proc/sys/kernel/shmmax
    或修改 /etc/sysctl.conf 加入 kernel.shmmax=4294967295

第二部分:Data Guard 設定步驟

1. 兩端皆啟用歸檔模式

2. Primary 端備份與產生 Standby Controlfile

[oracle@primary]$ sqlplus "/ as sysdba"
SQL> shutdown immediate
SQL> startup
SQL> archive log list;
SQL> alter database create standby controlfile as '/home/oracle/standby.ctl';
SQL> exit
[oracle@primary]$ tar -cvf oradata.tar oradata

3. Standby 端接收檔案

  • 將 oradata.tar、standby.ctl、$ORACLE_HOME/dbs/orapwOracle 透過 FTP 傳至 Standby 對應目錄
  • 解壓 oradata.tar 至 /home/oracle/oradata/primary(無次層目錄)
  • 備份原 orapwOracle,以 Primary 的覆蓋
  • 在 $ORACLE_HOME/admin 建立 primary/bdump,cdump,udump 目錄

4. 參數檔設定

Primary (initoracle.ora):

*.log_archive_dest_1='LOCATION=/home/oracle/oradata/archivelog/'
*.log_archive_dest_2='service=standby mandatory reopen=60'
*.log_archive_format='log_%t_%s.arc'
*.log_archive_start=TRUE
*.remote_login_passwordfile='EXCLUSIVE'
...(其餘參數見原文)

Standby (initoracle.ora):

*.control_files='/home/oracle/oradata/primary/standby.ctl'
*.fal_server='primary'
*.fal_client='standby'
*.db_file_name_convert=("/home/oracle/oradata/oracle","/home/oracle/oradata/primary")
*.log_file_name_convert=("/home/oracle/oradata/archivelog","/home/oracle/oradata/archivelog")
*.standby_archive_dest=/home/oracle/oradata/archivelog
*.standby_file_management=AUTO
...(其餘參數見原文)

5. 網路設定

tnsnames.ora (兩端皆需):

primary=(description=(address=(protocol=tcp)(port=1521)(host=1.1.1.1))(connect_data=(SID=oracle)))
standby=(description=(address=(protocol=tcp)(port=1521)(host=1.1.1.2))(connect_data=(SID=Oracle)))

listener.ora (Standby 端新增 SID_LIST):

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = oracle)(GLOBAL_DBNAME = oracle)(ORACLE_HOME = /home/Oracle/oradata)))
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))))

兩端啟動 lsnrctl start,並用 tnsping 驗證連通性。

6. 啟動 Standby 資料庫

SQL> startup nomount;
SQL> alter database mount standby database;
SQL> alter database recover managed standby database disconnect from session;

7. Primary 設定歸檔傳輸並切換日誌

SQL> alter system set log_archive_dest_2='service=standby mandatory reopen=60';
SQL> alter system switch logfile;
SQL> /  (再執行一次確保傳輸啟動)

在 Standby 觀察 alert_primary.log 確認 MRP0 進程啟動與日誌應用。

8. Switchover 角色互換

  1. 修改 Primary 參數檔:新增 fal_server='standby'、fal_client='primary'、db_file_name_convert、log_file_name_convert、standby_file_management=AUTO、standby_archive_dest;刪除 log_archive_dest_2
  2. 修改 Standby 參數檔:新增 log_archive_dest_2='service=primary mandatory reopen=60'、log_archive_dest_state_2=ENABLE;刪除 standby_archive_dest、fal_server、fal_client、db_file_name_convert、log_file_name_convert、standby_file_management
  3. Primary 執行:
    SQL> alter database commit to switchover to physical standby with session shutdown;
    SQL> shutdown immediate
    SQL> create spfile from pfile;
    SQL> startup nomount;
    SQL> alter database mount standby database;
  4. Standby 執行:
    SQL> alter database commit to switchover to primary with session shutdown;
    SQL> shutdown immediate
    SQL> create spfile from pfile;
    SQL> startup;
  5. 原 Primary (現 Standby) 啟動受管理恢復:
    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

9. 驗證與常見問題

  • 在新 Primary 建表、切換日誌,舊 Primary 以 READ ONLY 開啟查詢驗證同步
  • 啟動順序:Standby Listener → Standby DB → Primary Listener → Primary DB
  • 關閉順序:Primary DB → Standby DB
  • 9i 支援多次 Switchover,8i 僅支援一次 Failover
  • 監控視圖:v$database、v$archive_gap
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved