Oracle单实例移动数据文件的几种方法


目录

一、未开启归档情况下移动单个数据文件

方法一:此方法在数据库未开启归档的情况下想要移动数据文件,数据库需要重启一次,业务需要暂停。

需求:将数据文件/u01/app/oracle/orcl/cdr01.dbf 移到到/u01/oradata/cdr01.dbf

第一步:关闭数据库

sys@ORCL>shutdown immeidate;

第二步:在系统层面移动数据文件

[oracle@hisdb orcl]$ mv/cp cdr01.dbf /u01/oradata/
[oracle@hisdb oradata]$ ls
cdr01.dbf

第三步:启动数据库到mount状态

sys@ORCL>startup mount;
ORACLE 例程已经启动。

Total System Global Area  768294912 bytes
Fixed Size		    2257192 bytes
Variable Size		  473960152 bytes
Database Buffers	  289406976 bytes
Redo Buffers		    2670592 bytes
数据库装载完毕。

第四步:在数据库中rename移动的数据文件

sys@ORCL>alter database rename file '/u01/app/oracle/orcl/cdr01.dbf' to '/u01/oradata/cdr01.dbf';

数据库已更改。

第五步:将数据库打开到open

sys@ORCL>alter database open;

数据库已更改。

sys@ORCL>select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/orcl/system01.dbf
/u01/app/oracle/orcl/sysaux01.dbf
/u01/app/oracle/orcl/undotbs01.dbf
/u01/app/oracle/orcl/users01.dbf
/u01/oradata/cdr01.dbf
/u01/app/oracle/orcl/retest01.dbf
/u01/app/oracle/orcl/zongzi01.dbf

已选择7行。

下面是之前所有数据文件的位置,与上面对比数据文件已经移动成功,可再重启一下数据库验证。

sys@ORCL>select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/orcl/system01.dbf
/u01/app/oracle/orcl/sysaux01.dbf
/u01/app/oracle/orcl/undotbs01.dbf
/u01/app/oracle/orcl/users01.dbf
/u01/app/oracle/orcl/cdr01.dbf
/u01/app/oracle/orcl/retest01.dbf
/u01/app/oracle/orcl/zongzi01.dbf

方法二:通过offline相关表空间的方法
需求:将数据文件/u01/app/oracle/orcl/retest01.dbf移动到 /u01/oradata/retest01.dbf

第一步:将相关表空间offline

sys@ORCL>alter tablespace retest offline;

表空间已更改。

第二步:rename被移动的数据文件

sys@ORCL>alter database rename file '/u01/app/oracle/orcl/retest01.dbf' to '/u01/oradata/retest01.dbf';

数据库已更改。

第三步:将之前offline的表空间online

sys@ORCL>alter tablespace retest online;

表空间已更改。

二、开启归档情况下移动单个数据文件

需求:将数据文件/u01/oradata/retest01.dbff移动到 /u01/app/oracle/orcl/retest01.db

上面的方法一、方法二均适用

方法三:offline数据文件,必须在归档模式下

第一步:将要移动的数据文件offline

sys@ORCL>alter database datafile '/u01/oradata/retest01.dbf' offline;
或者
sys@ORCL>alter database datafile 6 offline;

第二步:移动数据文件(可在系统层面也可用rman copy)

RMAN> copy datafile 6 to '/u01/app/oracle/orcl/retest01.dbf';

启动 backup 于 21-2月 -2022 16:29:13
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00006 名称=/u01/oradata/retest01.dbf
输出文件名=/u01/app/oracle/orcl/retest01.dbf 标记=TAG20220221T162913 RECID=7 STAMP=1097252954
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 21-2月 -2022 16:29:14

第三步:用rman转换数据文件,等同于rename

RMAN> switch datafile 6 to copy;

数据文件 6 已切换成数据文件副本 "/u01/app/oracle/orcl/retest01.dbf"

第三步:恢复数据文件

