主備庫切換以解決主庫儲存空間不足
同事整理的文章:
背景: 主庫儲存空間不足,需要新增磁碟;先為物理備庫新增磁碟,然後進行主備庫切換
由於原來的硬碟是做了raid的,所以系統需要重灌,由於備庫os重新安裝了,因此需要新建一個備庫,然後執行切換。
以下是大致步驟
第一步 配置物理備庫
首先是安裝oracle,備份主庫的$ORACLE_HOME目錄,然後解壓縮到備庫
建立oracle使用者和使用者組以及相關路徑
[root@racdb02 ~]# groupadd -g 700 oinstall
[root@racdb02 ~]# groupadd -g 900 dba
[root@racdb02 ~]# useradd -u 500 -g oinstall oracle --這是一個失誤,沒有把oracle指定到dba使用者組,導致sqlplus / as sysdba 出現許可權不足
建立相應目錄,解壓縮安裝檔案,然後在$ORACLE_HOME/bin下relink
[oracle@racdb02 bdump]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Fri Mar 11 17:45:57 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
ERROR:
ORA-01031: insufficient privileges
[oracle@racdb02 admin]$ id oracle
uid=500(oracle) gid=700(oinstall) groups=700(oinstall)
檢視後發現oracle只分配到了oinstall組,需要將其也加入dba組
[root@racdb02 ~]# usermod -g oinstall -G dba -U oracle
[oracle@racdb02 admin]$ id oracle
uid=500(oracle) gid=700(oinstall) groups=700(oinstall),900(dba)
此時可以登入,但是無法載入
SQL> startup mount;
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
原因是沒有修改系統引數/etc/sysctl.conf/,為此檔案新增引數
kernel.shmall = 33554432
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
然後
[root@racdb02 etc]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.shmall = 33554432
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
即可
SQL> startup mount
ORACLE instance started.
這步本是linux下安裝oracle的必須操作,但是以前的OS都已經配備好了kernel引數,所以歷次安裝時候沒有留意,這次在新安裝的OS上執行,問題就暴露了
另外引數檔案還需要配置,包括口令檔案、tnsnames.ora、listener.ora、standby controlfile在此略去
開頭說過,主庫空間不足了,
[oracle@orac1 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 846G 748G 56G 94% /
/dev/sda1 190M 21M 160M 12% /boot
none 63G 0 63G 0% /dev/shm
只剩不到60g,但是整庫有400g大小,因此不能將主庫整個備份傳輸到備庫進行恢復,因此擬定新的恢復計劃。
首先需要備份系統表空間,然後應用到備庫,以便備庫可以開啟恢復程式,然後把其餘資料檔案挨個備份並傳輸至備庫進行恢復,大致步驟如下
1、備份system,sysaux表空間,恢復到備庫
RMAN> backup tablespace system,sysaux;
傳輸備份集到備庫/home/oracle/rman,備庫上執行restore
先將資料庫處於mount狀態
RMAN> catalog start with '/home/oracle/rman';
RMAN> restore tablespace system;
RMAN> restore tablespace sysaux;
開啟恢復程式
SQL> recover managed standby database;
2、恢復其餘資料檔案
通過shell指令碼來實現這一步驟
先在備庫上將其餘資料檔案offline drop掉,將其餘檔名放在b.txt檔案中,通過rman將資料檔案copy到/data/pump目錄,然後傳輸到備庫,接著將其online
for a in `cat b.txt`
do
echo "rman target / "
echo "copy datafile '/data/oracle/oradata /$a' to '/data/pump/$a';"
echo "exit"
echo scp /data/pump/$a *.*.*.*:/data/oracle/oradata—傳輸資料檔案到備庫
echo rm /data/pump/$a
echo "ssh *.*.*.*" –連線到備庫
echo "sqlplus sys/nolog as sysdba"
echo "alter database datafile '/data/oracle/oradata/$a' online;"
echo "exit"
echo " "
echo "ssh *.*.*.*"—返回主庫
echo " "
done
此步執行完後,還需在為備庫新增standby redo log,至此備庫就算是建立完全了
第二步 執行主備庫切換
一、檢查工作
1、檢查備庫是否執行在歸檔模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data/oracle/oradata/edw1/arch
Oldest online log sequence 16465
Next log sequence to archive 0
Current log sequence 16472
2、日誌傳輸和應用是否存在延遲
SQL> select * from v$dataguard_stats;--apply lag的值不超過40s
3、主庫執行日誌切換,檢視主備最大日誌號是否相同
執行SQL>alter system switch logfile;
SELECT ARCHIVED,APPLIED,REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG order by SEQUENCE#;
4、檢查主備庫引數
確認相應的歸檔日誌路徑已經設定並且enable
SQL> show parameter log_arch
二、主庫執行切換
5、 檢視主庫的狀態:
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果是TO_STANDBY,切換主庫到STANDBY庫:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
如果是SESSIONS ACTIVE,則處理這些session,如果處理完了還是SESSIONS ACTIVE,則使用
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
切換主庫到STANDBY庫;
切換前的主庫的CONTROLFILE會儲存在執行操作的這個session對應的trace檔案中,出現問題時這個控制檔案可以備用。很慢的時候可以嘗試先SHUTDOWN,然後起來後再切換。
6、停主庫並重啟到MOUNT狀態
Shutdown immediate;
Startup mount;
啟動到MOUNT狀態後,主庫已經切換到備用庫。
三、備庫執行切換
7、檢視備用庫的狀態:
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
確認返回的結果是:TO_PRIMARY,以確認備用庫是否接收到switch通知並準備轉換為主庫。如果返回是SESSION ACTIVE,則可以使用WITH SESSION SHUTDOWN選項來切換,或者乾脆重啟後再進行切換。
8、切換備用庫到主庫:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
如果備庫在MOUNT狀態,則ALTER DATABASE OPEN;如果備庫在OPEN狀態,則SHUTDOWN IMMEDIATE,然後STARTUP。
四、啟動備庫並檢查
9、登入,執行
alter database recover managed standby database disconnect from session using current logfile;
10、登入,執行日誌切換
SQL>alter system switch logfile;
檢查主備庫的最大日誌號是否相同
SELECT ARCHIVED,APPLIED,REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG order by SEQUENCE#;
至此整個任務完成
回滾計劃
如果切成備庫,但切換主庫失敗,此時需要將重新啟用成主庫
登入,執行
SQL> alter database recover managed standby database cancel; FORCE關鍵字將會停止當前活動的RFS程式,以便立刻執行failover。
接著重新啟用成主庫
SQL> alter database commit to switchover to primary;
如果當前資料庫已mount,則直接open;如果是open read only,則先shutdown,然後open
由於原來的硬碟是做了raid的,所以系統需要重灌,由於備庫os重新安裝了,因此需要新建一個備庫,然後執行切換。
以下是大致步驟
第一步 配置物理備庫
首先是安裝oracle,備份主庫的$ORACLE_HOME目錄,然後解壓縮到備庫
建立oracle使用者和使用者組以及相關路徑
[root@racdb02 ~]# groupadd -g 700 oinstall
[root@racdb02 ~]# groupadd -g 900 dba
[root@racdb02 ~]# useradd -u 500 -g oinstall oracle --這是一個失誤,沒有把oracle指定到dba使用者組,導致sqlplus / as sysdba 出現許可權不足
建立相應目錄,解壓縮安裝檔案,然後在$ORACLE_HOME/bin下relink
[oracle@racdb02 bdump]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Fri Mar 11 17:45:57 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
ERROR:
ORA-01031: insufficient privileges
[oracle@racdb02 admin]$ id oracle
uid=500(oracle) gid=700(oinstall) groups=700(oinstall)
檢視後發現oracle只分配到了oinstall組,需要將其也加入dba組
[root@racdb02 ~]# usermod -g oinstall -G dba -U oracle
[oracle@racdb02 admin]$ id oracle
uid=500(oracle) gid=700(oinstall) groups=700(oinstall),900(dba)
此時可以登入,但是無法載入
SQL> startup mount;
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
原因是沒有修改系統引數/etc/sysctl.conf/,為此檔案新增引數
kernel.shmall = 33554432
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
然後
[root@racdb02 etc]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.shmall = 33554432
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
即可
SQL> startup mount
ORACLE instance started.
這步本是linux下安裝oracle的必須操作,但是以前的OS都已經配備好了kernel引數,所以歷次安裝時候沒有留意,這次在新安裝的OS上執行,問題就暴露了
另外引數檔案還需要配置,包括口令檔案、tnsnames.ora、listener.ora、standby controlfile在此略去
開頭說過,主庫空間不足了,
[oracle@orac1 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 846G 748G 56G 94% /
/dev/sda1 190M 21M 160M 12% /boot
none 63G 0 63G 0% /dev/shm
只剩不到60g,但是整庫有400g大小,因此不能將主庫整個備份傳輸到備庫進行恢復,因此擬定新的恢復計劃。
首先需要備份系統表空間,然後應用到備庫,以便備庫可以開啟恢復程式,然後把其餘資料檔案挨個備份並傳輸至備庫進行恢復,大致步驟如下
1、備份system,sysaux表空間,恢復到備庫
RMAN> backup tablespace system,sysaux;
傳輸備份集到備庫/home/oracle/rman,備庫上執行restore
先將資料庫處於mount狀態
RMAN> catalog start with '/home/oracle/rman';
RMAN> restore tablespace system;
RMAN> restore tablespace sysaux;
開啟恢復程式
SQL> recover managed standby database;
2、恢復其餘資料檔案
通過shell指令碼來實現這一步驟
先在備庫上將其餘資料檔案offline drop掉,將其餘檔名放在b.txt檔案中,通過rman將資料檔案copy到/data/pump目錄,然後傳輸到備庫,接著將其online
for a in `cat b.txt`
do
echo "rman target / "
echo "copy datafile '/data/oracle/oradata /$a' to '/data/pump/$a';"
echo "exit"
echo scp /data/pump/$a *.*.*.*:/data/oracle/oradata—傳輸資料檔案到備庫
echo rm /data/pump/$a
echo "ssh *.*.*.*" –連線到備庫
echo "sqlplus sys/nolog as sysdba"
echo "alter database datafile '/data/oracle/oradata/$a' online;"
echo "exit"
echo " "
echo "ssh *.*.*.*"—返回主庫
echo " "
done
此步執行完後,還需在為備庫新增standby redo log,至此備庫就算是建立完全了
第二步 執行主備庫切換
一、檢查工作
1、檢查備庫是否執行在歸檔模式
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data/oracle/oradata/edw1/arch
Oldest online log sequence 16465
Next log sequence to archive 0
Current log sequence 16472
2、日誌傳輸和應用是否存在延遲
SQL> select * from v$dataguard_stats;--apply lag的值不超過40s
3、主庫執行日誌切換,檢視主備最大日誌號是否相同
執行SQL>alter system switch logfile;
SELECT ARCHIVED,APPLIED,REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG order by SEQUENCE#;
4、檢查主備庫引數
確認相應的歸檔日誌路徑已經設定並且enable
SQL> show parameter log_arch
二、主庫執行切換
5、 檢視主庫的狀態:
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
如果是TO_STANDBY,切換主庫到STANDBY庫:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
如果是SESSIONS ACTIVE,則處理這些session,如果處理完了還是SESSIONS ACTIVE,則使用
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
切換主庫到STANDBY庫;
切換前的主庫的CONTROLFILE會儲存在執行操作的這個session對應的trace檔案中,出現問題時這個控制檔案可以備用。很慢的時候可以嘗試先SHUTDOWN,然後起來後再切換。
6、停主庫並重啟到MOUNT狀態
Shutdown immediate;
Startup mount;
啟動到MOUNT狀態後,主庫已經切換到備用庫。
三、備庫執行切換
7、檢視備用庫的狀態:
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
確認返回的結果是:TO_PRIMARY,以確認備用庫是否接收到switch通知並準備轉換為主庫。如果返回是SESSION ACTIVE,則可以使用WITH SESSION SHUTDOWN選項來切換,或者乾脆重啟後再進行切換。
8、切換備用庫到主庫:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
如果備庫在MOUNT狀態,則ALTER DATABASE OPEN;如果備庫在OPEN狀態,則SHUTDOWN IMMEDIATE,然後STARTUP。
四、啟動備庫並檢查
9、登入,執行
alter database recover managed standby database disconnect from session using current logfile;
10、登入,執行日誌切換
SQL>alter system switch logfile;
檢查主備庫的最大日誌號是否相同
SELECT ARCHIVED,APPLIED,REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG order by SEQUENCE#;
至此整個任務完成
回滾計劃
如果切成備庫,但切換主庫失敗,此時需要將重新啟用成主庫
登入,執行
SQL> alter database recover managed standby database cancel; FORCE關鍵字將會停止當前活動的RFS程式,以便立刻執行failover。
接著重新啟用成主庫
SQL> alter database commit to switchover to primary;
如果當前資料庫已mount,則直接open;如果是open read only,則先shutdown,然後open
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758322/viewspace-691435/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行主備庫切換以解決主庫儲存不足
- Data Guard主備庫切換
- DataGuard主備庫切換步驟
- MySQL 主備庫切換記錄MySql
- 主庫儲存宕掉切換到standby的步驟
- Oracle Data Guard主庫備庫角色切換(Switchovers)Oracle
- 【DG】Data Guard主備庫Switchover切換
- DataGuard切換(主庫為Rac+備庫為Rac)
- 【DG】Data Guard主備庫Failove切換AI
- 備庫的切換狀態為SWITCHOVER PENDING時進行dataguard主備庫角色切換
- MySQL 5.7 主庫崩潰切備庫MySql
- Oracle10G Dataguard 多個備庫 - 主庫和物理備庫的切換Oracle
- DataGaurd環境主庫崩潰後將備庫切為主庫
- oracle 之dataguard主庫系統崩潰之物理備庫切主庫Oracle
- failover切換後恢復原來主庫為新備庫AI
- mysql主從複製+主備切換MySql
- 主備切換(failover)AI
- Spring Boot中自定義註解+AOP實現主備庫切換Spring Boot
- dataguard之邏輯備庫表空間不足
- 主備切換的準備工作
- RAC和Dataguard環境下主備庫切換演練模板
- Data Guard 主庫建立表空間,備庫MRP無法啟動
- dg主庫建立檔案備庫未同步解決方法
- SQLServer2012映象主庫掛掉如何切換到映象備庫SQLServer
- 主備切換的準備工作(二)
- Oracle 12c Data guard 物理主備庫正常切換(switchover)流程Oracle
- Oracle 11g Data guard 物理主備庫正常切換(switchover)流程Oracle
- Oracle 單機切換為主備Oracle
- DG中備庫為SWITCHOVER PENDING時是否能進行主備切換
- 【新炬網路名師大講堂】Data Guard–物理主備庫切換
- HeyUI元件庫 | 如何實現線上切換主題UI元件
- Rman增量壓縮備份來解決備份空間不足
- 使用broker工具failover切換之後恢復原來的主庫為新備庫AI
- DS8K儲存分配空間給主機方案
- 邏輯Data Guard主備庫的轉換
- Mysql 5.6 Master和Slave 主備切換MySqlAST
- MySQL從庫切換成主庫後的relay-bin問題MySql
- 資料庫設計:儲存過程主體資料庫儲存過程