關於alter database datafile offline和alter database datafile offline drop 的區別


轉: https://blog.csdn.net/killvoon/article/details/46913183

-----------------------2015-07-16---------------------------------------------
發現記憶力確實不如以前了,一些東西總是記不住,不出三天便忘得一干二凈。

關於alter database datafile offline和alter database datafile offline drop
之前遇到了幾次,也專門看了下,不久又忘了啥區別。

只好專門列個文檔,再次記錄一番:

對於歸檔模式:
alter database datafile 'file_name' offline 和 offline drop 沒有什么區別。
對於非歸檔模式:
如果是非歸檔模式,只能是offline drop.

如果對於非歸檔模式下,進行offline將會報錯:
SQL> alter database datafile 'c:\test.dbf' offline;
alter database datafile 'c:\test.dbf' offline
*
第 1 行出現錯誤:
ORA-01145: 除非啟用了介質恢復, 否則不允許立即脫機

SQL> alter database datafile 'c:\test.dbf' offline drop;

數據庫已更改。

SQL>

----查看下數據文件的狀態
SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 RECOVER
已選擇6行。

文件6就是我剛剛offline drop的數據文件,現在狀態是recover,說明我online之前需要進行恢復么?
實驗來說明:
SQL> alter database datafile 6 online;
alter database datafile 6 online
*
第 1 行出現錯誤:
ORA-01113: 文件 6 需要介質恢復
ORA-01110: 數據文件 6: 'C:\TEST.DBF'


果然需要先進行恢復:
SQL> recover datafile 6;
完成介質恢復。
SQL> alter database datafile 6 online;
數據庫已更改。

這樣看是不是很完美,那么問題來了,現在之所以能夠恢復過來是因為當前的redo log仍然存在,如果redo log切換后且木有歸檔日志存在,
那么這個數據文件則無法online
-----------------------------------------------------
再次實驗:

---查看當前日志文件:日志組3
SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 INACTIVE
         3 CURRENT

----再次offline 然后再切換日志,接着進行recover操作

SQL> alter database datafile 6 offline drop;

數據庫已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL>

---切換了三次日志后,再次進行介質恢復:
SQL> recover datafile 6;
ORA-00279: 更改 1294577 (在 07/16/2015 15:31:12 生成) 對於線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ARCHIVE\ARC00078_0880122604.001
ORA-00280: 更改 1294577 (用於線程 1) 在序列 #78 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

--看看,完蛋了吧,對於這種沒有歸檔日志的情況,只能靠之前的冷備份來解決了,數據將面臨丟失。

---------------------------------------------------------------------------------------------------

下面來看下在歸檔模式下,offline和offline drop的區別
SQL> startup mount
ORACLE 例程已經啟動。

Total System Global Area  585879552 bytes
Fixed Size                  1348844 bytes
Variable Size             218106644 bytes
Database Buffers          360710144 bytes
Redo Buffers                5713920 bytes
數據庫裝載完畢。
SQL> alter database archivelog;
數據庫已更改。

SQL> alter database open;
數據庫已更改。
SQL>

----創建個表空間
SQL> create tablespace test datafile 'c:\test.dbf' size 2m;
表空間已創建。

---offline
SQL> alter database datafile 6 offline;
數據庫已更改。

SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 RECOVER
已選擇6行。

SQL> recover datafile 6;
完成介質恢復。
SQL> alter database datafile 6 online;

數據庫已更改。

---offline drop
SQL> alter database datafile 6 offline drop;

數據庫已更改。

SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
         6 RECOVER
已選擇6行。

SQL> recover datafile 6;
完成介質恢復。
SQL> alter database datafile 6 online;

數據庫已更改。
----------------------------------------------------------------------------------------------------------------------------------------------
可以看出,在歸檔模式下面,offline和offline drop是沒啥區別的,在offline后都需要進行recover才能online。

----------------------------------------------------------------------------------------------------------------------------------------------
---測試下offline后,多次切換歸檔日志,看看recover命令是否能夠自動讀取歸檔日志?

