ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle文件改名实验记录

Oracle文件改名实验记录

原创 Linux操作系统 作者:realkid4 时间:2013-04-22 22:03:52 0 删除 编辑

 

在日常工作中,我们经常会遇到诸如空间被回收、某个磁盘损坏或者需要更换的情况。这个时候,往往需要我们将数据文件转移到其他存储位置上。本篇主要介绍常用的两种处理手段,权当记录,供自己和有需要的朋友不时之需。

 

1、环境准备

 

我们选择11g进行试验。

 

 

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE        11.2.0.1.0         Production

 

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

 

 

创建一个实验的表空间用于测试。

 

 

SQL> create tablespace mvtbltest datafile '/u01/oradata/WILSON/datafile/mvtbltest01.dbf' size 10m autoextend off

  2   extent management local uniform. size 1m

  3   segment space management auto;

 

Tablespace created

 

SQL> col file_name for a45;

SQL> select file_name, tablespace_name from dba_data_files where tablespace_name='MVTBLTEST';

 

FILE_NAME                                     TABLESPACE_NAME

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

/u01/oradata/WILSON/datafile/mvtbltest01.dbf  MVTBLTEST

 

 

创建一些实验对象。

 

 

SQL> create table t tablespace mvtbltest as select * from dba_objects ;

Table created

 

SQL> select tablespace_name, bytes from dba_segments where wner='SYS' and segment_name='T';

TABLESPACE_NAME                     BYTES

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

MVTBLTEST                         9437184

 

 

我们通过mvtbltest表空间进行试验。

 

常用的处理方法有两个,一个是在线online进行文件的rename操作,另一个是需要停库,在启动过程中进行rename操作。

 

2Online文件重命名操作

 

首先我们进行online的文件重命名。首先,我们需要明确,无论是online还是停库操作,表空间文件都会有一定时间不能使用。两者的差异在于是否会影响到其他表空间使用。

 

第一步,我们需要将表空间进行offline操作,此时所有文件对象将不能被访问。

 

 

SQL> alter tablespace mvtbltest offline;

Tablespace altered

 

SQL> select count(*) from t;

select count(*) from t

 

ORA-00376: 此时无法读取文件 10

ORA-01110: 数据文件 10: '/u01/oradata/WILSON/datafile/mvtbltest01.dbf'

 

 

第二步,需要在操作系统层面进行文件的拷贝操作。此时,最推荐的是使用mv命令操作。如果没有把握而且空间不紧张,copy也是比较稳妥的方案。

 

 

[oracle@bspdev ~]$ cd /u01/oradata/WILSON/datafile/

[oracle@bspdev datafile]$ mv mvtbltest01.dbf /u01/oradata/WILSON/

[oracle@bspdev datafile]$ ls -l | grep mv

[oracle@bspdev datafile]$ cd ..

[oracle@bspdev WILSON]$ ls -l | grep mv

-rw-r----- 1 oracle oinstall 10493952 Apr 23 05:38 mvtbltest01.dbf

 

 

第三步,修改表空间对应文件的连接。

 

 

SQL> select file_name, status, online_status from dba_data_files where tablespace_name='MVTBLTEST';

 

FILE_NAME                                     STATUS    ONLINE_STATUS

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

/u01/oradata/WILSON/datafile/mvtbltest01.dbf  AVAILABLE OFFLINE

 

SQL> alter tablespace mvtbltest rename datafile '/u01/oradata/WILSON/datafile/mvtbltest01.dbf'  to  '/u01/oradata/WILSON/mvtbltest01.dbf';

 

Tablespace altered

 

SQL> select file_name, status, online_status from dba_data_files where tablespace_name='MVTBLTEST';

 

FILE_NAME                                     STATUS    ONLINE_STATUS

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

/u01/oradata/WILSON/mvtbltest01.dbf           AVAILABLE OFFLINE

 

 

最后,将表空间进行online操作。

 

 

SQL> alter tablespace mvtbltest online;

Tablespace altered

 

 

SQL> select count(*) from t;

 

  COUNT(*)

----------

     72722

 

 

应该说,online文件重命名是很简单的操作。过程消耗时间主要在OS层面的文件拷贝。

 

3、停库文件重命名

 

停库文件重命名是另一种情况。在进行数据还原(从冷备份)过程中,我们经常需要在启动过程中进行文件信息的替换。

 

我们首先进行停库处理。

 

 

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

 

OS层面进行文件拷贝。

 

 

[oracle@bspdev WILSON]$ ls -l | grep mv

-rw-r----- 1 oracle oinstall 10493952 Apr 23 05:55 mvtbltest01.dbf

[oracle@bspdev WILSON]$ mv mvtbltest01.dbf /u01/oradata/WILSON/datafile/mvtbltest01.dbf

[oracle@bspdev WILSON]$ ls -l | grep mv

[oracle@bspdev WILSON]$ cd datafile/

[oracle@bspdev datafile]$ ls -l | grep mv

-rw-r----- 1 oracle oinstall  10493952 Apr 23 05:55 mvtbltest01.dbf

[oracle@bspdev datafile]$

 

 

重新启动数据库,进入mount状态。

 

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  849530880 bytes

Fixed Size                  1339824 bytes

Variable Size             587206224 bytes

Database Buffers          255852544 bytes

Redo Buffers                5132288 bytes

Database mounted.

SQL>

 

 

使用rename file命令进行转换。

 

 

SQL> alter database rename file '/u01/oradata/WILSON/mvtbltest01.dbf' to '/u01/oradata/WILSON/datafile/mvtbltest01.dbf';

 

Database altered.

 

 

最后成功启动数据库。

 

 

SQL> alter database open;

Database altered.

 

SQL> select count(*) from t;

 

  COUNT(*)

----------

     72722

 

 

4、结论

 

数据文件重命名是一个很简单的过程,伴随着OS层面和控制文件之间的协调处理。在很多业务处理场景下,很有意义。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-759054/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7638369