RMAN> recover datafile 6;

启动 recover 于 21-2月 -2022 16:31:26
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2

正在开始介质的恢复
介质恢复完成, 用时: 00:00:00

完成 recover 于 21-2月 -2022 16:31:26

第四步:将数据文件online

sys@ORCL>alter database datafile 6 online;

数据库已更改。

三、开启归档情况下移动多个数据文件

大量数据文件移动,适用于在新创建数据库时,数据文件目录未写到存储目录中,后期需要移动。

第一步:新建数据文件目录并赋权(存储目录)

root#mkdir orcl
root#chown -R oracle:oinstall /data 

第二步:关闭数据库

sql>shutdown immediate;  

第三步:移动数据文件

$cd /u01/app/oracle/oradata/orcl            
$ls
$cd ..
$nohup cp -rf orcl /data/oradata/ &            第三步将orcl数据文件夹复制到新的数据文件目录(是复制不是mv)后台拷贝
$cd /data/oradata/orcl
$while true
>do
>du -sh
>sleep 10
>done
拷贝观察,等待拷贝结束
拷贝结束后,将原有数据文件做备份,防止操作失误,可继续使用原有数据文件
$cd /u01/app/oracle/oradata/
$mv orcl orcl.bak

第四步:启动数据库到mount,因为控制文件目录和数据文件在同一目录,所以移动数据文件目录后需要修改控制文件路径参数。

SQL> startup mount               启动到mount,查看控制文集目录
ORACLE instance started.

Total System Global Area 6.0930E+10 bytes
Fixed Size		    2268112 bytes
Variable Size		 3.0333E+10 bytes
Database Buffers	 3.0467E+10 bytes
Redo Buffers		  127143936 bytes
ORA-00205: error in identifying control file, check alert log for more info


SQL> show parameter control;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time	     integer	 7
control_files			     string	 /u01/app/oracle/oradata/orcl/c
						 ontrol01.ctl, /u01/app/oracle/
						 oradata/orcl/control02.ctl
control_management_pack_access	     string	 DIAGNOSTIC+TUNING
SQL> alter system set control_files='/oradata/dbserver/control01.ctl','/oradata/dbserver/control02.ctl' scope=spfile;

System altered.  

第五步:批量rename数据文件

sql>set line 200 pages 9999
select 'alter database rename file '''||name||''' to ''/home/oracle/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$datafile
union all
select 'alter database rename file '''||name||''' to ''/home/oracle/oradata'||substr(name,length(name)-INSTR(reverse(name),'/')+1,INSTR(reverse(name),'/'))||''';' from v$tempfile
union all
select 'alter database rename file '''||member||''' to ''/data/oradata/orcl'||substr(member,length(member)-INSTR(reverse(member),'/')+1,INSTR(reverse(member),'/'))||''';' from v$logfile;
---------------------alter database rename-------------------------
alter database rename file '/home/oracle/oradata/dbserver/system01.dbf' to '/oradata/dbserver/system01.dbf';
alter database rename file '/home/oracle/oradata/dbserver/sysaux01.dbf' to '/oradata/dbserver/sysaux01.dbf';
alter database rename file '/home/oracle/oradata/dbserver/undotbs01.dbf' to '/oradata/dbserver/undotbs01.dbf';
alter database rename file '/home/oracle/oradata/dbserver/users01.dbf' to '/oradata/dbserver/users01.dbf';
alter database rename file '/home/oracle/oradata/dbserver/temp01.dbf' to '/oradata/dbserver/temp01.dbf';
alter database rename file '/home/oracle/oradata/dbserver/redo01.log' to '/oradata/dbserver/redo01.log';
alter database rename file '/home/oracle/oradata/dbserver/redo02.log' to '/oradata/dbserver/redo02.log';
alter database rename file '/home/oracle/oradata/dbserver/redo03.log' to '/oradata/dbserver/redo03.log';

第六步:打开数据库到open

sql>alter database open;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值