問題現象:
數據庫無法登陸,報錯磁盤空間不足,ORA-09817:Write to audit file failed,同時Linux-x86_64 Error:28: No space left on device
處理:
1、檢查磁盤空間,發現/目錄使用100%
2、清理數據庫審計的日誌,因爲日誌文件太多,使用rm刪除的時候報錯,結合find找出30天前的aud日誌進行清除。
[oracle@ylzora adump]$ cd $ORACLE_BASE/admin/ylz_test/adump/
[oracle@ylzora adump]$ rm -rf *.aud
-bash: /bin/rm: 參數列表過長
[oracle@ylzora adump]$ find . -mtime +30 -name "ylz_test*.aud" -exec rm -rf {} \;
3、清理完日誌之後,總算可以登陸數據庫了,但是清理的日誌空間並不是很大才5G,而根目錄有90G的空間,很顯然還有其它地方佔用了磁盤空間。
4、先檢查表空情況,只有system、data和ufgov比較大,查看這三個表空間的路徑,確實建立在/目錄下,這和規劃的不符,之前規劃了/data目錄用來存放數據文件的,而業務人員還是將表空間建到了數據庫安裝目錄下面,導致根目錄空間緊張,和業務上面溝通需要停業務移動表空間。
5、移動數據文件,因爲移動系統表空間,需要停庫,所以和業務協商選擇中午無業務的時間進行
6、移動普通表空間
先將表空間offline,
SQL> alter tablespace data offline;
Tablespace altered.
SQL> alter tablespace ufgov offline;
Tablespace altered.
SQL> select tablespace_name,status,contents from dba_tablespaces;
TABLESPACE_NAME STATUS CONTENTS
------------------------------ --------- ---------
SYSTEM ONLINE PERMANENT
SYSAUX ONLINE PERMANENT
UNDOTBS1 ONLINE UNDO
TEMP ONLINE TEMPORARY
USERS ONLINE PERMANENT
UFGOV OFFLINE PERMANENT
CW_EXCHG ONLINE PERMANENT
DATA OFFLINE PERMANENT
8 rows selected.
SQL> select file#,name,status from v$datafile;
FILE#----------NAME---------------------------------------------------------STATUS-------
1 /u01/app/oracle/oradata/ylz_test/system01.dbf SYSTEM
2 /u01/app/oracle/oradata/ylz_test/sysaux01.dbf ONLINE
3 /u01/app/oracle/oradata/ylz_test/undotbs01.dbf ONLINE
4 /u01/app/oracle/oradata/ylz_test/users01.dbf ONLINE
5 /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:ufgov.dbf OFFLINE
6 /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:cw_exchg.dbf ONLINE
7 /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:data.dbf OFFLINE
7 rows selected.
移動數據文件
SQL> host cp /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:data.dbf /data/ylz_test/data.dbf
SQL> host cp /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:ufgov.dbf /data/ylz_test/ufgov.dbf
修改該表空間的數據文件路徑
SQL> alter tablespace data rename datafile '/u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:data.dbf' to '/data/ylz_test/data.dbf';
Tablespace altered.
SQL> alter tablespace ufgov rename datafile '/u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:ufgov.dbf' to '/data/ylz_test/ufgov.dbf';
Tablespace altered.
SQL>
SQL> alter tablespace data online;
Tablespace altered.
SQL>alter tablespace ufgov online;
Tablespace altered.
SQL>
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
UFGOV ONLINE
CW_EXCHG ONLINE
DATA ONLINE
8 rows selected.
SQL> select file#,name,status from v$datafile;
FILE#----------NAME-------------------------------------------------------STATUS-------
1 /u01/app/oracle/oradata/ylz_test/system01.dbf' SYSTEM
2 /u01/app/oracle/oradata/ylz_test/sysaux01.dbf ONLINE
3 /u01/app/oracle/oradata/ylz_test/undotbs01.dbf ONLINE
4 /u01/app/oracle/oradata/ylz_test/users01.dbf ONLINE
5 /data/ylz_test/ufgov.dbf ONLINE
6 /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:cw_exchg.dbf ONLINE
7 /data/ylz_test/data.dbf ONLINE
7 rows selected.
可以看到表空間已經恢復正常且路徑已經變成了我們需要的/data/ylz_test路徑
7、移動系統表空間
移動系統表空間需要重啓數據庫,先將數據庫啓動到MOUNT狀態 ,複製數據文件到指定位置,然後重定向數據文件,成功以後打開數據庫,檢查狀態。
將數據庫啓動mount狀態
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> start mount
SP2-0310: unable to open file "mount.sql"
SQL> startup mount
ORACLE instance started.
Total System Global Area 4275781632 bytes
Fixed Size 2235208 bytes
Variable Size 2835350712 bytes
Database Buffers 1426063360 bytes
Redo Buffers 12132352 bytes
Database mounted.
移動system表空間數據文件,從u01/app/oracle/oradata/ylz_test/system01.dbf複製到/data/ylz_test/system01.dbf,然後修改數據庫路徑。
SQL> host cp /u01/app/oracle/oradata/ylz_test/system01.dbf /data/ylz_test/system01.dbf
SQL> alter database rename file '/u01/app/oracle/oradata/ylz_test/system01.dbf' to '/data/ylz_test/system01.dbf';
啓動數據庫,檢查表空間狀態
SQL> alter database open;
Database altered.
SQL> select tablespace_name,status from dba_tablespaces;
select file#,name,status from v$datafile;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
UFGOV ONLINE
CW_EXCHG ONLINE
DATA ONLINE
SQL>select file#,name,status from v$datafile;
FILE#----------NAME-------------------------------------------------------STATUS-------
1 /data/ylz_test/system01.dbf SYSTEM
2 /u01/app/oracle/oradata/ylz_test/sysaux01.dbf ONLINE
3 /u01/app/oracle/oradata/ylz_test/undotbs01.dbf ONLINE
4 /u01/app/oracle/oradata/ylz_test/users01.dbf ONLINE
5 /data/ylz_test/ufgov.dbf ONLINE
6 /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:cw_exchg.dbf ONLINE
7 /data/ylz_test/data.dbf ONLINE
7 rows selected.
可以看到system的數據文件已經變成/data/ylz_test/system01.dbf了
8、清理舊的表空間數據文件,以免殘留影響後面維護。
[oracle@ylzora ~]$ rm -rf /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:data.dbf
[oracle@ylzora ~]$ rm -rf /u01/app/oracle/product/11.2.1/dbhome_1/dbs/D:ufgov.dbf
[oracle@ylzora ~]$ rm -rf /u01/app/oracle/oradata/ylz_test/system01.dbf
9、可以看到根目錄空間已經恢復正常。