Oracle12c新特性之在线迁移特性在生产数据库中实施应用过程

Oracle12c数据库新特性之在线迁移特性在生产数据库中实施应用过程

在巡检过程中,发现 44、45号数据文件创建路径不合理,存放在根目录下,随着业务量及数据文件的扩展,有可能导致根目录满而引起系统挂起的情况,属于隐患问题,需要及时处理。以下就是12c环境下在线迁移数据文件的过程。

首先登陆到 cdb命令行,查看44、45号文件,确认其路径。

SQL> select

file#,name from v$datafile where file# in (44,45);
     FILE# NAME
----------

----------------------------------------------------------------------
      44

/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda01.dbf
      45

/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda02.DBF
2 rows selected.
cdb下执行在线迁移
SQL> alter

database move datafile

'/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda01.dbf' to

'/oradata/apporacleoradataqyws_jkda01.dbf' keep;
alter database

move datafile '/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda01.dbf'

to '/oradata/apporacleoradataqyws_jkda01.dbf' keep
*
ERROR at line 1:
ORA-01516:

nonexistent log file, data file, or temporary file "44"

报出 ora-01516错误,根据提示,无法找到数据文件、日志文件、临时文件,在12c环境中,各个pdb之间及其与cdb之间,数据文件都是互相隔离的,所以此处出现该错误说明44号文件应该不存在cdb下,通过以下方式确定其所属那个数据库。

 


SQL> select file_name,file_id,con_id from cdb_data_files where file_id = 44;
 
FILE_NAME
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------   FILE_ID     CON_ID
---------- ----------
/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda01.dbf
      44      9
 
 
SQL> select file_name,file_id,con_id from cdb_data_files where file_id = 45;
 
FILE_NAME
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------   FILE_ID     CON_ID
---------- ----------
/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda02.DBF
      45      9

可以查到, 44号和45号数据文件所属pdb的con_id都是9,查看pdb


SQL> select pdb_name,status,con_id from cdb_pdbs where con_id = 9;
 
PDB_NAME                    STATUS        CON_ID
---------------------------------------- --------- ----------
QYWS_MYGH                      NORMAL       9


可以看到, 9号pdb为QYWS_MYGH,切换到QYWS_MYGH数据库下。


SQL> alter session set container= QYWS_MYGH;
 
Session altered.
 
SQL> select file#,name from v$datafile;
 
     FILE# NAME
---------- ----------------------------------------------------------------------
       4 /oradata/QYWSXXDB/datafile/o1_mf_undotbs1_d5ljrc20_.dbf
      41 /oradata/QYWSXXDB/448F174D916D03B1E055000000000001/datafile/o1_mf_syst
         em_d61zyly7_.dbf
 
      42 /oradata/QYWSXXDB/448F174D916D03B1E055000000000001/datafile/o1_mf_sysa
         ux_d61zyly8_.dbf
 
      43 /oradata/QYWSXXDB/448F174D916D03B1E055000000000001/datafile/o1_mf_qyws
         _myg_d61zz1vr_.dbf
 
      44 /u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda01.dbf
 
     FILE# NAME
---------- ----------------------------------------------------------------------
      45 /u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda02.DBF
 
6 rows selected.


可以确定 44、45号文件属于QYWS_MYGH数据库,及con_id为9的数据库。继续执行在线迁移任务,此处由于是生产数据库,考虑到数据安全问题,通过keep参数将原数据文件保留,迁移过程如下:


SQL> alter database move datafile '/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda01.dbf' to '/oradata/apporacleoradataqyws_jkda01.dbf' keep;
 
Database altered.
SQL> alter database move datafile '/u01/app/oracle/12.1.0/db/dbs/D:apporacleoradataqyws_jkda02.DBF' to '/oradata/apporacleoradataqyws_jkda02.DBF' keep;
 
Database altered.
迁移完成后,在pdb下查看确认迁移路径是否符合,如下。
SQL> select file#,name from v$datafile;
 
     FILE# NAME
---------- ----------------------------------------------------------------------
       4 /oradata/QYWSXXDB/datafile/o1_mf_undotbs1_d5ljrc20_.dbf
      41 /oradata/QYWSXXDB/448F174D916D03B1E055000000000001/datafile/o1_mf_syst
         em_d61zyly7_.dbf
 
      42 /oradata/QYWSXXDB/448F174D916D03B1E055000000000001/datafile/o1_mf_sysa
         ux_d61zyly8_.dbf
 
      43 /oradata/QYWSXXDB/448F174D916D03B1E055000000000001/datafile/o1_mf_qyws
         _myg_d61zz1vr_.dbf
 
      44 /oradata/apporacleoradataqyws_jkda01.dbf
 
     FILE# NAME
---------- ----------------------------------------------------------------------
      45 /oradata/apporacleoradataqyws_jkda02.DBF
 
6 rows selected.
 
SQL>


可以看到, 44、45号文件按照预期迁移到/oradata目录下,迁移比较顺利,在确保迁移后业务测试正常的情况下,记得将保留的原文件在系统层面进行删除。

总结:在 oracle12c之前的版本中,如果迁移数据文件,一般流程是offline数据文件à移动-àonline,而在12C版本的新特性中,仅通过一条ALTER DATABASE MOVE DATAFILE命令,不需要做任何offline或者数据库只能启动到mount的设置,直接移动,移动的同时数据库可以执行任何DDL\DML以及查询操作,而且在move过程中,可以进行重命名操作,避免了相当多的麻烦,非常的实用。

 


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

转载于:http://blog.itpub.net/31403259/viewspace-2136805/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值