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/