出現ORA-00257錯誤(空間不足錯誤),通過查找資料,絕大部分說這是由於歸檔日志太多,占用了全部的硬盤剩余空間導致的,通過簡單刪除日志或加大存儲空間就能夠解決。
(一)、oralce 11g更改歸檔模式、目錄、日志大小(本人采用的這種做法)
一、更改Oracle為歸檔模式
1.關閉oracle
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
2.啟動為mount狀態
SQL> startup mount
ORACLE instance started.
Total System Global Area 2572144640 bytes
Fixed Size 2283984 bytes
Variable Size 738199088 bytes
Database Buffers 1828716544 bytes
Redo Buffers 2945024 bytes
Database mounted.
3.更改為歸檔模式
SQL> alter database archivelog
Database altered.
備注:‘archivelog’為 歸檔模式;‘noarchivelog’為非歸檔模式。
4.更改數據庫為‘打開’狀態
SQL> alter database open
5.查看歸檔模式信息
SQL> archvie log list
它會提示歸檔的模式、是否啟用、參數
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 88
Next log sequence to archive 90
Current log sequence 90
二、更改歸檔目錄
1.查看參數db_recovery_file_dest
(1)“db_recovery_file_dest”是用於定義存儲歸檔日志的目錄。通過show parameter命令,顯示參數的值為(默認為)fast_recovery_area。示例如下:
SQL> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /usr/local/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 4182M
(2)查看v$recovery_file_dest視圖,可得知fast_recovery_area的空間限制、已使用的空間、文件數等。
SQL> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------- ---------- ----------------- ---------------
D:\oracle\fast_recovery_area 4385144832 4346230272 2741248 102
2.更改歸檔日志目錄
語法:alter system set 參數=值 scope=spfile;(設置成比較大的空間的目錄,我這里是設置成了home下面)
示例:SQL> alter system set db_recovery_file_dest='/home/oracle/flash_recovery_area' scope=spfile;
System altered.
三、更改歸檔日志大小
1.查看參數'db_recovery_file_dest_size'值
SQL> show parameter db_recov
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /usr/local/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 4182M
2.更改參數'db_recovery_file_dest_size'值大小
SQL> alter system set db_recovery_file_dest_size=41820M scope=spfile;
System altered.
3.關閉數據庫,重啟數據庫
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup open;
ORACLE instance started.
Total System Global Area 2572144640 bytes
Fixed Size 2283984 bytes
Variable Size 738199088 bytes
Database Buffers 1828716544 bytes
Redo Buffers 2945024 bytes
Database mounted.
Database opened.
4.再次查看參數'db_recovery_file_dest_size'值
SQL> show parameter db_reco
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /home/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 41820M
此時重啟之后,就可以了。
=========================================================================
(以下僅供參考)
(二)、百度經驗的解決方案:如下(本人采用的這種做法)
解決:
1、
SecureCRT登錄服務器,切換用戶oracle,連接oracle
[root@userbeta~]# su - oracle
[oracle@userbeta~]$ sqlplus /nolog
SQL> connect /as sysdba
2、
檢查flash recovery area的使用情況,可以看見archivelog已經很大了,達到99.94
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
3、
計算flash recovery area已經占用的空間
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
以上是檢查,可以直接設置歸檔文件大大小,如下:
4、
修改FLASH_RECOVERY_AREA的空間修改為6GB,修改前確認磁盤有足夠空間
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=8g;
5、
現在來清理一下archivelog歸檔日志,生產環境建議備份
查詢日志目錄位置
show parameter recover;
刪除歸檔日志,USERDB是數據庫實例名
cd /u01/app/oracle/flash_recovery_area/USERDB/archivelog
使用root帳戶刪除該目錄下的文件或者備份其它地方
6、
使用rman 操作,內容太多,只做部分截圖
[oracle@userbeta archivelog]$ rman
RMAN> connect target sys/sys_passwd
crosscheck backup;
delete obsolete;
delete expired backup;
crosscheck archivelog all;
delete expired archivelog all;
//此步會有提示,輸入 YES 回車
host; //退出rman
7、
確認是否操作成功
# sqlplus /nolog
SQL> connect /as sysdba
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
8、刪除完成,重新連接數據庫
ORACLE 歸檔日志打開關閉方法
sql> archive log list; #查看是否是歸檔方式 sql> alter system set log_archive_start=false scope=spfile; #禁用自動歸檔 sql> shutdown immediate; sql> startup mount; #打開控制文件,不打開數據文件 sql> alter database noarchivelog; #將數據庫切換為非歸檔模式 sql> alter database open; #將數據文件打開 sql> archive log list; #查看此時便處於非歸檔模式
bash: sqlplus: command not found 解決方法
su - oracle
Oracle shutdown immediate無法關閉數據庫解決方法
在測試服務器上使用shutdown immediate命令關閉數據庫時,長時間無法關閉數據庫,如下所示
1: [oracle@DB-Server admin]$ sqlplus / as sysdba
2:
3: SQL*Plus: Release 10.2.0.4.0 - Production on Thu Nov 21 13:55:13 2013
4:
5: Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
6:
7:
8: Connected to:
9: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
10: With the Partitioning, OLAP, Data Mining and Real Application Testing options
11:
12: SQL> shutdown immediate;
在另外一個會話中,查看告警日志的輸出結果,如下所示:告警日志信息在輸出Active processes prevent shutdown operation后,就再無提示信息。
1: [oracle@DB-Server bdump]$ tail -f 20 alert_epps.log
2:
3: Thu Nov 21 13:55:23 2013
4: Starting background process EMN0
5: Shutting down instance: further logons disabled
6: EMN0 started with pid=59, OS id=19244
7: Thu Nov 21 13:55:24 2013
8: Errors in file /u01/app/oracle/admin/epps/udump/epps_ora_19242.trc:
9: ORA-04098: trigger 'ADMIN.PIND_ON_SHUT' is invalid and failed re-validation
10: Thu Nov 21 13:55:24 2013
11: Shutting down instance (immediate)
12: License high water mark = 10
13: All dispatchers and shared servers shutdown
14: Thu Nov 21 14:00:29 2013
15: SHUTDOWN: Active processes prevent shutdown operation
關於SHUTDWON IMMEDIATE關閉數據庫方式:
立即關閉方式(IMMEDIATE)
立即關閉方式能夠在盡可能短的時間內關閉數據庫,以立即方式關閉數據庫時,ORACLE將執行以下一些操作:
*阻止任何用戶建立新的連接,同時阻止當前連接的用戶開始任何新的事物。
*任何未提交的事物均被回退。
*ORACLE不再等待用戶主動斷開連接,而是直接關閉、卸載數據庫,並終止實例。
方法1:
此時可以通過下面命令Kill掉系統中(LOCAL=NO)的ORACLE進程
[oracle@DB-Server ~]$ ps -ef|grep ora|grep -v grep|grep -v ora_|grep LOCAL=NO|awk '{print $2}'
[oracle@DB-Server ~]$ ps -ef|grep ora|grep -v grep|grep -v ora_|grep LOCAL=NO|awk '{print $2}'|xargs kill
此時可以順利關閉數據庫。
方法2:
使用CTRL+C取消操作,然后使用shutdown abort命令關閉數據庫。當然生產環境還是慎用shutdown abort命令,使用它往往是在沒有辦法的情況下。因為
shutdown abort 執行后,所有正在運行的SQL語句都將立即中止。所有未提交的事務將不回滾。Oracle也不等待目前連接到數據庫的用戶退出系統。下一次啟動數據庫時需要實例恢復,因此,下一次啟動可能比平時需要更多的時間。
方法3:網上比較通用的方法
1 :首先停應用服務。
2 :其次停止監聽服務(listener)
3 :間隔一段時間后,運行自己寫的腳本去檢查一下還有沒有用戶進程,如有, KILL.
4 :shutdown immediate;
當然,有時候實際情況往往有些出入,例如步驟1,DBA沒有應用服務器的權限。無法停止應用服務。當然也不妨礙后面步驟的執行。
關閉歸檔提示:ORA-38774: cannot disable media recovery - flashback database is enabled