且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

通过RENAME解救空间紧缺的DG系统

更新时间:2022-09-17 09:07:08

周日为了挽救主库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/sda\d\7\w删除了无用的分区,研究分区合并也行不通, 
  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'

 本文转自zylhsy 51CTO博客,原文链接:http://blog.51cto.com/yunlongzheng/578456,如需转载请自行联系原作者