使用 Azure 檔案儲存體來備份和復原 Azure Linux VM 上的 Oracle Database
適用於:✔️ Linux VM
本文示範使用 Azure 檔案儲存體作為媒體,以備份和還原 Azure 虛擬機器 (VM) 上執行的 Oracle 資料庫。 本文中的步驟已針對 Oracle 12.1 和更新版本進行測試。
在本文中,您會使用 Oracle Recovery Manager (RMAN) 將資料庫備份至透過伺服器訊息區 (SMB) 通訊協定掛接至 VM 的 Azure 檔案共用。 使用 Azure 檔案儲存體作為備份媒體符合成本效益,效能又高。 不過,對於大型資料庫,Azure 備份 提供更好的解決方案。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
若要執行備份和復原程序,您必須先建立已安裝 Oracle Database 執行個體的 Linux VM。 我們建議使用 Oracle 12.x 或更新版本。
遵循在 Azure VM 中建立 Oracle Database 執行個體中的步驟,建立 Oracle Database 執行個體。
準備資料庫環境
若要對 VM 建立安全殼層 (SSH) 工作階段,請使用下列命令。 將
<publicIpAddress>
取代為 VM 的公用位址值。ssh azureuser@<publicIpAddress>
切換至根使用者:
sudo su -
將
oracle
使用者新增至 /etc/sudoers 檔案:echo "oracle ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
此步驟假設您有一個 Oracle 執行個體 (test) 在名為 vmoracle19c 的 VM 上執行。
切換至
oracle
使用者:sudo su - oracle
連線之前,請先設定環境變數
ORACLE_SID
:export ORACLE_SID=test;
您也應該使用下列命令,將
ORACLE_SID
變數新增至oracle
使用者的 .bashrc 檔案,供未來登入時使用:echo "export ORACLE_SID=test" >> ~oracle/.bashrc
啟動 Oracle 接聽程式 (如果尚未執行):
lsnrctl start
輸出應類似下列範例:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 18-SEP-2020 03:23:49 Copyright (c) 1991, 2019, Oracle. All rights reserved. Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 19.0.0.0.0 - Production System parameter file is /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Log messages written to /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production Start Date 18-SEP-2020 03:23:49 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/vmoracle19c/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=vmoracle19c.eastus.cloudapp.azure.com)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) The listener supports no services The command completed successfully
建立快速復原區域的位置:
mkdir /u02/fast_recovery_area
連線至資料庫:
sqlplus / as sysdba
啟動資料庫 (如果尚未執行):
SQL> startup
設定快速復原區域的資料庫環境變數:
SQL> alter system set db_recovery_file_dest_size=4096M scope=both; SQL> alter system set db_recovery_file_dest='/u02/fast_recovery_area' scope=both;
確認資料庫處於
ARCHIVELOG
啟用在線備份的模式。檢查記錄封存狀態:
SQL> SELECT log_mode FROM v$database; LOG_MODE ------------ NOARCHIVELOG
如果記錄封存處於
NOARCHIVELOG
模式,請在 SQL Plus 中執行下列命令:SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE OPEN; SQL> ALTER SYSTEM SWITCH LOGFILE;
建立資料表以測試備份和還原作業:
SQL> create user scott identified by tiger quota 100M on users; SQL> grant create session, create table to scott; SQL> connect scott/tiger SQL> create table scott_table(col1 number, col2 varchar2(50)); SQL> insert into scott_table VALUES(1,'Line 1'); SQL> commit; SQL> quit
備份至 Azure 檔案儲存體
若要備份至 Azure 檔案儲存體,請完成下列步驟:
設定 Azure 檔案儲存體
在本節中,您會使用 Oracle RMAN 將 Oracle 資料庫備份至 Azure 檔案儲存體。 Azure 檔案共用是位於雲端的完全受控檔案共用。 您可以使用 SMB 通訊協定或網路檔案系統 (NFS) 通訊協定來存取它們。
下列程序涵蓋建立使用 SMB 通訊協定掛接至 VM 的檔案共用。 關於如何使用 NFS 來掛接,相關資訊請參閱建立 NFS 共用。
當您掛接 Azure 檔案共用時,請使用 cache=none
選項來停用檔案共用資料的快取。 若要確保 oracle
使用者擁有在共用中建立的檔案,請設定 uid=oracle
和 gid=oinstall
選項。
設定儲存體帳戶:
在 Azure 入口網站中,選取 [+ 建立資源],然後搜尋並選取 [儲存體帳戶]。
在 [建立儲存體帳戶] 窗格上:
- 針對 [資源群組],選取現有的資源群組 rg-oracle。
- 針對 [儲存體帳戶名稱],輸入 oracbkup1。
- 確定 [位置] 設為與資源群組中所有其他資源相同的區域。
- 將 [效能] 設定為 [標準]。
- 針對 [帳戶類型],請選取 [StorageV2 (一般用途 v2)]。
- 針對 [複寫],請選取 [本地備援儲存體 (LRS)]。
選取 [進階] 索引標籤。在 [Azure 檔案儲存體] 底下,將 [大型檔案共用] 設定為 [已啟用]。 選取 [檢閱 + 建立],然後選取 [建立]。
建立儲存體帳戶時,請移至資源,然後選取 [檔案共用]。
選取 [+ 檔案共用],然後在 [新增檔案共用] 面板上:
針對 [名稱],輸入 orabkup1。
將 [配額] 設定為 10240 gibibytes (GiB)。
配額反映檔案共用的成長上限。 由於您在此範例中使用的是標準儲存體,因此資源會隨用隨付,且不會佈建。 將配額設定為 10 個字節 (TiB) 不會產生超出您使用的成本。 如果您的備份策略需要更多儲存體,請將配額設定為足夠保存所有備份的層級。
在 [階層] 底下,選取[交易最佳化]。
選取 建立。
建立檔案共用時,請在 [檔案共用設定] 窗格上選取 [orabkup1]。
選取 [連線] 索引標籤以開啟 [連線] 面板,然後選取 [Linux] 索引標籤。複製提供的命令,以使用 SMB 通訊協定掛接檔案共用。
將 Azure 檔案共用裝載至 VM
建立掛接點:
sudo mkdir /mnt/orabackup
設定認證:
if [ ! -d "/etc/smbcredentials" ]; then sudo mkdir /etc/smbcredentials fi
執行下列命令。 將
<Your Storage Account Key1>
取代為您稍早擷取的儲存體帳戶金鑰。if [ ! -f "/etc/smbcredentials/orabackup1.cred" ]; then sudo bash -c 'echo "username=orabackup1" >> /etc/smbcredentials/orabackup1.cred' sudo bash -c 'echo "password=<Your Storage Account Key1>" >> /etc/smbcredentials/orabackup1.cred' fi
變更認證檔案的權限:
sudo chmod 600 /etc/smbcredentials/orabackup1.cred
將掛接新增至 /etc/fstab 檔案:
sudo bash -c 'echo "//orabackup1.file.core.windows.net/orabackup /mnt/orabackup cifs nofail,vers=3.0,credentials=/etc/smbcredentials/orabackup1.cred,dir_mode=0777,file_mode=0777,serverino,cache=none,uid=oracle,gid=oinstall" >> /etc/fstab'
使用 SMB 通訊協定執行命令以掛接 Azure 檔案共用:
sudo mount -t cifs //orabackup1.file.core.windows.net/orabackup /mnt/orabackup -o vers=3.0,credentials=/etc/smbcredentials/orabackup1.cred,dir_mode=0777,file_mode=0777,serverino,cache=none,uid=oracle,gid=oinstall
如果您收到類似下列範例的錯誤,則您的 Linux 主機上可能不會安裝 Common Internet File System (CIFS) 套件:
mount: wrong fs type, bad option, bad superblock on //orabackup1.file.core.windows.net/orabackup
若要檢查是否已安裝 CIFS 套件,請執行下列命令:
sudo rpm -qa|grep cifs-utils
如果命令未傳回任何輸出,請使用下列命令安裝 CIFS 封裝。 然後重新執行
mount
命令以掛接 Azure 檔案共用。sudo yum install cifs-utils
使用下列命令檢查檔案共用是否已正確掛接:
df -h
輸出應看似此範例:
$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 3.3G 0 3.3G 0% /dev tmpfs 3.3G 0 3.3G 0% /dev/shm tmpfs 3.3G 17M 3.3G 1% /run tmpfs 3.3G 0 3.3G 0% /sys/fs/cgroup /dev/sda2 30G 9.1G 19G 34% / /dev/sdc1 59G 2.7G 53G 5% /u02 /dev/sda1 497M 199M 298M 41% /boot /dev/sda15 495M 9.7M 486M 2% /boot/efi tmpfs 671M 0 671M 0% /run/user/54321 /dev/sdb1 14G 2.1G 11G 16% /mnt/resource tmpfs 671M 0 671M 0% /run/user/54322 //orabackup1.file.core.windows.net/orabackup 10T 0 10T 0% /mnt/orabackup
備份資料庫
在本節中,您會使用 Oracle RMAN 來完整備份資料庫和封存記錄。 接著,您會將備份寫入為先前所掛接 Azure 檔案共用的備份集。
設定 RMAN 以備份至 Azure 檔案儲存體掛接點:
rman target / RMAN> configure snapshot controlfile name to '/mnt/orabkup/snapcf_ev.f'; RMAN> configure channel 1 device type disk format '/mnt/orabkup/%d/Full_%d_%U_%T_%s'; RMAN> configure channel 2 device type disk format '/mnt/orabkup/%d/Full_%d_%U_%T_%s';
在此範例中,您會將 RMAN 備份部分的大小限制為 4 GiB。 不過,RMAN 備份
maxpiecesize
值最多可達 4 TiB,這是 Azure 標準檔案共用和進階檔案共用的檔案大小限制。 如需詳細資訊,請參閱 Azure 檔案儲存體可擴縮性和效能目標。RMAN> configure channel device type disk maxpiecesize 4000G;
確認組態變更詳細資料:
RMAN> show all;
執行備份。 下列命令以壓縮格式的備份組建立完整資料庫備份,包括封存記錄檔:
RMAN> backup as compressed backupset database plus archivelog;
您可以使用 Oracle RMAN 在線備份資料庫,並將備份放在 Azure 檔案儲存體。 因為您要將備份儲存在 Azure 檔案儲存體中,因此如果您需要複製資料庫,則可以從其他 VM 存取備份。
使用 RMAN 和 Azure 檔案儲存體 進行資料庫備份有許多優點。 備份和還原時間會連結至資料庫的大小。 對於大型資料庫,這些作業可能需要相當長的時間。
替代方式是透過 Azure 備份使用應用程式一致的 VM 備份。 此機制會使用快照集技術來執行快速備份,而不論資料庫大小為何。 與復原服務保存庫整合提供 Oracle Database 備份的雲端儲存體,因此您可以從其他 VM 和其他 Azure 區域存取它們。
還原和復原資料庫
關閉 Oracle 執行個體:
sqlplus / as sysdba SQL> shutdown abort ORACLE instance shut down.
移除資料庫資料檔案:
cd /u02/oradata/TEST rm -f *.dbf
下列命令使用 RMAN 來還原遺漏的資料檔案並復原資料庫:
rman target / RMAN> startup mount; RMAN> restore database; RMAN> recover database; RMAN> alter database open;
檢查資料庫內容是否已完全復原:
RMAN> SELECT * FROM scott.scott_table;
現在已完成在 Azure Linux VM 上備份和復原 Oracle Database 19c 資料庫。
刪除 VM
如果您不再需要 VM,則可以使用下列命令來移除資源群組、VM 和所有相關資源:
az group delete --name rg-oracle