SQL> alter database datafile 6 offline;

數據庫已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

----日志切換三次后,進行recover
SQL> recover datafile 6;
ORA-00279: 更改 1295761 (在 07/16/2015 15:44:40 生成) 對於線程 1 是必需的
ORA-00289: 建議: C:\ORACLE\ARCHIVE\ARC00081_0880122604.001
ORA-00280: 更改 1295761 (用於線程 1) 在序列 #81 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

已應用的日志。
完成介質恢復。
SQL>

SQL> alter database datafile 6 online;

數據庫已更改。

oracle還是可以自動找到歸檔日志進行recover。
---------------------
作者:killvoon
來源:CSDN
原文:https://blog.csdn.net/killvoon/article/details/46913183
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 

=================================================================================================

 

如下自我測試::

[root@prod ~]# su - oracle
[oracle@prod ~]$
[oracle@prod ~]$
[oracle@prod ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Oct 23 03:42:01 2018

Copyright (c) 1982, 2013, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter create

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
create_bitmap_area_size integer 8388608
create_stored_outlines string
db_create_file_dest string
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
SQL> alter system set db_create_file_dest='/data/datafile/prod';

System altered.


非歸檔模式下進行測試:
SQL> archive log list ;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /u01/app/oracle/product/11.2.0/db_1/dbs/arch
Oldest online log sequence 7
Current log sequence 9
SQL>


創建測試表空間:
SQL> create tablespace test1 datafile size 10m ;

Tablespace created.

查看創建的文件
SQL>
SQL> select file_name from dba_data_files ;

FILE_NAME
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/data/datafile/prod/users01.dbf
/data/datafile/prod/undotbs01.dbf
/data/datafile/prod/sysaux01.dbf
/data/datafile/prod/system01.dbf
/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf


在非歸檔模式下只能 offine drop ,否則會報錯,如下:
SQL> alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' offline ;
alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled

數據庫只有在歸檔模式下才能夠直接對數據文件進行offline


SQL> alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' offline drop;

Database altered.

再次查看狀態:
select file_name ,ONLINE_STATUS from dba_data_files

FILE_NAME ONLINE_
-------------------------------------------------------------------------------- -------
/data/datafile/prod/users01.dbf ONLINE
/data/datafile/prod/undotbs01.dbf ONLINE
/data/datafile/prod/sysaux01.dbf ONLINE
/data/datafile/prod/system01.dbf SYSTEM
/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf RECOVER

SQL>

SQL> 1
1* select file_name ,ONLINE_STATUS from dba_data_files
SQL> alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' online ;
alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' online
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf'


由於沒有日志切換,數據還在redo中,所以可以用recover 進行恢復。
SQL> recover datafile 5;
Media recovery complete.

如下,恢復成功:
SQL> alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' online;

Database altered.

SQL>
SQL>
SQL> select file_name ,ONLINE_STATUS from dba_data_files;

FILE_NAME ONLINE_
-------------------------------------------------------------------------------- -------
/data/datafile/prod/users01.dbf ONLINE
/data/datafile/prod/undotbs01.dbf ONLINE
/data/datafile/prod/sysaux01.dbf ONLINE
/data/datafile/prod/system01.dbf SYSTEM
/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf ONLINE

 

再次進行日志切換進行測試:
SQL>

再次 offline drop
SQL> alter database datafile '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf' offline drop;

Database altered.

SQL> select file_name ,ONLINE_STATUS from dba_data_files;

FILE_NAME ONLINE_
-------------------------------------------------------------------------------- -------
/data/datafile/prod/users01.dbf ONLINE
/data/datafile/prod/undotbs01.dbf ONLINE
/data/datafile/prod/sysaux01.dbf ONLINE
/data/datafile/prod/system01.dbf SYSTEM
/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf RECOVER


切換4次日志:
SQL> alter system switch logfile ;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.


SQL> alter database datafile 5 online ;
alter database datafile 5 online
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf'


這次redo中已經沒有了日志,無法進行 recover 恢復。所以面臨數據丟失問題
SQL> recover datafile 5;
ORA-00279: change 965377 generated at 10/23/2018 03:48:52 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/product/11.2.0/db_1/dbs/arch1_5_990243348.dbf
ORA-00280: change 965377 for thread 1 is in sequence #5


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_5_990243348.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


ORA-00308: cannot open archived log '/u01/app/oracle/product/11.2.0/db_1/dbs/arch1_5_990243348.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


SQL> alter database datafile 5 online ;
alter database datafile 5 online
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: '/data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf'


====================================================================================================

歸檔模式測試:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1185853440 bytes
Fixed Size 2252664 bytes
Variable Size 754974856 bytes
Database Buffers 419430400 bytes
Redo Buffers 9195520 bytes
Database mounted.
SQL> alter database archivelog ;

Database altered.

SQL> alter database open ;

Database altered.


查看歸檔模式已經開啟:
SQL> archive log list ;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/product/11.2.0/db_1/dbs/arch
Oldest online log sequence 7
Next log sequence to archive 9
Current log sequence 9
SQL>


創建表空間進行測試:
SQL> create tablespace test2 datafile size 5m;

Tablespace created.

SQL>

查看狀態信息,已經創建新的數據文件 6
SQL> select file_id,file_name,ONLINE_STATUS from dba_data_files ;

FILE_ID FILE_NAME ONLINE_
---------- -------------------------------------------------------------------------------- -------
4 /data/datafile/prod/users01.dbf ONLINE
3 /data/datafile/prod/undotbs01.dbf ONLINE
2 /data/datafile/prod/sysaux01.dbf ONLINE
1 /data/datafile/prod/system01.dbf SYSTEM
5 /data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf RECOVER
6 /data/datafile/prod/PROD/datafile/o1_mf_test2_fwwbpr87_.dbf ONLINE

6 rows selected.

歸檔模式下可以直接進行 offline操作
SQL> alter database datafile 6 offline ;

Database altered.

SQL> alter database datafile 6 online ;
alter database datafile 6 online
*
ERROR at line 1:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/data/datafile/prod/PROD/datafile/o1_mf_test2_fwwbpr87_.dbf'


需要recover ,因為redo中還有信息,所以可以直接recover 成功。
SQL> recover datafile 6;
Media recovery complete.

可以重新online ,數據沒有丟失
SQL> alter database datafile 6 online ;

Database altered.


再次進行offline 進行操作。這次進行4次日志切換。
SQL> alter database datafile 6 offline ;

Database altered.

SQL> alter system switch logfile ;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> alter database datafile 6 online ;
alter database datafile 6 online
*
ERROR at line 1:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/data/datafile/prod/PROD/datafile/o1_mf_test2_fwwbpr87_.dbf'


進行恢復recover ,因為 redo已經歸檔到 歸檔日志里面,所以這里可以恢復成功。
SQL> recover datafile 6;
ORA-00279: change 966347 generated at 10/23/2018 03:55:26 needed for thread 1
ORA-00289: suggestion : /u01/app/oracle/product/11.2.0/db_1/dbs/arch1_9_990243348.dbf
ORA-00280: change 966347 for thread 1 is in sequence #9


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.

重新online成功
SQL> alter database datafile 6 online ;

Database altered.

SQL> select file_id,file_name,ONLINE_STATUS from dba_data_files ;

FILE_ID FILE_NAME ONLINE_
---------- -------------------------------------------------------------------------------- -------
4 /data/datafile/prod/users01.dbf ONLINE
3 /data/datafile/prod/undotbs01.dbf ONLINE
2 /data/datafile/prod/sysaux01.dbf ONLINE
1 /data/datafile/prod/system01.dbf SYSTEM
5 /data/datafile/prod/PROD/datafile/o1_mf_test1_fwwb2zh1_.dbf RECOVER
6 /data/datafile/prod/PROD/datafile/o1_mf_test2_fwwbpr87_.dbf ONLINE

6 rows selected.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM