`

更改Oracle数据文件路径(原创)

 
阅读更多

近日,群里的朋友经常遇到数据文件需要删除或者改名的问题,这里,笔者进行了下总结,也算是抛砖引玉,希望大家拍砖。
删除数据文件
在10g中,如果是未被Oracle写入数据的数据文件则可以被直接删除,如果是已经被写入数据的数据文件,则无法被直接删除。请见下例
SQL> create tablespace test datafile '/home/oracle/test1.dbf' size 1m;
Tablespace created.
SQL>  create table test tablespace test
  2  as
  3* select * from dba_objects where rownum <=8000
Table created.
SQL> select SEGMENT_NAME,BYTES/1024/1024 Mb from user_segments where SEGMENT_NAME='TEST';
SEGMENT_NAME                 MB                                                                                                                                                    
------------------          ------------                                                                 
TEST                           .875 
SQL> alter tablespace test add datafile '/home/oracle/test2.dbf' size 50m;
Tablespace altered.
SQL> insert into test select * from dba_objects ;
50323 rows created.
SQL> commit;
Commit complete.
SQL> select SEGMENT_NAME,BYTES/1024/1024 from dba_segments where SEGMENT_NAME='TEST'
SEGMENT_NAME         BYTES/1024/1024
-------------------- ---------------
TEST                               7
QL> alter tablespace test add datafile '/u01/app/test3.dbf' size 1m;
Tablespace altered.
SQL> alter tablespace test drop datafile '/u01/app/test3.dbf';
Tablespace altered.
SQL> alter tablespace test drop datafile '/u01/app/test2.dbf';
alter tablespace test drop datafile '/u01/app/test2.dbf'
*
ERROR at line 1:
ORA-03262: the file is non-empty

可以看到,只有非空的数据文件才能进行删除,已经写入数据的数据文件不能进行删除。
更改数据文件位置
更改数据文件位置,笔者认为有3种方法
1、利用rman的set newname来更改数据文件位置,对应用影响较小。

2、利用手工备份,然后拷贝数据到指定位置,原理和rman类似。

3、利用exp导出数据,重建表空间后再倒入数据,笔者认为该方法对应用影响较大,需结合实际情况考虑,这里不做详细介绍。
利用rman的set newname来更改数据文件位置

SQL> select file_name,status,file_id from dba_data_files;
FILE_NAME                                                         STATUS                    FILE_ID
-------------------------------------                ---------------------------        
---------------------------

/u01/app/oradata/orcl/users01.dbf                 AVAILABLE                  5
/u01/app/oradata/orcl/sysaux01.dbf               AVAILABLE                  2
/u01/app/oradata/orcl/undotbs01.dbf             AVAILABLE                  3
/u01/app/oradata/orcl/system01.dbf               AVAILABLE                  1
/u01/app/oradata/orcl/example01.dbf             AVAILABLE                  4
/home/oracle/test1.dbf                                          AVAILABLE                   6
/home/oracle/test2.dbf                                          AVAILABLE                   7
通过使用rman的set newname命令更改数据文件位置,整个过程如下:
1、由于 set newname命令是更改rman repository的信息 ,并根据 set newname的信息 restore备份数据到目标路径,故需 先对数据文件进行那个备份
RMAN> backup datafile 6,7;
Starting backup at 21-APR-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00007 name=/u01/app/test2.dbf
input datafile fno=00006 name=/u01/app/test1.dbf
channel ORA_DISK_1: starting piece 1 at 21-APR-12
channel ORA_DISK_1: finished piece 1 at 21-APR-12
piece handle=/u01/app/flash_recovery_area/ORCL/backupset/2012_04_21/o1_mf_nnndf_TAG20120421T150219_7s4pvvmt_.bkp tag=TAG20120421T150219 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 21-APR-12
2、 这一步 rman并不认为是将数据restore到新路径下,而是认为将数据文件以copy的方式备份到新路径下 ,官方文档解释如下:
Sets the default name for all subsequent RESTORE or SWITCH commands that affect the specified datafile. If you do not issue this command before the datafile restore operation, then RMAN restores the file to its default location.
After you restore a datafile to a new location, then you can run SWITCH to rename the file in the control file to the NEWNAME. If you do not run SWITCH, then the restored file functions as a datafile copy and is recorded as such in the repository.
RMAN> run{
2> set newname for datafile 6 to '/u01/app/test1.dbf';
3> set newname for datafile 7 to '/u01/app/test2.dbf';
4> restore datafile 6,7;
5>  }

RMAN> list copy;
specification does not match any archive log in the recovery catalog
List of Datafile Copies
Key     File S Completion Time Ckp SCN    Ckp Time        Name
------- ---- - --------------- ---------- --------------- ----
8       6    A 21-APR-12       832277     21-APR-12      
/u01/app/test1.dbf
9       7    A 21-APR-12       832277     21-APR-12      
/u01/app/test2.dbf
3、将表空间或者数据文件offline

RMAN>  sql 'alter tablespace test offline';
sql statement: alter tablespace test offline
4、通过switch命令将数据文件信息写入到控制文件中
RMAN> run{  
2> switch datafile all;                   #switch命令必须在run块里面
3> }

5、recover表空间或者数据文件
RMAN> recover datafile 6,7;
Starting recover at 21-APR-12
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:02
Finished recover at 21-APR-12
6、将表空间或者数据文件online
RMAN> sql 'alter tablespace test online';
sql statement: alter tablespace test online

查看数据文件信息,大功告成
SQL> select file_name,status,file_id from dba_data_files;
FILE_NAME                                                         STATUS                    FILE_ID
-------------------------------------                ---------------------------        
---------------------------

/u01/app/oradata/orcl/users01.dbf                 AVAILABLE                  5
/u01/app/oradata/orcl/sysaux01.dbf               AVAILABLE                  2
/u01/app/oradata/orcl/undotbs01.dbf             AVAILABLE                  3
/u01/app/oradata/orcl/system01.dbf               AVAILABLE                  1
/u01/app/oradata/orcl/example01.dbf             AVAILABLE                  4
/u01/app/test1.dbf                                          AVAILABLE                   6
/u01/app/ test2.dbf                                          AVAILABLE                   7

利用手工备份,然后拷贝数据到指定位置

1、将表空间至于备份状态
SQL> alter tablespace test begin backup;
Tablespace altered.

2、拷贝数据文件到目标位置
$cp /home/oracle/test*.dbf /u01/app/test*

3、将表空间至于offline状态
SQL> alter tablespace test end backup;
Tablespace altered.
SQL> alter tablespace test offline; Tablespace altered.

3、重命名数据文件

SQL> alter tablespace test rename datafile '/home/oracle/test1.dbf' to
'/u01/app/test1.dbf';
Tablespace altered.

SQL> alter tablespace test rename datafile '/home/oracle/test2.dbf' to
'/u01/app/test2.dbf';
Tablespace altered.

4、对test表空间应用日志
SQL> recover tablespace test;
Media recovery complete.

5、将test表空间至于online
SQL> alter tablespace test online;
Tablespace altered.

6、查看表空间状态
SQL> select file_name from dba_data_files;
FILE_NAME
-----------------------------------------------------------------
/u01/app/oradata/orcl/users01.dbf
/u01/app/oradata/orcl/sysaux01.dbf
/u01/app/oradata/orcl/undotbs01.dbf
/u01/app/oradata/orcl/system01.dbf
/u01/app/oradata/orcl/example01.dbf
/u01/app/test1.dbf
/u01/app/test2.dbf
7 rows selected.
总结:以上介绍了如何更改非空数据文件的路径,笔者认为,rman操作的方式相对复杂,但对系统影响最小。手工备份的方式比较简单,但会产生更多的redo,如果表空间不是特别大的话亦可考虑。至于imp/exp导出的方式,对系统影响最大,个人认为需要结合实际情况分析。

参考至:http://docs.oracle.com/cd/B10500_01/server.920/a96565/rcmsynta50.htm
           http://docs.oracle.com/cd/B10500_01/server.920/a96565/rcmsynta56.htm
           http://www.cnblogs.com/rootq/archive/2010/03/05/1678969.html
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com

0
0
分享到:
评论

相关推荐

    Installshell2009制作ORACLE静默安装 文档 [原创]

    - 数据导入语句,将预先准备好的数据文件导入到新创建的数据库中。 **制作带基础数据的模板:** - 制作数据库模板,以便在安装新数据库时可以直接应用这些配置,包括用户、表空间以及基础数据。 - 模板文件存储于`...

    [原创]在Solaris 10 x86_64平台上安装Oracle 11gR2

    - **设置数据库实例**:根据实际需求设置数据库实例名、数据文件存储位置等。 - **完成安装**:按照屏幕提示完成安装过程。 #### 六、后续步骤 - **配置Enterprise Manager**:如果需要使用Oracle Enterprise ...

    [原创]PWX for AS400 两段式字符集处理(杨晓东2005-12-08)

    通过两个步骤的操作,可以有效地将AS400的数据导入到Oracle数据库中,并确保中文数据的正确显示。 #### 第一步:下载AS/400源文件至开放平台 1. **创建源文件的DataMap** - 在这一阶段,首先需要创建一个DataMap...

    Project.net环境搭建说明[原创]

    4. **修改Server.xml文件**:编辑`C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\server.xml`文件,确保监听端口正确无误,并配置其他高级选项。 通过以上步骤,可以完成Project.net环境的基本搭建...

    BIEE第一章之芝麻开门

    1. **配置默认RPD文件**:为了便于每次启动BIServer时自动加载特定的RPD文件,需要修改`NQSConfig.INI`文件,设置默认RPD文件路径。 以上步骤概述了BIEE的基本配置流程,通过这一系列的操作,可以构建出一个功能...

    办公室日常信息管理系统课程设计数据库实现.doc

    数据库实施则包括创建数据库、定义表结构和编写针对管理员、考勤、会议记录、文件和职工表的数据操作,如插入、修改、删除和查询,确保系统的功能完整性和实用性。 整个课程设计过程中,学生不仅学习了数据库理论,...

    Powerdesigner把表结构导出成word.docx

    在IT行业中,数据库设计是软件开发过程中的关键环节,PowerDesigner作为一款强大的数据库设计和建模工具,帮助企业或开发者高效地进行数据模型管理。本文将详细介绍如何使用PowerDesigner 16.5将数据库表结构导出为...

    jboss的安装与ejb的工程的配置(原创)

    例如,如果Oracle占用了8080端口,那么你需要修改jBoss的配置文件`server.xml`,位于`deploy/jbossweb-tomcat50.sar/`目录下,将8080端口更改为其他未被占用的端口,比如9000。 - 同样,如果在同一台机器上运行多个...

    管理系统免费下载

    这个文件将引导用户完成整个安装过程,包括但不限于选择安装路径、设置启动选项、配置数据库连接等。安装过程中,可能会提示用户输入必要的许可证信息或接受许可协议,这是免费版的特殊之处,因为通常免费软件不会...

    vc++ 应用源码包_5

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 开发实例源码包

    MyPhpServer(原创,有实现的主要代码) 如题。 microcai-ibus-t9-输入法源码 如题,主要源码就几个,详细见代码。 MzfHips主动防御 主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 ...

    vc++ 应用源码包_1

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_2

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_6

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    vc++ 应用源码包_3

    从fnMyDownload开始,程序首先解析输入的url,拆分为地址,路径,文件名等。然后获取文件头,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的...

    springmybatis

    2. 设置mybatis 配置文件:Configuration.xml, 在src_user目录下建立此文件,内容如下: 程序代码 程序代码 &lt;!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...

Global site tag (gtag.js) - Google Analytics