ITPub博客

首页 > 数据库 > 数据库开发技术 > 利用offline datafile文件方式迁移数据

利用offline datafile文件方式迁移数据

原创 数据库开发技术 作者:space6212 时间:2019-06-10 18:12:07 0 删除 编辑
我们可能经常遇到这样的情况:
1. 因为存储需要调整,所以需要暂时把部分数据文件从一个存储迁移到另一个存储上
2. 随时时间的转移,原来的热点数据变成历史数据,需要这部分数据从好的设备转移到归档设备上

我们的选择有多种:
1. move table
这种方法的优点是对业务影响较小,几乎可以联机做。但如果对象很多,会比较麻烦,而且还需要重建索引。


2. 直接把数据文件转移
如果数据库可以停机,则是最简单的,但用户一般难以承受完全的停机操作。所以需要找一个折中的办法。
如果这部分数据比较独立、或者不太重要,用户愿意承受操作期间的部分业务的不可用,则可以考虑用offline datafile然后移动的方法去操作。
[@more@]----------------------------
此种方法的具体步骤是:
1) 数据文件offline

SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATAORA10GSUK.DBF' offline;

数据库已更改。

2) 拷贝数据文件到新路径
可以cp/dd/rman都可以,步骤不再赘述

3) 重命名数据文件
SQL> alter database rename file 'E:ORACLEPRODUCT10.2.0ORADATAORA10GSUK.DBF' to 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';

数据库已更改。
--数据文件必须是offline的状态才可以在数据库打开状态下rename名称

4) 恢复数据文件

SQL> recover datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
完成介质恢复。

5) 重新online数据文件

SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' online;

数据库已更改。

此时,所有步骤完成!


----------------------------
用这种方法有两个疑虑:

1. 如果有会话一直在数据文件上的对象进行查询,是否可以offline?
可以。证明步骤如下:

create table T(a int);
insert into T values(1);
commit;

DECLARE
I INTEGER;
BEGIN
WHILE 1 = 1 LOOP
SELECT A INTO I FROM T;
END LOOP;
END;
/

上面的语句可以模拟一直有活动查询,我来试试是否可以offline:
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' offline;

数据库已更改。

数据库offline后,上面的查询会报错:
ORA-00376: 此时无法读取文件 7
ORA-01110: 数据文件 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'

可以看到,在这种情况下,数据文件可以被offline。

2. 如果一直有活动事物,是否可以offline?
可以。证明步骤如下:

SQL> delete from T;

1 row deleted

数据删除后一直不提交,则表示一直有活动事物。尝试offline成功!

SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' offline;

数据库已更改。
SQL> recover datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
完成介质恢复。
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' online;

数据库已更改。

此时因为事物没有提交,所以数据文件online后表中的数据仍然存在。



需要注意的是:

1. datafile offline会触发dbwn把buffer中相关的数据刷新到数据文件中,刷新完成后,数据文件才能被offline
2. 数据文件被offline后,数据库内任何对这些文件的读写操作都会失败
3. 一个事务可以在offline前执行,在offline后再提交,前提是操作都发生在同一个会话中。
4. 被offline的数据文件被online前,必须做recover操作,如果对应的归档不存在导致recover失败,则无法online这个数据文件。

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

请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    226939