週日為了挽救主庫USERS表空間不足臨時擴了20G表空間,導致DG庫的/bak/datafile/目錄不足。 日誌應用到擴表空間的歸檔就崩潰,同時更悲劇的是空間不足導致SYSTEM表空間寫入也發生了異常。 對於該問題首先想到系統級別擴容,通過系統級別的resize2fs經過確認無法擴容。通過分割槽合併由於沒有相鄰的分割槽也無法進行,只有採用ORACLE層面的方式。我們的DG系統因為空間緊缺資料檔案寫到了兩個不同的資料夾,既然資料可以寫到兩個目錄,肯定可以寫到三個目錄,會不會是控制檔案裡有定義,馬上建立了PFILE,但從PFILE裡面沒有發現有用的資料檔案重定向資訊,又查詢資料,發現了救命的RENAME命令,通過RENAME命令解決了資料檔案遷移的問題。


  1.      
  2. 檔案系統              容量  已用 可用 已用% 掛載點 
  3. /dev/sda3              19G  470M   18G   3% / 
  4. /dev/sda12            125G  105G   14G  89% /bak 
  5. /dev/sda10            9.5G  151M  8.9G   2% /tmp 
  6. /dev/sda9             9.5G  318M  8.7G   4% /var 
  7. /dev/sda8              19G  173M   18G   1% /opt 
  8. /dev/sda7              19G  4.0G   14G  23% /weblogic 
  9. /dev/sda2              48G  4.0G   41G   9% /usr 
  10. /dev/sda6              48G   28G   18G  61% /home 
  11. /dev/sda5              95G   76G   15G  85% /u01 
  12. /dev/sda1             1.9G   42M  1.8G   3% /boot 
  13. tmpfs                 3.9G     0  3.9G   0% /dev/shm 
  14. [root@L-DB-163-18 datafile]# umount /weblogic 
  15. [root@L-DB-163-18 datafile]# df -h 
  16. 檔案系統              容量  已用 可用 已用% 掛載點 
  17. /dev/sda3              19G  470M   18G   3% / 
  18. /dev/sda12            125G  105G   14G  89% /bak 
  19. /dev/sda10            9.5G  151M  8.9G   2% /tmp 
  20. /dev/sda9             9.5G  318M  8.7G   4% /var 
  21. /dev/sda8              19G  173M   18G   1% /opt 
  22. /dev/sda2              48G  4.0G   41G   9% /usr 
  23. /dev/sda6              48G   28G   18G  61% /home 
  24. /dev/sda5              95G   76G   15G  85% /u01 
  25. /dev/sda1             1.9G   42M  1.8G   3% /boot 
  26. tmpfs                 3.9G     0  3.9G   0% /dev/shm 
  27.  
  28. [root@L-DB-163-18 datafile]# e2fsck -f /dev/sda12 
  29. e2fsck 1.39 (29-May-2006) 
  30. Pass 1: Checking inodes, blocks, and sizes 
  31. Pass 2: Checking directory structure 
  32. Pass 3: Checking directory connectivity 
  33. Pass 4: Checking reference counts 
  34. Pass 5: Checking group summary information 
  35. /bak: 24/33718272 files (12.5% non-contiguous), 28482930/33714402 blocks 
  36. [root@L-DB-163-18 datafile]# resize2fs /dev/sda12 128G; 
  37. resize2fs 1.39 (29-May-2006) 
  38. Filesystem at /dev/sda12 is mounted on /bak; on-line resizing required 
  39. Performing an on-line resize of /dev/sda12 to 33554432 (4k) blocks. 
  40. The filesystem on /dev/sda12 is now 33554432 blocks long. 
  41. 空間不夠,通過UNMOUNT其他檔案系統擴容需要的檔案系統後來仔細研究了下確實是不行的。 
  42. 必須從分割槽層面進行,嘗試fdisk /dev/sdad7w刪除了無用的分割槽,研究分割槽合併也行不通, 
  43. 因為sda12相鄰的分割槽沒有可用空間,從分割槽層面擴容無法成行, 
  44.  
  45. 在資料庫層面原本可以通過OPEN資料庫把資料檔案重新命名的動作由於SYSTEM表空間未完全寫完一個事物而無法OPEN, 
  46. RENAME操作報錯,具體如下。 
  47. SQL> alter tablespace TEMP rename datafile `/bak/datafile/temp01.dbf` to `/usr/datafile/temp01.dbf`
  48. alter tablespace TEMP rename datafile `/bak/datafile/temp01.dbf` to `/usr/datafile/temp01.dbf` 
  49. ERROR at line 1: 
  50. ORA-01109: database not open 
  51.   
  52. SQL> alter database open read only
  53. alter database open read only 
  54. ERROR at line 1: 
  55. ORA-16004: backup database requires recovery 
  56. ORA-01196: file 1 is inconsistent due to a failed media recovery session 
  57. ORA-01110: data file 1: `/bak/datafile/system01.dbf` 
  58.  
  59.     按照常理,DG資料庫可以在MOUNT下執行RENAME操作,但試了很多次卻不行。 
  60. 再仔細一看報錯資訊,居然有如下提示ORA-01275: Operation RENAME is not allowed if standby file management is automatic. 
  61. SQL> startup nomount; 
  62. ORACLE instance started. 
  63.   
  64. Total System Global Area 4596957184 bytes 
  65. Fixed Size                  2090048 bytes 
  66. Variable Size             838863808 bytes 
  67. Database Buffers         3741319168 bytes 
  68. Redo Buffers               14684160 bytes 
  69. SQL> alter database mount standby database
  70.   
  71. Database altered. 
  72.   
  73. SQL> alter database rename file `/bak/datafile/namin_data.dbf` to `/usr/datafile/namin_data.dbf`
  74. alter database rename file `/bak/datafile/namin_data.dbf` to `/usr/datafile/namin_data.dbf` 
  75. ERROR at line 1: 
  76. ORA-01511: error in renaming log/data files 
  77. ORA-01275: Operation RENAME is not allowed if standby file management is 
  78. automatic. 
  79. 上ORACLE查了下,在DG模式下檔案有兩種管理方式(show parameter standby可以查),自動和手動管理,如果是自動管理,是沒法重新命名的, 
  80. 馬上嘗試改成手動模式。 
  81.  
  82. SQL>  show parameter standby 
  83.   
  84. NAME                                 TYPE        VALUE 
  85. ------------------------------------ ----------- ------------------------------ 
  86. standby_archive_dest                 string      ?/dbs/arch 
  87. standby_file_management              string      AUTO 
  88. SQL> alter system set standby_file_management=MANUAL; 
  89.   
  90. System altered. 
  91.   
  92. SQL> show parameter standby 
  93.   
  94. NAME                                 TYPE        VALUE 
  95. ------------------------------------ ----------- ------------------------------ 
  96. standby_archive_dest                 string      ?/dbs/arch 
  97. standby_file_management              string      MANUAL 
  98. SQL> alter database rename file `/bak/datafile/namin_data.dbf` to `/usr/datafile/namin_data.dbf`
  99.   
  100. Database altered. 
  101.   
  102. SQL> alter database rename file `/bak/datafile/temp01.dbf` to `/usr/datafile/temp01.dbf`
  103.   
  104. Database altered. 
  105. 至此更改檔案路徑成功,資料檔案已經定向到了新的路徑/usr/datafile/。 
  106. 再此藥注意的是重新命名前必須把檔案原封不動的拷貝過去,否則會報如下錯誤。 
  107. SQL> alter database rename file `/bak/datafile/sysaux01.dbf` to `/usr/datafile/sysaux01.dbf`
  108. alter database rename file `/bak/datafile/sysaux01.dbf` to `/usr/datafile/sysaux01.dbf` 
  109. ERROR at line 1: 
  110. ORA-01511: error in renaming log/data files 
  111. ORA-01141: error renaming data file 3 - new file `/usr/datafile/sysaux01.dbf`not found 
  112. ORA-01110: data file 3: `/bak/datafile/sysaux01.dbf` 
  113. ORA-27037: unable to obtain file status 
  114. Linux-x86_64 Error: 2: No such file or directory 
  115. Additional information: 3 
  116.  
  117. 這下空間有了,事情就好辦了,只要/bak/datafile/下有20G以上的空間,應用了USERS表空間擴容的歸檔。 
  118. 其餘就是很好操作的事情。歸檔日誌滿可以把已經應用的歸檔給刪除掉,如果不小心把未應用的歸檔刪除了怎麼辦, 
  119. 也不用慌,如果用了ASM,可以用RMAN從主庫提取歸檔,然後FTP給DG,如果用普通檔案系統,那麼直接FTP。 
  120. EG: 
  121. RMAN> copy archivelog `+DATA/log/archivelog/2_5585_697238176.dbf` to `/u01/rman/2_5585_697238176.dbf`