转: 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.

关于alter database datafile offline和alter database datafile offline drop 的区别的更多相关文章

  1. 冷备手工完全恢复(recover database,recover tablespace,recover datafile)

    冷备手工完全恢复 1.   手工完全恢复三种级别: recover database: 所有或大部分datafile丢失,一般是在mount状态完成.recover tablespace:    非关 ...

  2. Flashing Back a Failed Primary Database into a Physical Standby Database(闪回FAILOVER失败的物理备库)

    文档操作依据来自官方网址:https://docs.oracle.com/cd/E11882_01/server.112/e41134/scenarios.htm#SBYDB4888 闪回FAILOV ...

  3. 重建索引:ALTER INDEX..REBUILD ONLINE vs ALTER INDEX..REBUILD

    什么时候需要重建索引 1. 删除的空间没有重用,导致 索引出现碎片 2. 删除大量的表数据后,空间没有重用,导致 索引"虚高" 3.索引的 clustering_facto 和表不 ...

  4. 安装concrete时提示“...database does not support InnoDB database tables..."如何解决

    安装很多系统时,经常有有提示: "...database does not support InnoDB database tables..." 解决办法: 找到MySQL的配置文 ...

  5. Could not update Activiti database schema: unknown version from database: '5.20.0.1'

    转: Could not update Activiti database schema: unknown version from database: '5.20.0.1' 2017年11月22日 ...

  6. Oracle database datafile header中记录的datafile的大小

    本文的环境:Oracle Databae 12.1.0.2, rhel5.9 x86-64bit [oracle@rhel59 orcl]$ pwd /u01/app/oracle/oradata/o ...

  7. Oracle Database 12c Using duplicate standby database from active database Created Active DataGuard

    primary database db_name=zwc, db_unique_name=zwc standby database db_name=zwc, db_unique_name=standb ...

  8. sql中update,alter,modify,delete,drop的区别和使用(整理)(转)

    关于update和alter: 百度知道上关于update和alter有一个很形象的总结: 一个表有很多字段,一个字段里有很多数据. 一个家有很多房间,一个房间里有很多家具. update是用来将衣柜 ...

  9. sql中update,alter,modify,delete,drop的区别和使用(整理)

    关于update和alter: 百度知道上关于update和alter有一个很形象的总结: 一个表有很多字段,一个字段里有很多数据. 一个家有很多房间,一个房间里有很多家具. update是用来将衣柜 ...

随机推荐

  1. javascript中数组的常用算法深入分析

    Array数组是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array是前端必修的功课.本文将给大家详细介绍了javascri ...

  2. HTML 请求头,响应头和 HTTP状态码

    请求头 选项 说明 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 告诉服务器,当前客户端可以接收的文档类型 ...

  3. Javascript URI 解析介绍

    URI 在维基百科中对于URI的解释是这样子的: 在计算机术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识 ...

  4. cf932E. Team Work(第二类斯特灵数 组合数)

    题意 题目链接 Sol 这篇题解写的非常详细 首先要知道第二类斯特灵数的一个性质 \[m^n = \sum_{i = 0}^m C_{n}^i S(n, i) i!\] 证明可以考虑组合意义:\(m^ ...

  5. 33.Odoo产品分析 (四) – 工具板块(4) – 问题追踪及群发邮件营销(1)

    查看Odoo产品分析系列--目录 问题追踪 该应用程序允许您管理项目中可能遇到的问题,如系统中的bug.客户投诉或物料故障.  该模块安装后没有菜单显示,而是作为后台管理,接收一些问题报告. 群发邮件 ...

  6. Android包管理机制(二)PackageInstaller安装APK

    前言 在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInsta ...

  7. SQL 中事务的分类

    先讲下事务执行流程: BEGIN和COMMIT PRINT @@TRANCOUNT --@@TRANCOUNT统计事务数量 BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRA ...

  8. 对讲解OS文献的反思

    前天把OS中Taneubaum写的那篇论文Can We Make Operating Systems Reliable and Secure?给班上的同学讲解了一遍.这篇文献我花了三天的时间才把它弄好 ...

  9. #012python实验课

    通过三到四周的学习Python选修课程已经学到了网络爬虫这一环节. 基础语法混乱 这是,在进行周四实验课程的时候,一直遇到的一个问题.写着写着,就往C语言的语法方向跑了,可以说之前我仅仅是对,pyth ...

  10. Docker for Windows 中文文档(3)——Docker Settings

    Docker设置 Docker运行时,显示Docker鲸鱼. 默认情况下,Docker鲸鱼图标被放置在“通知”区域中. 如果隐藏,单击任务栏上的向上箭头显示. 提示:您可以将鲸鱼固定在通知框外面,使其 ...