通過此文章來分享一下 Oracle 伺服器遷移過程中的一些經驗,希望對大家有些許幫助。
本文旨在幫助更多的同學,會提及一些基本命令或技巧,但不贅述,後續有機會再進一步分享各個細節。
之前因機房遷移等原因,接手過一些 Oracle 伺服器,並將它們從機房 A 的機器上,遷移到機房 B 的機器上。
經歷過大災大難的都深刻體會到其重要性。然而此處,不只備份資料庫的資料。
什麼? 你們已經通過 Ansible/Salt/指令碼將所有組態檔管理及備份等全部自動化了?
英雄所見略同!在遷移過程中,資料庫方面已經逐漸通過 Salt 實現了設定管理自動化。
因為組態檔是靜態的,可在遷移前備份一下。要知道,機房遷移完成後,再想看原來的設定,沒有備份,只能悔不當初了。
資料庫相關的 Linux 系統組態檔。
以下系統檔案如果 Ops 已經通過 Ansible 或 Salt 等做了自動化管理,此步可略過。
/etc/hosts
/etc/sysctl.conf
/etc/security/limits.conf
其他可能有用的 Linux(CentOS) 系統檔案
/etc/*release
/home/oracle/.bash_history
/root/.bash_history
/root/.bash_profile
/root/.bashrc
/etc/yum.repos.d/
/var/spool/cron/
/proc/version
/proc/meminfo
/proc/cpuinfo
/proc/vmstat
/proc/filesystems
/etc/issue
/etc/resolv.conf
/etc/ssh/sshd_config
/etc/ssh/ssh_config
/etc/passwd
/etc/hosts
/etc/sysctl.conf
/etc/pam.d/login
/etc/security/limits.conf
/etc/security/limits.d
/etc/selinux/config
/etc/sudoers
/etc/sudoers.d/
有的系統中也用到了 Oracle Gateway,考慮它安裝設定較獨立且並不十分普遍,此處未列出 Oracle Gateway 相關組態檔。
/home/oracle/.bash_profile
/etc/oraInst.loc
/etc/oratab
$ORA_INVENTORY/orainstRoot.sh
$ORACLE_HOME/root.sh
$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/network/admin/tnsnames.ora
$ORACLE_HOME/dbs/init*.ora
$ORACLE_HOME/dbs/orapw*.ora
通過以下各種方式備份,有備無患。此步是在遷移完成,最後停庫關機前的操作。因其也屬於備份,故將其提前至此。
將各種歷史備份( exp,expdp,RMAN 備份等) 從原 rsync 伺服器遷移到新的 rsync 伺服器。
雖然 Oracle 官網有可下載,為避免不必要的麻煩,將安裝軟體也備份一下。況且以後想再找相同版本的軟體,並不一定容易。
如果是按拷貝物理檔案的方式遷移,後面想再通過安裝的方式搭建生產或測試環境,就需要這些軟體了。
注: 目前已通過 Salt 實現了 Oracle 一鍵安裝及設定管理自動化,相關軟體也放在了統一的伺服器以實現設定管理自動化。
如資料庫伺服器上各種指令碼等。
在資料庫遷移過程在有可能用到 Oracle 高可用架構,在此給出其大致結構圖供參考。
Switchover 也類似。
能夠做主從的話,此方式為最佳方式。切換時間短,對業務影響較小。
如受網路等因素影響,兩個機房無法做主從,此方式將不適用。
RMAN 備份,即全量備份,是範例級的備份。如:控制檔案,資料檔案,archive log 等。
RMAN 是做備份恢復的常用方式。
它可以用於如下場景:
當然,RMAN 功能遠不止於此。
前提:相同作業系統版本,相同資料庫版本等
優點:操作相對簡單,除安裝必要的依賴包外,只需複製檔案即可
注意:額的資料庫版本在拷貝資料庫檔案後有可能不需要額外處理,有的則可能需要作進一步處理,如執行 clone.pl
等命令。
/home/oracle/.bash_profile
/etc/oratab
$ORACLE_HOME/network/admin/listener.ora
$ORACLE_HOME/network/admin/tnsnames.ora
$ORACLE_HOME/dbs/init*.ora
$ORACLE_HOME/dbs/orapw*.ora
通過以下 SQL 查詢控制檔案位置
SELECT name FROM v$controlfile;
${ORACLE_BASE}/oradata
${ORACLE_BASE}/fast_recovery_area
有的資料目錄放在了單獨的硬碟(如 SSD)上,可以通過 SQL查詢資料檔案位置
SELECT name FROM v$datafile;
通過如下 SQL 查詢 archive log 位置
ARCHIVE LOG LIST;
SHOW PARAMETER arch;
跨平臺的可以考慮這種方式。如從 Windows 遷移到 Linux上。
此次遷移中,一些單機的資料庫採用了此種方式。
如通過 Golden Gate 等。
一些系統中用到了Oracle Gateway。
如果需要從 Oracle 存取 其他型別資料庫(如 SQL Server),就需要安裝設定 Oracle Gateway 了。
各個使用者下的各個定時任務及相關指令碼也需要注意遷移到新的機器。
由於遷移後機器名可能有變化,所有相關的設定也需要相應修改。
機房 A 到機房 B 網路是通的,但機房 B 到機房 A 網路是不通的。另外,本地網路可以存取機房 A 和機房 B 裡的機器,但機房 A 裡的機器不能通過 ssh 或 scp 存取機房 B 裡的機器。
對於動輒幾百G的資料,通過本地網路下載和上傳無疑是十分低效的。
根據不同情況可以採用如下兩種方法。
相信很多大牛看到這個名字,已經露出會意的微笑。
nc 的一個優點就是,不需要使用者名稱密碼,簡單易用,只要網路通即可,並且傳輸效率也是不錯的。
以下是 nc 命令用法範例。
在接收端執行如下命令準備接收:
nc -l 54321| pv |tar -xvf -
在傳送端傳送檔案:
tar -cvf - test.txt |nc test.corp.com 54321
相比 nc 命令,rsync 的以下優勢,也給本次資料遷移帶來了極大便利:
一,增量同步。如幾百G的檔案,用 nc 的話,如果中途失敗,還得重頭再來
二,通過 exclude-from 引數可以過慮掉大量的紀錄檔檔案或目錄等
rsync 還經常用於備份等,當然,rsync 命令功能及用途遠不止於此。
以下是 rsync 命令用法範例。
rsync -aP /test/dir1 [email protected]::test/
rsync -aP /test/dir1 [email protected]::test/ --password-file=$PASSWORD_FILE --exclude-from="$EXCLUDE_FILE"
相信大家已經注意到上面範例中的遠端路徑 10.20.20.1::test。
是的,rsync 是需要在伺服器端設定的,10.20.20.1::test 就是設定好的路徑。
其設定也較簡單,在此略過。
通過上述內容,大家可以看到有大量的人工操作,而且並不一定面面俱到。
如果設定管理(如通過 Ansible 或 Salt 等)做的好的話,會簡單方便很多。
自動化做到極致情況下,Oracle 伺服器遷移所需要做的可能僅有如下這些:
注:目前設定管理自動化所涉及的所有指令碼,組態檔等均已提交 git,所有軟體都放在統一的伺服器上。
準備工作
在新機器上,跑一下 fresh install 的設定管理自動化指令碼,所有的軟體自動安裝,使用者自動建立並設定,作業系統檔案等將自動設定好
資料遷移
通過以上任一合適的方式遷移資料庫
設定管理
在新機器上,跑一下設定管理自動化,所有需要修改的設定及指令碼、定時任務等均自動部署
原文連結:
https://www.cnblogs.com/dbadaily/p/oracle-migration.html
您瀏覽的網址與此連結不一致的話,則為未授權的轉載,為了更好的閱讀體驗,建議閱讀原文。
關注 DBA Daily 公眾號,第一時間收到文章的更新。
通過一線 DBA 的日常工作,學習實用資料庫技術乾貨!
GitLab supports only PostgreSQL now