`
frank1998819
  • 浏览: 758074 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

Oracle 删除数据文件基本命令(转)

 
阅读更多

在我们详细介绍之前,我们必须说清楚一点:Oracle不提供如删除表、视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。

 

一、使用offline数据文件的方法

非归档模式使用:alter database datafile '...' offline drop;

归档模式使用:  alter database datafile '...' offline;

说明:

1)         以上命令只是将该数据文件OFFLINE,而不是在数据库中删除数据文件。该数据文件的信息在控制文件种仍存在。查询v$datafile,仍显示该文件。

2)         归档模式下offline和offline drop效果是一样的

3)         offline后,存在此datafile上的对象将不能访问

4)         noarchivelog模式下,只要online redo日志没有被重写,可以对这个文件recover后进行online操作

 

实际使用案例:

直接删除数据文件后无法进入系统的解决方案

 

正常情况下,删除表空间的正确方法为:

DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;

 

如果没有通过以上命令删除而直接删除了数据文件,将导致数据库无法打开。

 

如果直接删除了数据文件

普通用户登录时,则报错:

ORA-01033: ORACLE initialization or shutdown in progress

sys用户可以正常登录

但进行操作时(SELECT count(1) FROM user_tables),则会报错:

ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

如果执行命令alter database open以打开数据库时,又报如下错:

ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 12: 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TSTEST001.DBF'

 

说明数据库没找到这个数据文件

因为数据文件在没有被offline的情况下物理删除了,导致oracle的数据不一致,因此启动失败.

通过以下方法即可解决

 

解决方法:

sqlplus sys/orcl@orcl as sysdba;

SQL> alter database datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TSTEST001.DBF' offline drop;

SQL> alter database open;

SQL> drop tablespace CTBASEDATA;

 

二、Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name;来删除一个空数据文件,并且相应的数据字典信息也会清除:

 

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files

  2  where tablespace_name='USERS';

FILE_ID  FILE_NAME                        TABLESPACE_NAME

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

4        /u01/app/oracle/oradata/orcl/users01.dbf    USERS

 

sys@ORCL>alter tablespace users add datafile

  2  '/u01/app/oracle/oradata/orcl/users02.dbf' size 5M autoextend off;

Tablespace altered.

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files

  2  where tablespace_name='USERS';

FILE_ID  FILE_NAME                          TABLESPACE_NAME

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

4        /u01/app/oracle/oradata/orcl/users01.dbf     USERS

9        /u01/app/oracle/oradata/orcl/users02.dbf     USERS

 

sys@ORCL>drop table test;

Table dropped.

sys@ORCL>create table test tablespace users

  2  as

  3  select * from dba_objects;

Table created.

sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents

  2  where file_id=9;

SEGMENT_NAME                      FILE_ID     BLOCKS

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

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9          8

TEST                                    9        128

TEST                                    9        128

 

17 rows selected.

sys@ORCL>alter table test move tablespace PERFSTAT; --把表移动到其它表空间

Table altered.

sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents

  2  where file_id=9;

no rows selected

sys@ORCL>alter tablespace users drop datafile

  2  '/u01/app/oracle/oradata/orcl/users02.dbf';

Tablespace altered.

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files

  2  where tablespace_name='USERS';

FILE_ID  FILE_NAME                       TABLESPACE_NAME

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

4        /u01/app/oracle/oradata/orcl/users01.dbf   USERS

 

三、oracle 10g可以删除临时表空间的文件

alter database tempfile '/home/oracle/temp01.dbf' drop including datafiles;

 

ALTER DATABASE 与 ALTER TABLESPACE OFFLINE的区别

一.DataFile脱机或联机的两种方法:

① ALTER DATABASE 语句修改单独的DataFile

② ALTER TABLESPACE 语句修改所有的DataFile

1、在ARCHIVRLOG模式下的更改DataFile状态

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;

或者用文件号来表示 :

ALTER DATABASE DATAFILE 5 ONLINE;

ALTER DATABASE DATAFILE 5 OFFLINE;

注:只有在ARCHIVELOG模式下才可使用ALTER DATABASE来更改DataFile

 

2、在NOARCHIVELOG模式下使DataFile脱机

由于在NOARCHIVELOG模式下,数据文件脱机后会造成数据的遗失,所以只能使用ALTER DATABASE语句下带有DATAFILE和OFFLINE DROP子句的选项将该DataFile直接取消,例如该DataFile只包含临时段数据,并没有备份时

 

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users3.dbf' OFFLINE DROP;

3、修改TableSpace中所有DataFile或TempFile的可用性

ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}

ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}

 

注:修改某TableSpace中的所有数据文件,但是TableSpace本身的状态不改变。

总结:

① ALTER TABLESPACE可以在数据库装载状态时发布,无需打开

② 涉及到系统表空间、撤销表空间、默认临时表空间时,必须是未打开的数据库

③ ALTER DATABASE DATAFILE 语句中必须填入文件全名

 

二. 表空间 与 数据文件 脱机的区别

1. ALTER TABLESPACE ... OFFLINE

Does a checkpoint on the datafiles

Takes the datafiles offline

表空间Offline时,数据文件的SCN会被冻结,而且表空间的数据文件offline/online时又会发生文件检查点,使单个数据文件SCN和数据库其他问题不一致。

表空间online时,Oracle会取得当前SCN,解冻offline文件SCN,和当前SCN同步。

tablespace offline有几种选项可供选择normal, temporary,immediate, for recovery,而在datafile中则没有这些选项。

 

2.  ALTER DATABASE DATAFILE ... OFFLINE

单纯的offline datafile,将不会触发文件检查点,只有针对offline tablespace的时候才会触发文件检查点,这也是为什么online datafile需要media recovery而online tablespace不需要。

注:只有在ARCHIVELOG模式下才可使用ALTER DATABASE来更改DataFile

分享到:
评论

相关推荐

    oracle数据文件的删除命令

    ### Oracle 数据文件删除命令详解 在Oracle数据库管理与维护的过程中,经常会遇到需要删除特定数据文件的情况。例如,当数据文件损坏或不再需要时,通过适当的命令进行删除是非常必要的。本文将详细介绍如何使用...

    如何正确的删除Oracle表空间数据文件

    在Oracle数据库管理中,删除表空间数据文件是一项关键操作,涉及到数据的安全性和系统的稳定性。本文将详细介绍如何正确地删除Oracle表空间数据文件,探讨OFFLINE和OFFLINE DROP的区别,以及在操作系统层面删除数据...

    原创Oracle 物理删除数据文件恢复 危机演练

    在Oracle数据库管理中,物理删除数据文件是一种严重的情况,可能导致数据丢失或系统不可用。本文将深入探讨如何在危机情况下进行Oracle数据文件的物理删除恢复。这个话题对于DBA(数据库管理员)来说至关重要,因为...

    Oracle必杀技物理删除数据文件恢复

    总的来说,Oracle物理删除数据文件恢复是一项技术性强、要求高的任务,但通过理解数据库的工作原理、熟悉Oracle的恢复命令,以及具备良好的问题解决能力,你完全可以应对这类挑战。在实践中不断积累经验,你将成为一...

    oracle数据文件被误删除后的灾难处理

    ### Oracle 数据文件误删除后的灾难恢复策略 在日常的数据库管理工作中,误删除重要的 Oracle 数据文件是一种常见的且可能带来严重后果的操作失误。本文将详细探讨当遇到 Oracle 数据文件被误删除的情况时,如何...

    oracle日志文件相关命令

    Oracle 日志文件可以帮助数据库管理员追踪数据库的所有操作,包括数据修改、事务提交、错误信息等。下面是 Oracle 日志文件相关命令的详细介绍: 1. 查询系统使用的是哪一组日志文件: 使用以下命令可以查询系统...

    在裸设备和文件系统之间转换ORACLE数据

    3. **删除原数据文件**:从文件系统中安全删除原数据文件。 4. **在裸设备上创建新数据文件**:参照上述步骤1.1中介绍的方法,在裸设备上创建新的数据文件。 5. **导入数据**:使用impdp工具将数据从临时文件导入至...

    如何查询Oracle表空间和数据文件信息

    在Oracle数据库管理中,了解和监控表空间及数据文件的状态对于数据库管理...同时,根据表空间和数据文件的使用情况,还可以调整表空间的大小,增加或删除数据文件,或者改变数据文件的存储位置,以满足不同的业务需求。

    Oracle命令

    - **创建用户命令**:在 Oracle 中创建新用户的基本命令格式为: ```sql CREATE USER username IDENTIFIED BY password; ``` 例如创建名为 `deng` 的用户,密码为 `123456`: ```sql CREATE USER deng ...

    oracle物理表空间删除修复命令

    这条命令将指定的数据文件离线并删除。适用于非归档模式(NOARCHIVELOG)下的数据库。 2. **在线模式下仅离线数据文件**: ```sql SQL> alter database datafile '文件路径' offline; ``` 这条命令仅将指定的...

    Oracle数据文件移动方法.pdf

    ### Oracle 数据文件移动方法详解 #### 一、背景与目的 在Oracle数据库管理过程中,由于存储设备容量限制或为了优化性能等因素,有时需要对数据库的数据文件进行移动操作。本篇文章将详细介绍如何安全有效地将...

    Oracle通过DBF恢复数据

    1. **确认数据文件(DBF)存在**:首先确认原始数据库中的数据文件仍然存在,并且未被覆盖或删除。 2. **准备恢复环境**: - 安装相同版本的Oracle数据库软件。 - 创建一个与原始数据库名称相同的实例。 3. **备份...

    Oracle Rac 集群数据文件改变目录操作

    以下将详细介绍标题和描述中提到的Oracle RAC集群数据文件改变目录的操作步骤。 **一、修改SPFILE位置** 1. **查看SPFILE信息**:通过SQL*Plus连接到RAC的任意实例,使用`SHOW PARAMETER spfile`命令查看当前...

    oracle数据库常见命令

    以下是一些关于Oracle数据库导出命令的基本介绍: - **命令格式**: ```shell exp [username]/[password]@dbname [command options] ``` - **参数说明**: - `exp`:表示导出数据。 - `[username]/[password]...

    oracle表空间和数据文件的详细操作(纯手工)

    ### Oracle表空间与数据文件的详细操作 #### 1. 创建表空间 在Oracle数据库中,表空间是逻辑存储单元,用于组织数据文件。创建表空间的基本语法如下: ```sql CREATE TABLESPACE <表空间名> DATAFILE '<数据文件...

    oracle删除和重建实例

    3. 删除实例数据文件和 dump 文件:删除实例数据文件和 dump 文件是删除 Oracle 实例的重要步骤。可以使用find 命令查找实例数据文件和 dump 文件,然后删除这些文件。 4. 删除其他配置文件:删除其他配置文件是...

    oracle SQL 命令大全

    Oracle 数据库管理系统中最基本的操作语句,包括打开服务器、关闭服务器、查看当前用户的角色、查看当前用户的系统权限和表级权限、查看当前用户的缺省表空间、修改表结构、更改用户密码、创建表空间的数据文件、...

    oracle 常用函数 sqlplus基本命令

    本文将深入探讨"Oracle常用函数"以及"SQL*Plus基本命令"这两个关键领域,旨在帮助你提升在数据库操作中的效率。 一、Oracle常用函数 1. 长度函数`LENGTH` `LENGTH`函数用于计算字符串的字符数,不区分字符类型(如...

    删除ORACLE某个用户下所有数据

    ### 删除Oracle某个用户下所有数据 在Oracle数据库管理过程中,有时候我们需要清理某个用户下的所有数据。这可能是因为项目结束、测试环境重置或是其他原因导致的。为了完成这一任务,我们可以通过一系列SQL命令来...

    Oracle数据导入导出命令.pdf

    ### Oracle 数据导入导出命令详解 #### 一、概述 Oracle 数据库系统是业界领先的数据库管理系统之一,提供了强大的数据管理功能。在Oracle中,数据的导入导出是一项非常重要的任务,尤其是在需要迁移数据、备份数据...

Global site tag (gtag.js) - Google Analytics