码迷,mamicode.com
首页 > 其他好文 > 详细

EXP/IMP迁移数据

时间:2016-01-28 10:44:10      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:

迁移数据

注意事项:

Log= 加这个是为了看有没有导入成功。这个导入导出是会100%丢失数据的。这个只能当迁移,不能做为备份。

Buffer=把这个放大,一般10M,这个是为了提速的

Rows=n 不导数据

字体集NLS 这个是必须要设置的。

数据坏了显示方式:??列宽度不够,这个是立刻报错的。我就知道迁移失败了

Select * from v$nls_database_parameters;

Exp  system/sys  file=/oracle/qyl.dmp  owner=qyl  log=/tmp/qyl.log

空间的问题

在导出时最好先将表挪动到其它表空间然后再进行导出导入。再导出数据要确定导入的表空间是不是和导出的是一样的

异构平台迁移:问的一些问题

1.平台是不是一样

2.版本是什么样的了 9i 10g  11g 可以知道用什么软件

3.数据量     3T

4.停机时间   比如5

 

往目标机导入数据:先建表空间再建用户  然后再导入数据

 

使用参数文件进行导出

只能导出表这些

1.用命令先查出大表

1---20个大表,一个一个写

2.编写脚本

21个脚本,剩下的小表一次导完      Director=y 直接导出,提速的

大表一个一个导,最后剩下的全部

22个脚本最后运行

3.空用户导出

 

导入

导出按用户,导入可以单独按用户导入。可以只导入一个表

EXP 导出 IMP 导入

注意事项:

File 放到哪  from 用户A

加提交=y 确保提交成功

Undo表空间

源端是普通表,目标端是分区表,那么我们要用:忽略=Y,先建分区,导入数据然后建索引

索引记录是要排序的

 

导入一个大表的话,一定要先导入数据,然后再建索引

建立索引,加一个并发。根据CPU个数。少于几个就行

 

技术分享

然后就是加LOG,这个是一定要的

 

ORACLE最耗资源就是回滚

 

11g导出到导入目标,会出现不能用。有个段的新特性延迟分配

 

技术分享

 

11G 密码过期是半年,在pfile中加admin  审计关掉没有。占用空间。把表空间TRUNCK.

 

使用db_link会报错:无效SCN错误,

 

数据泵导入导出

并发可以5—10

文件一般是50—200G之间

导出文件个数控制在100个之内。不能超过99个。开并发

技术分享

技术分享

Oradim –new –sid test 添加实例删除实例

 

平台版本不一样,高的打开低的,一定要用升级的方式打开。

技术分享

 

关闭审计

Select count(*) from aud$

Truncate table aud$;

 

高版本挂低本的库,一定要用upgrade升级模式打开。然后运行@/rdbms/admin/catupgrd.sql

如果这个时候报错ORA—00904:‘TZ_VERSION错误,那是因为里面有一个文件少了一行,我们可以加上,错误如下图所示:

1) If the registry$database table does not get created by the Pre-Upgrade Script,then it may be created using the below SQL statement:

SQL> ‘CREATE TABLE registry$database(
platform_id NUMBER,
platform_name VARCHAR2(101),
edition VARCHAR2(30),
tz_version NUMBER
)‘;

2) Then manually insert the Platform DST Patch information using the below SQL statement:

SQL> ‘INSERT into registry$database
(platform_id, platform_name, edition, tz_version)
VALUES ((select platform_id from v$database),
(select platform_name from v$database),
NULL,
(select version from v$timezone_file))‘;

 

技术分享

技术分享

 

1.1  实验:

 

1.1.1数据库导出

先编写一个脚本如下:

userid=system/oracle

buffer=10000

file=i:\bk\full.dmp

log=i:\bk\full.log

feedback=1000

full=y

然后exp parfile=参数文件名

 1.1.2表空间导出

有些受保护的表是不能导出的,会出错误警告。可能是因为是逻辑导出,所以加了指定导出路径方式

userid=system/oracle

buffer=10000

file=1.dmp

log=1.log

feedback=100

tablespaces=users

direct=y 

 

1.1.3传输表空间

使用生产用户建表

1.用户创建

create user yzpp identified by yzpp;

  grant resource,connect,unlimited tablespace to yzpp;

  conn yzpp/yzpp

 2.表空间创建

create table t1_tb1 tablespace tb1 as select object_id,object_name from user_objects;

  create table t2_tb2 tablespace tb2 as select object_id,object_name from user_objects where 1=2;

  alter table t1_tb1 add constraint pk_t1 primary key(object_id);

  alter table t2_tb2 add constraint fk_t2 foreign key(object_id) references t1_tb1(object_id);

 3.执行主键约束性检查,自包含情况 

execute dbms_tts.transport_set_check(‘tb2‘,incl_constraints=>true);

  select * from transport_set_violations;

 

execute dbms_tts.transport_set_check(‘tb2‘,incl_constraints=>false);

  改为FALSE后没有错误出现

 

execute dbms_tts.transport_set_check(‘tb1,tb2‘,incl_constraints=>true);

  select * from transport_set_violations;

   错误提示:Constraint FK_T2 between table YZPP.T1_TB1 in tablespace TB1 and table YZPP.T2_TB2 in tablespace TB2

   同时检查tb1tb2时候,发现两个表空间之间的冲突没有了,但是主键索引冲突又来了。Tb1users之间的主键索引冲突又出现了。

 4.连接conn yzpp/yzpp

 

create index idx_t1_tb1 on t2_tb2(object_id) tablespace tb1;

 因此对于自包含问题,有两种解决方法

|--删除索引或者外键,让表空间自包含

|--表空间同时传输

 5.解决完成自包含以后,将表空间设置成只读状态

conn /as sysdba

创建一个表空间

create tablespace tb3 datafile ‘/oradata2/xg/tb3,dbf‘ size 5M;

切换用户

conn yzpp/yzpp

创建一个表

create table t3_tb3 tablespace tb3 as select * from user_objects;

切换用户

create table t4_tb3 tablespace tb3 as select * from user_objects;

切换系统用户状态

conn / as sysdba

把表空间TB3修改为只读状态

alter tablespace tb3 read only;

 现在进行传输表空间模式的导出,必须以sysdba权限登陆数据库

6.导出

 如果是unix或者linux,需要进行转义

exp  \‘/ as sysdba\‘ file=tb3.dmp transport_tablespace=y tablespaces=tb3

 LIUNX参数脚本编写如下:

vi tb3.txt

userid=\‘/ as sysdba\‘

buffer=10000

log=tablespace.log

file=tb3.dmp

transport_tablespace=y

tablespaces=tb3

feedback=50

 

如果是在不同的平台进行表空间传输,那么还要这两个平台进行查询,看它们的edian是不是一样的,如果不一样,是要转换才能进行导入。建议在目标端进行转换,这样可以节约源端表空间下线时间还有系统性能

==>能够进行转换的平台查询<==

set pages 100

col platform_name for a35

select platform_name,endian_format from v$transportable_platform order by 2,1;

 

PLATFORM_NAME                       ENDIAN_FO

----------------------------------- ---------

AIX-Based Systems (64-bit)          Big

Apple Mac OS                        Big

HP-UX (64-bit)                      Big

HP-UX IA (64-bit)                   Big

IBM Power Based Linux               Big

IBM zSeries Based Linux             Big

Solaris[tm] OE (32-bit)             Big

Solaris[tm] OE (64-bit)             Big

Apple Mac OS (x86-64)               Little

HP IA Open VMS                      Little

HP Open VMS                         Little

HP Tru64 UNIX                       Little

Linux IA (32-bit)                   Little

Linux IA (64-bit)                   Little

Linux x86 64-bit                    Little

Microsoft Windows IA (32-bit)       Little

Microsoft Windows IA (64-bit)       Little

Microsoft Windows x86 64-bit        Little

Solaris Operating System (x86)      Little

Solaris Operating System (x86-64)   Little

 

==>当前数据库所在平台查询<==

select a.platform_name,b.endian_format from v$database a,v$transportable_platform b where a.platform_name=b.platform_name;

      

在进行转换之前,我们必须确保满足以下的条件

1、源数据库和目标数据库的初始化参数compatible必须设置为10.0.0或以上

2、数据文件头部必须是平台认知(platform-aware)的

 

进行数据文件平台转换工作时,按照下面的步骤完成

1、把要传输的表空间设置为只读状态

2、以传输表空间模式(transport_tablespace=y)将表空间的元数据导出到转储文件

3、判断源数据库和目标数据库所在的平台是否是相同的endian,如果相同,直接将导出和数据文件一起发送到目标平台上,如果不同,需要进行endian的转换。

4、转换数据文件格式(既可以在源数据库上完成,也可以在目标数据库上完成)

例如我们需要将users表空间从aix平台转换到windows平台

1、在源数据库完成

       启动rman,与源数据库建立连接

RMAN>convert tablespace users to platform ‘Microsoft Windows IA (64-bit)’

       format ‘/u01/trans/%N_%f’;

执行完成该命令以后,RMAN会将users表空间里所有的数据文件转换为windows平台的little-endian格式并将这些文件放在/u01/trans目录下,然后我们就可以将这些数据文件、转储文件一起发送到目标平台。

2、可以先不进行转换,而是直接将数据文件从源平台发送到目标平台上去,然后在目标平台上再进行转化

RMAN>convert datafile ‘d:\trans\users_4’

       from paltform ‘AIX-Based Systems(64-bit)’

       format ‘d:\users_%f’;

5、以传输表空间模式(transport_tablespace=y)将表空间的元数据和目标平台上的数据文件导入到数据库中

6、将导入的表空间设置为读写模式

 





EXP/IMP迁移数据

标签:

原文地址:http://www.cnblogs.com/miaoxg/p/5165269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!