迁移数据
注意事项:
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 alter table t1_tb1 add constraint pk_t1 primary key(object_id); alter table t2_tb2 add constraint fk_t2 foreign key(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
同时检查tb1和tb2时候,发现两个表空间之间的冲突没有了,但是主键索引冲突又来了。Tb1和users之间的主键索引冲突又出现了。
4.连接conn
yzpp/yzpp
create index idx_t1_tb1 on t2_tb2(object_id) tablespace tb1; |
因此对于自包含问题,有两种解决方法
|--删除索引或者外键,让表空间自包含
|--表空间同时传输
5.解决完成自包含以后,将表空间设置成只读状态
conn /as sysdba 创建一个表空间 create tablespace tb3 datafile 切换用户 conn yzpp/yzpp 创建一个表 create table t3_tb3 tablespace tb3 as 切换用户 create table t4_tb3 tablespace tb3 as 切换系统用户状态 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 select 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 format |
5、以传输表空间模式(transport_tablespace=y)将表空间的元数据和目标平台上的数据文件导入到数据库中
6、将导入的表空间设置为读写模式