oracle数据库迁移到新服务器_oracle库对库迁移数据

2022-11-01 16:20:06 浏览数 (1)

一、创建用户

1.1 步骤

1.2 注意事项

二、处理空表

(1)描述

Oracle11g中的新特性,当一个表中的数据为0时不分配segment,所以就不能够被导出。

(2)解决方法

方法一:

先insert一条数据,再rollback就产生segment了,该方法是在空表中先插入一条数据,再删除就 产生segment了,执行exp或者expdp时就可以导出了此空表了。

方法二:

修改 deferred_segment_creation 参数,该参数默认为TRUE,当修改为FALSE时,无论是空表还是非空表都分配segment,修改语句为:

alter system set deferred_segment_creation=false scope=both;

注意:该值设置之后对于以前导入的空表是不产生作用的,仍不能导出,只能对后面新增的表产生作用,如需导出之前的空表只能使用方法一。

方法三:

使用下面SQL查找空表,把查询结果导出,执行导出的语句,强行修改segment值,然后再执行导出语句,则可以导出空表。

代码语言:javascript复制
select 'alter table '||table_name||' allocate extent;' 
from user_tables 
where num_rows=0 or num_rows is null;

(3)总结

方法一在表很多的时候不实际,方法二最好用在数据库刚创建时,方法三在实际中最常用。

三、使用传统方式进行迁移

2.1 步骤

(1)处理空表

代码语言:javascript复制
select 'alter table '||table_name||' allocate extent;' 
from user_tables 
where num_rows=0 or num_rows is null;

(2)数据库备份

代码语言:javascript复制
exp username/password@service file=filename.dmp;

(3)数据库导入

代码语言:javascript复制
imp username/password@service file=filename.dmp full=y ignore=y;

四、使用数据泵方式进行迁移

3.1 步骤

(1)处理空表

代码语言:javascript复制
select 'alter table '||table_name||' allocate extent;'
from user_tables 
where num_rows=0 or num_rows is null

(2)数据库备份

代码语言:javascript复制
sqlplus clean/clean@orcl as sysdba;
create directory dpdata1 as 'd:dump';
grant read,write on directory dpdata1 to clean;
quit
expdp flow/flow@flow directory=dpdata1 dumpfile=20200401.DMP logfile=20200401.log schemas=USER;

(3)数据库导入

代码语言:javascript复制
sqlplus flow/flow@flow as sysdba;
create directory dpdata1 as 'd:dump';
grant read,write on directory dpdata1 to flow;
quit
impdp flow/flow@flow directory=dpdata1 dumpfile=20200401.DMP REMAP_SCHEMA=BPM_SAAS:flow EXCLUDE=USER;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179593.html原文链接:https://javaforall.cn

0 人点赞