方法一:此方法在数据库未开启归档的情况下想要移动数据文件,数据库需要重启一次,业务需要暂停。
需求:将数据文件/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 infoSQL> show parameter control;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/l, /u01/app/oracle/oradata/l
control_management_pack_access string DIAGNOSTIC+TUNING
SQL> alter system set control_files='/oradata/l','/oradata/l' 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;
本文发布于:2024-01-29 09:36:20,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649218314358.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |