DB:Oracle 11.2.0.4.0
方法一:datafile offline

(1) 修改路径前offline数据文件,影响被offline数据文件中数据的读取和修改,不影响同一表空间下其他online数据文件内数据的读取和修改。
(2) online datafile前,需要执行recover datafile操作,确保数据库处于归档模式下。

方法二:tablepace offline

(1) 修改路径前tablespace offline,影响offline tablespace下所有数据文件的读取和使用。
(2) online tablespace前,不需要执行recover tablespace操作。

方法三:restart instance
(1) 重启实例,影响所有操作。
方法四:ALTER DATABASE MOVE DATAFILE '原路径' TO '新路径';
(1) 12C开始支持在线修改数据文件路径,迁移过程中不影响数据使用。

方法一:datafile offline

查看数据库版本

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0    Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

创建表空间cjctbs

SQL> create tablespace cjctbs datafile '/u01/app/oracle11/oradata/chendb/cjctbs01.dbf' size 1m;
Tablespace created.

创建用户cjc并授权

SQL> create user cjc identified by cjc default tablespace cjctbs;
User created.
SQL> grant connect,resource,dba to cjc;
Grant succeeded.

查看数据文件信息

col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
USERS             /u01/app/oracle11/oradata/chendb/users01.dbf
UNDOTBS1         /u01/app/oracle11/oradata/chendb/undotbs01.dbf
SYSAUX             /u01/app/oracle11/oradata/chendb/sysaux01.dbf
SYSTEM             /u01/app/oracle11/oradata/chendb/system01.dbf
EXAMPLE          /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS             /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
6 rows selected.

创建测试数据

