zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    CHROME下去掉保存密码后输入框变成黄色背景样式
    AJAX请求遭遇未登录和Session失效的解决方案
    Oracle数据导入导出imp/exp
    缓存技术
    存储过程中引用的常规表,临时表以及表变量是否会导致存储过程的重编译
    给定一张表(列有月份,销售额),要求查询出月份、本月销售额、上月销售额这三个结果,如果当月上个月的销售额不存在就显示为“*”。
    tempdb 数据文件暴涨
    数据库还原成功之后,数据库依然处于还原状态
    CONVERT时间
    sql 2008 链接服务器到 sql 2000
  • 原文地址:https://www.cnblogs.com/moonfans/p/11312082.html
Copyright © 2011-2022 走看看