分类: Oracle
2011-08-17 15:20:48
更改数据文件名称
当表空间使用率快满时,增加数据文件是最常见的做法,而对于不是很熟练的DBA来说,很有可能一时错手,写错了数据文件的名称,或是放在了不恰当的位置,所以,更改数据文件路径及名称就很有必要了。本文主要讲述在不同结构下如何修改数据文件的路径及名称。主要分成单机数据库及standby数据库两种情况。另外还有RAC,由于是共用数据文件,所以大致可以参考单机的情况,在此就不详细讲述了。
SQL> set linesize 1000
SQL> col file_name format a50
SQL> col tablespace_name format a30
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ----------------------------
-
D:\ORACLE\ORADATA\ORA90\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\ORA90\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\ORADATA\ORA90\CWMLITE01.DBF CWMLITE
D:\ORACLE\ORADATA\ORA90\DRSYS01.DBF DRSYS
D:\ORACLE\ORADATA\ORA90\INDX01.DBF INDX
D:\ORACLE\ORADATA\ORA90\ODM01.DBF ODM
D:\ORACLE\ORADATA\ORA90\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\ORA90\USERS01.DBF USERS
D:\ORACLE\ORADATA\ORA90\XDB01.DBF XDB
已选择9行。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
使用操作系统命令修改数据文件名USERS01.DBF为USERS02.DBF(UNIX下可采用mv命令)。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 252779340 bytes
Fixed Size 453452 bytes
Variable Size 125829120 bytes
Database Buffers 125829120 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> alter database
2 rename file 'D:\ORACLE\ORADATA\ORA90\USERS01.DBF'
3 to 'D:\ORACLE\ORADATA\ORA90\USERS02.DBF';
数据库已更改。
SQL>
SQL> alter database open
2 ;
数据库已更改。
SQL>
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- -----------------
-
D:\ORACLE\ORADATA\ORA90\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\ORA90\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\ORADATA\ORA90\CWMLITE01.DBF CWMLITE
D:\ORACLE\ORADATA\ORA90\DRSYS01.DBF DRSYS
D:\ORACLE\ORADATA\ORA90\INDX01.DBF INDX
D:\ORACLE\ORADATA\ORA90\ODM01.DBF ODM
D:\ORACLE\ORADATA\ORA90\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\ORA90\USERS02.DBF USERS
D:\ORACLE\ORADATA\ORA90\XDB01.DBF XDB
已选择9行。
SQL>
在对数据库做任何结构性的改动后,注意要做一次完整的数据库备份。
SQL> set linesize 1000
SQL> col file_name format a50
SQL> col tablespace_name format a30
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ----------------------------
-
D:\ORACLE\ORADATA\ORA90\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\ORA90\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\ORADATA\ORA90\CWMLITE01.DBF CWMLITE
D:\ORACLE\ORADATA\ORA90\DRSYS01.DBF DRSYS
D:\ORACLE\ORADATA\ORA90\INDX01.DBF INDX
D:\ORACLE\ORADATA\ORA90\ODM01.DBF ODM
D:\ORACLE\ORADATA\ORA90\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\ORA90\USERS02.DBF USERS
D:\ORACLE\ORADATA\ORA90\XDB01.DBF XDB
已选择9行。
SQL> alter tablespace users offline;
表空间已更改。
SQL>
使用操作系统命令修改数据文件名USERS02.DBF为USERS01.DBF。
SQL> alter tablespace users rename
2 datafile 'D:\ORACLE\ORADATA\ORA90\USERS02.DBF'
3 to 'D:\ORACLE\ORADATA\ORA90\USERS01.DBF'
4 ;
表空间已更改。
SQL>
SQL> alter tablespace users online;
表空间已更改。
SQL>
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- -----------------
-
D:\ORACLE\ORADATA\ORA90\SYSTEM01.DBF SYSTEM
D:\ORACLE\ORADATA\ORA90\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\ORADATA\ORA90\CWMLITE01.DBF CWMLITE
D:\ORACLE\ORADATA\ORA90\DRSYS01.DBF DRSYS
D:\ORACLE\ORADATA\ORA90\INDX01.DBF INDX
D:\ORACLE\ORADATA\ORA90\ODM01.DBF ODM
D:\ORACLE\ORADATA\ORA90\TOOLS01.DBF TOOLS
D:\ORACLE\ORADATA\ORA90\USERS01.DBF USERS
D:\ORACLE\ORADATA\ORA90\XDB01.DBF XDB
已选择9行。
SQL>
在对数据库做任何结构性的改动后,注意要做一次完整的数据库备份。
SQL> select file_name,file_id,tablespace_name from dba_data_files;
...
FILE_NAME FILE_ID TABLESPACE_NAME
-------------------------------------------------- ---------- ------------------------------
/u02/oradata_indx/indx01.dbf 23 INDX_TS
/u04/oradata_cecflob/cecflob08.dbf 24 CECFJS_TS
/u04/oradata_cecflob/cecflob09.dbf 25 CECFJS_TS
/u01/oradata_sys/.dbf 26 CECFLOB_TBS
...
# mv /u01/oradata_sys/.dbf /u04/oradata_cecflob/cecflob10.dbf
SQL> alter tablespace cecflob_tbs rename datafile '/u01/oradata_sys/.dbf' to
2 '/u04/oradata_cecflob/cecflob10.dbf';
Tablespace altered.
SQL>
SQL> alter tablespace cecflob_tbs online;
Tablespace altered.
SQL>
至此完成主数据库的修改。
SQL> SELECT NAME, SEQUENCE#, ARCHIVED, APPLIED
2> FROM V$ARCHIVED_LOG;
...
NAME SEQUENCE# ARC APP
-------------------------------------------------- ---------- --- ---
/u05/archive2/arch1_4160.arc 4160 YES YES
/u05/archive2/arch1_4161.arc 4161 YES YES
/u05/archive2/arch1_4162.arc 4162 YES YES
/u05/archive2/arch1_4163.arc 4163 YES YES
/u05/archive2/arch1_4164.arc 4164 YES YES
/u05/archive2/arch1_4165.arc 4165 YES YES
699 rows selected.
SQL>
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.
SQL>
SQL> shutdown
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL>
# mv /u01/oradata_sys/.dbf /u04/oradata_cecflob/cecflob10.dbf
SQL> startup nomount
ORACLE instance started.
Total System Global Area 2103413064 bytes
Fixed Size 743752 bytes
Variable Size 1040187392 bytes
Database Buffers 1056964608 bytes
Redo Buffers 5517312 bytes
SQL>
SQL> alter database mount standby database;
Database altered.
SQL>
注意:该命令必须是STANDBY_FILE_MANAGEMENT参数为MANUAL时才可执行,故如果该参数为AUTO,请先修改为MANUAL。
SQL> alter system set STANDBY_FILE_MANAGEMENT='MANUAL';
System altered.
SQL> alter database rename file '/u01/oradata_sys/.dbf'
2 to '/u04/oradata_cecflob/cecflob10.dbf';
Database altered.
SQL> alter system set STANDBY_FILE_MANAGEMENT='AUTO';
System altered.
SQL>
SQL> alter database recover managed standby database
2 disconnect from session;
Database altered.
SQL>
在对数据库做任何结构性的改动后,注意要做一次完整的数据库备份。