conn cjc/cjc
create table t1(id number,itime varchar2(200));
CREATE OR REPLACE PROCEDURE insert_pro is
begin
  for i in 1 .. 1000000 loop
    insert into t1 values (i, to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss'));
    commit;
  end loop;
end;
/
SQL> exec insert_pro();
BEGIN insert_pro(); END;
*
ERROR at line 1:
ORA-01653: unable to extend table CJC.T1 by 8 in tablespace CJCTBS
ORA-06512: at "CJC.INSERT_PRO", line 4
ORA-06512: at line 1
SQL> select count(*) from t1;
  COUNT(*)
----------
     26943

添加数据文件
模拟添加错路径

SQL> alter tablespace cjctbs add datafile '/home/oracle/cjctbs02.dbf' size 1m;
Tablespace altered.

查看数据文件信息

col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /home/oracle/cjctbs02.dbf
7 rows selected.

插入数据

SQL>  exec insert_pro();
BEGIN insert_pro(); END;
*
ERROR at line 1:
ORA-01653: unable to extend table CJC.T1 by 128 in tablespace CJCTBS
ORA-06512: at "CJC.INSERT_PRO", line 4
ORA-06512: at line 1

移动数据文件/home/oracle/cjctbs02.dbf到/u01/app/oracle11/oradata/chendb/cjctbs02.dbf

SQL> show user               
USER is "CJC"
SQL> select count(*) from t1;
  COUNT(*)
----------
     28946

离线cjctbs02.dbf 数据文件

alter database datafile 7 offline;

查看数据文件状态

select file_name, status, online_status from dba_data_files where tablespace_name='CJCTBS';
FILE_NAME                       STATUS    ONLINE_
-------------------------------------------------- --------- -------
/u01/app/oracle11/oradata/chendb/cjctbs01.dbf       AVAILABLE ONLINE
/home/oracle/cjctbs02.dbf               AVAILABLE RECOVER

查看控制文件中记录的数据文件检查点信息

SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
     1          2325667           925701
     2          2325667           925701
     3          2325667           925701
     4          2325667           925701
     5          2325667           953748
     6          2326617            0
     7          2364389            0
7 rows selected.

查看数据文件头检查点信息

select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#
---------- ------- --- --- ------------------
     1 ONLINE  NO  YES          2325667
     2 ONLINE  NO  YES          2325667
     3 ONLINE  NO  YES          2325667
     4 ONLINE  NO  YES          2325667
     5 ONLINE  NO  YES          2325667
     6 ONLINE  NO  YES          2326617
     7 OFFLINE YES YES          2364389
7 rows selected.

表空间状态

SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME      STATUS
-------------------- ---------
SYSTEM             ONLINE
SYSAUX             ONLINE
UNDOTBS1         ONLINE
TEMP             ONLINE
USERS             ONLINE
EXAMPLE          ONLINE
CJCTBS             ONLINE
7 rows selected.

查看v$recover_file

SQL> select *from v$recover_file;
     FILE# ONLINE  ONLINE_ ERROR                                CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- ---------
     7 OFFLINE OFFLINE                                    2364389 29-NOV-20

生成检查点

SQL> alter system checkpoint;
System altered.

查看数据文件头检查点信息

SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#
---------- ------- --- --- ------------------
     1 ONLINE  NO  YES          2366991
     2 ONLINE  NO  YES          2366991
     3 ONLINE  NO  YES          2366991
     4 ONLINE  NO  YES          2366991
     5 ONLINE  NO  YES          2366991
     6 ONLINE  NO  YES          2366991
     7 OFFLINE YES YES          2364389
7 rows selected.
SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
     1          2366991           925701
     2          2366991           925701
     3          2366991           925701
     4          2366991           925701
     5          2366991           953748
     6          2366991            0
     7          2364389            0
7 rows selected.

将数据文件移动到新路径
使用copy或rman都可以

RMAN> copy datafile '/home/oracle/cjctbs02.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf';
Starting backup at 29-NOV-20
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00007 name=/home/oracle/cjctbs02.dbf
output file name=/u01/app/oracle11/oradata/chendb/cjctbs02.dbf tag=TAG20201129T213347 RECID=33 STAMP=1057786427
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 29-NOV-20

查看文件已经拷贝

[oracle@cjcos01 arch]$ cd /u01/app/oracle11/oradata/chendb
[oracle@cjcos01 chendb]$ ll -rth
total 2.0G
-rw-r----- 1 oracle oinstall  51M Nov 29 17:04 redo01.log
-rw-r----- 1 oracle oinstall  51M Nov 29 17:04 redo02.log
-rw-r----- 1 oracle oinstall  21M Nov 29 18:04 temp01.dbf
-rw-r----- 1 oracle oinstall 751M Nov 29 21:31 system01.dbf
-rw-r----- 1 oracle oinstall 561M Nov 29 21:31 sysaux01.dbf
-rw-r----- 1 oracle oinstall 5.1M Nov 29 21:31 users01.dbf
-rw-r----- 1 oracle oinstall 201M Nov 29 21:31 undotbs01.dbf
-rw-r----- 1 oracle oinstall 314M Nov 29 21:31 example01.dbf
-rw-r----- 1 oracle oinstall 1.1M Nov 29 21:31 cjctbs01.dbf
-rw-r----- 1 oracle oinstall 1.1M Nov 29 21:33 cjctbs02.dbf
-rw-r----- 1 oracle oinstall  51M Nov 29 21:34 redo03.log
-rw-r----- 1 oracle oinstall 9.3M Nov 29 21:34 control01.ctl
-rw-r----- 1 oracle oinstall 9.3M Nov 29 21:34 control02.ctl

修改控制文件中记录的位置

SQL> alter database rename file '/home/oracle/cjctbs02.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf';
Database altered.

需要确保数据文件已经在新的路径下了,否则如下报错:

SQL> alter database rename file '/home/oracle/cjctbs02.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf';
alter database rename file '/home/oracle/cjctbs02.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01141: error renaming data file 7 - new file '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf' not found
ORA-01110: data file 7: '/home/oracle/cjctbs02.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

查看数据文件路径

SQL> col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;SQL> SQL> SQL>
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /u01/app/oracle11/oradata/chendb/cjctbs02.dbf
7 rows selected.

datafile位offline状态下无法查询数据

SQL> select count(*) from t1;
select count(*) from t1
*
ERROR at line 1:
ORA-00376: file 7 cannot be read at this time
ORA-01110: data file 7: '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf'

可以查询同一表空间下其他online状态的数据文件数据

SQL> select count(*) from t1 where rownum<=10;
  COUNT(*)
----------
    10
SQL> select count(*) from t1 where rownum<=100000000;
select count(*) from t1 where rownum<=100000000
                     *
ERROR at line 1:
ORA-00376: file 7 cannot be read at this time
ORA-01110: data file 7: '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf'

数据库处于归档模式

SQL> archive log list;
Database log mode           Archive Mode
Automatic archival           Enabled
Archive destination           /arch
Oldest online log sequence     40
Next log sequence to archive   42
Current log sequence           42

不能直接online数据文件

SQL> alter database datafile 7 online;
alter database datafile 7 online
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: '/u01/app/oracle11/oradata/chendb/cjctbs02.dbf'

恢复datafile

SQL> recover datafile 7;
Media recovery complete.

执行onlne datafile

SQL> alter database datafile 7 online;
Database altered.

查询测试数据

SQL> conn cjc/cjc
Connected.
SQL> select count(*) from t1;
  COUNT(*)
----------
     28946

查看数据文件信息

SQL> col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;SQL> SQL> SQL>
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /u01/app/oracle11/oradata/chendb/cjctbs02.dbf
7 rows selected.
SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
     1          2367288           925701
     2          2367288           925701
     3          2367288           925701
     4          2367288           925701
     5          2367288           953748
     6          2367288            0
     7          2367288            0
7 rows selected.
SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#
---------- ------- --- --- ------------------
     1 ONLINE  NO  YES          2367288
     2 ONLINE  NO  YES          2367288
     3 ONLINE  NO  YES          2367288
     4 ONLINE  NO  YES          2367288
     5 ONLINE  NO  YES          2367288
     6 ONLINE  NO  YES          2367288
     7 ONLINE  NO  YES          2367288
7 rows selected.
[oracle@cjcos01 ~]$ mv cjctbs02.dbf cjctbs02.dbf.bak

方法二:tablepace offline

添加数据文件
模拟添加错误位置

SQL> conn cjc/cjc
Connected.
SQL> alter tablespace cjctbs add datafile '/home/oracle/cjctbs03.dbf' size 1m;
Tablespace altered.

查看数据文件信息

SQL> col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;SQL> SQL> SQL>
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /u01/app/oracle11/oradata/chendb/cjctbs02.dbf
CJCTBS                  8 /home/oracle/cjctbs03.dbf
8 rows selected.

执行表空间offline

SQL> alter tablespace cjctbs offline;
Tablespace altered.

查看表空间状态

SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME      STATUS
-------------------- ---------
SYSTEM             ONLINE
SYSAUX             ONLINE
UNDOTBS1         ONLINE
TEMP             ONLINE
USERS             ONLINE
EXAMPLE          ONLINE
CJCTBS             OFFLINE
7 rows selected.

查看v$recover_file

SQL> select *from v$recover_file;
     FILE# ONLINE  ONLINE_ ERROR                                CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- ---------
     6 OFFLINE OFFLINE OFFLINE NORMAL                                  0
     7 OFFLINE OFFLINE OFFLINE NORMAL                                  0
     8 OFFLINE OFFLINE OFFLINE NORMAL                                  0

查看数据文件头信息

SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#
---------- ------- --- --- ------------------
     1 ONLINE  NO  YES          2367431
     2 ONLINE  NO  YES          2367431
     3 ONLINE  NO  YES          2367431
     4 ONLINE  NO  YES          2367431
     5 ONLINE  NO  YES          2367431
     6 OFFLINE                0
     7 OFFLINE                0
     8 OFFLINE                0
8 rows selected.
SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
     1          2367431           925701
     2          2367431           925701
     3          2367431           925701
     4          2367431           925701
     5          2367431           953748
     6          2367562            0
     7          2367562            0
     8          2367562            0
8 rows selected.

无法查询offline tablespace下所有数据

SQL> select count(*) from t1;
select count(*) from t1
*
ERROR at line 1:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: '/u01/app/oracle11/oradata/chendb/cjctbs01.dbf'
SQL> select count(*) from t1 where rownum<=10;
select count(*) from t1 where rownum<=10
                     *
ERROR at line 1:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: '/u01/app/oracle11/oradata/chendb/cjctbs01.dbf'
SQL> select * from t1;
select * from t1
              *
ERROR at line 1:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: '/u01/app/oracle11/oradata/chendb/cjctbs01.dbf'

拷贝数据文件到新位置

[oracle@cjcos01 ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Sun Nov 29 21:47:38 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: CHENDB (DBID=1831901477)
RMAN> copy datafile '/home/oracle/cjctbs03.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs03.dbf';
Starting backup at 29-NOV-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=58 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00008 name=/home/oracle/cjctbs03.dbf
output file name=/u01/app/oracle11/oradata/chendb/cjctbs03.dbf tag=TAG20201129T214814 RECID=34 STAMP=1057787294
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 29-NOV-20

修改控制文件记录的数据文件位置

SQL> alter database rename file '/home/oracle/cjctbs03.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs03.dbf';
Database altered.

online表空间
不需要执行recover操作

SQL> alter tablespace cjctbs online;
Tablespace altered.

查询数据

SQL> select count(*) from t1;
  COUNT(*)
----------
     28946

查看下数据文件信息

SQL> col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;SQL> SQL> SQL>
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /u01/app/oracle11/oradata/chendb/cjctbs02.dbf
CJCTBS                  8 /u01/app/oracle11/oradata/chendb/cjctbs03.dbf
8 rows selected.

查询表空间信息

SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME      STATUS
-------------------- ---------
SYSTEM             ONLINE
SYSAUX             ONLINE
UNDOTBS1         ONLINE
TEMP             ONLINE
USERS             ONLINE
EXAMPLE          ONLINE
CJCTBS             ONLINE
7 rows selected.
SQL> select *from v$recover_file;
no rows selected
SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
     FILE# STATUS  REC FUZ CHECKPOINT_CHANGE#
---------- ------- --- --- ------------------
     1 ONLINE  NO  YES          2367431
     2 ONLINE  NO  YES          2367431
     3 ONLINE  NO  YES          2367431
     4 ONLINE  NO  YES          2367431
     5 ONLINE  NO  YES          2367431
     6 ONLINE  NO  YES          2367730
     7 ONLINE  NO  YES          2367730
     8 ONLINE  NO  YES          2367730
8 rows selected.
SQL>  select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
     FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
     1          2367431           925701
     2          2367431           925701
     3          2367431           925701
     4          2367431           925701
     5          2367431           953748
     6          2367730          2367562
     7          2367730          2367562
     8          2367730          2367562
8 rows selected.

方法三:restart instance

添加数据文件
模拟添加错误位置

SQL> alter tablespace cjctbs add datafile '/home/oracle/cjctbs05.dbf' size 1m;
Tablespace altered.

查看数据文件信息

SQL> col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;SQL> SQL> SQL>
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /u01/app/oracle11/oradata/chendb/cjctbs02.dbf
CJCTBS                  8 /u01/app/oracle11/oradata/chendb/cjctbs03.dbf
CJCTBS                  9 /home/oracle/cjctbs05.dbf
9 rows selected.

停止实例

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

启动数据库到mout

SQL> startup mount
ORACLE instance started.
Total System Global Area  726540288 bytes
Fixed Size            2256792 bytes
Variable Size          448790632 bytes
Database Buffers      272629760 bytes
Redo Buffers            2863104 bytes
Database mounted.

拷贝数据文件到新位置

[oracle@cjcos01 ~]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Sun Nov 29 22:22:23 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: CHENDB (DBID=1831901477, not open)
RMAN> copy datafile '/home/oracle/cjctbs05.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs05.dbf';
Starting backup at 29-NOV-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00009 name=/home/oracle/cjctbs05.dbf
output file name=/u01/app/oracle11/oradata/chendb/cjctbs05.dbf tag=TAG20201129T222227 RECID=35 STAMP=1057789348
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 29-NOV-20

修改控制文件记录的数据文件位置

SQL> alter database rename file '/home/oracle/cjctbs05.dbf' to '/u01/app/oracle11/oradata/chendb/cjctbs05.dbf';
Database altered.

启动数据库

SQL> alter database open;
Database altered.

查看数据文件信息

SQL> col file_name for a50
col tablespace_name for a20
set line 200
select tablespace_name,file_id,file_name from dba_data_files order by 2;SQL> SQL> SQL>
TABLESPACE_NAME     FILE_ID FILE_NAME
-------------------- ---------- --------------------------------------------------
SYSTEM                  1 /u01/app/oracle11/oradata/chendb/system01.dbf
SYSAUX                  2 /u01/app/oracle11/oradata/chendb/sysaux01.dbf
UNDOTBS1              3 /u01/app/oracle11/oradata/chendb/undotbs01.dbf
USERS                  4 /u01/app/oracle11/oradata/chendb/users01.dbf
EXAMPLE               5 /u01/app/oracle11/oradata/chendb/example01.dbf
CJCTBS                  6 /u01/app/oracle11/oradata/chendb/cjctbs01.dbf
CJCTBS                  7 /u01/app/oracle11/oradata/chendb/cjctbs02.dbf
CJCTBS                  8 /u01/app/oracle11/oradata/chendb/cjctbs03.dbf
CJCTBS                  9 /u01/app/oracle11/oradata/chendb/cjctbs05.dbf
9 rows selected.

方法四:ALTER DATABASE MOVE DATAFILE '原路径' TO '新路径';

12C开始,简化了修改数据文件路径的方法,减少了修改路径过程中造成的数据不可用问题。
http://blog.itpub.net/29785807/viewspace-2565008/
例如:

ALTER DATABASE MOVE DATAFILE '/home/oracle/cjctbs06.dbf' TO '/u01/app/oracle11/oradata/chendb/cjctbs06.dbf';

转载自chenoracle

最后修改:2022 年 02 月 28 日
如果觉得我的文章对你有用,请随意赞赏