Oracle 11gR2 active datagurad temproray tablespace同步問題
阿新 • • 發佈:2018-12-25
公司業務系統的資料庫磁碟空間告急,無奈採購的磁碟沒到貨。經過商討制定了臨時方案
先來看一下主備庫磁碟狀態。
#主庫磁碟資訊 [[email protected] db]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/data-lv_root 50G 5.1G 42G 11% / tmpfs 127G 172K 127G 1% /dev/shm /dev/mapper/data-lv_app 41G 11G 28G 29% /app /dev/sda2 190M 39M 141M 22% /boot /dev/sda1 200M 264K 200M 1% /boot/efi /dev/mapper/ssddata-oradata 733G 537G 159G 78% /oradata /dev/mapper/data-redo 9.8G 5.6G 3.7G 60% /redo /dev/mapper/data-arch 148G 8.9G 132G 7% /arch #備庫磁碟資訊 [
[email protected] temp]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/data-root 50G 6.5G 41G 14% / tmpfs 127G 92K 127G 1% /dev/shm /dev/sda2 186M 66M 111M 38% /boot /dev/sda1 200M 268K 200M 1% /boot/efi /dev/mapper/oradata-oradata 549G 471G 51G 91% /oradata /dev/mapper/data-redo 9.7G 5.6G 3.7G 61% /redo /dev/mapper/data-arch 99G 32G 63G 34% /arch /dev/mapper/data-app 50G 22G 26G 46% /app /dev/mapper/temp-temp 197G 389M 187G 1% /oradata/dbdg/temp
場景:db表空間使用率超過95%,需要新增資料檔案。而dbdg磁碟空間無法支撐此次表空間擴容操作。兩臺資料庫均使用本地磁碟。擴容只能採購。
方案:dbdg新增一塊臨時的機械磁碟,遷移TEMP表空間。為資料表空間騰出容量。
這就涉及到oracle dataguard架構配置TEMP的操作。具體操作如下:
#db SQL> create temporary tablespace temp01 tempfile '/oradata/db/temp/temp_01.dbf' size 50m autoextend on next 50m maxsize 32767m extent management local; Database altered. SQL> alter database default temporary tablespace temp01; Database altered. SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ ------------------------------------------------------------------ DEFAULT_TEMP_TABLESPACE TEMP01 SQL> select file_name,tablespace_name,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files; FILE_NAME TABLESPACE_NAME AUT MAX_MB ------------------------------------------------------------------ ------------------------------ --- ---------- /oradata/db/temp/temp_01.dbf TEMP01 YES 32767 /oradata/db/tmp01.dbf TMP YES 32767.9844
此時資料庫的預設表空間已經切換為TEMP了。
#dbdg
SQL> select name,db_unique_name,open_mode from v$database;
NAME DB_UNIQUE_NAME OPEN_MODE
--------- ------------------------------ --------------------
DB dbdg READ ONLY WITH APPLY
SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------------
DEFAULT_TEMP_TABLESPACE TEMP01
SQL> select file_name,tablespace_name,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files;
FILE_NAME TABLESPACE_NAME AUT MAX_MB
------------------------------------------------------------------ ------------------------------ --- ----------
/oradata/dbdg/tmp01.dbf TMP YES 32767.9844
預設表空間配置已經同步到備庫中的資料字典,但tempfile並沒有建立成功。
核驗作業系統檔案
#db
[[email protected] temp]$ pwd
/oradata/db/temp
[[email protected] temp]$ ls
temp_01.dbf
#dbdg
[[email protected] temp]$ pwd
/oradata/dbdg/temp
[[email protected] temp]$ ls
lost+found
備庫資料字典中已經同步到配置了,但系統中卻沒有TEMP的資料檔案。
#db&dbdg
SQL> show parameter standby_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string AUTO
standby_file_management也是自動的,主庫建立檔案的操作應該可以同步到備庫,併成功執行的。然而事實並非如此。
通過查閱資料,需要手動在備庫中新增TEMP資料檔案
#dbdg
SQL> select name,db_unique_name,open_mode from v$database;
NAME DB_UNIQUE_NAME OPEN_MODE
--------- ------------------------------ --------------------
DB dbdg READ ONLY WITH APPLY
SQL> alter tablespace temp01 add tempfile '/oradata/dbdg/temp/temp_01.dbf' size 50m autoextend on next 50m maxsize 32767m;
alter tablespace temp01 add tempfile '/oradata/dbdg/temp/temp_01.dbf' size 50m autoextend on next 50m maxsize 32767m
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
ORA-06512: at line 62
返回錯誤,資料庫為只讀狀態。
苦查資料無果的情況下,無意間查看了一下作業系統目錄。發現備庫的/oradata/dbdg/temp中竟然出現了temp_01.dbf的檔案。
#dbdg
SQL> select file_name,tablespace_name,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files;
FILE_NAME TABLESPACE_NAME AUT MAX_MB
------------------------------------------------------------------ ------------------------------ --- ----------
/oradata/dbdg/temp/temp_01.dbf TEMP01 YES 32767
/oradata/dbdg/tmp01.dbf TMP YES 32767.9844
備庫中的dba_temp_files也增加了一條資料記錄,新建臨時表空間的檔案資訊。此時測試了備庫查詢也不在報無法找到臨時表空間的錯誤了。
總結
tempfile和datafile、redologfile不同,tempfile和temp tablespace在DG環境下同步效果不好。在這次事件中甚至出現了沒有檔案對應的臨時表空間。而在備庫以read only with apply模式開啟後,執行檔案新增命令。雖然報錯,但檔案系統中確實出現了對應的tempfile。其中原理還需進一步研究。