以前做过的数据迁移都是同平台的,跨平台迁移的数据量一般也不大,不知道跨平台迁移大数据库时有没有比较好的办法,比如下面的案例:
源数据库:windows ;oracle 9 i
目标数据库:linux ;oracle 9i(版本同上)
数据库大小:exp导出后的导出文件不小于40g
时间限制:小于6小时导入导出方式一定可以实现迁移,但是6个小时的时间肯定不够;
不知道冷备在跨平台时还能用不,或者还有没有别的办法
源数据库:windows ;oracle 9 i
目标数据库:linux ;oracle 9i(版本同上)
数据库大小:exp导出后的导出文件不小于40g
时间限制:小于6小时导入导出方式一定可以实现迁移,但是6个小时的时间肯定不够;
不知道冷备在跨平台时还能用不,或者还有没有别的办法
解决方案 »
- 11gLinux 32位 安装后 sqlplus 用不了
- 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增
- 怎样在access用ODBC加载数据库
- 问一个联合查询的SQL
- 怎样输入""才能使得下面存储过程正确执行,请高手帮忙。
- 我写好了Pro*C的代码,那怎么编译她??
- 怎样用SQL得出时分秒?
- 欢迎大家来讨论异种数据库的同步更新问题
- oracle9i 执行sql 错误,导致服务器cpu使用率 100% .
- ORA-12154: TNS:could not resolve the connect identifier specified
- 急!ORACLE9里面有没有为视图创建索引的功能?(高分相送)
- 怎样在c#中用函数取数据库中表的名称、字段的名称和属性的啊。
导出:mknod temp.dmp p
compress < temp.dmp > BK.dmp.Z &
exp user/pass@bill file=temp.dmp log=exp.log
rm temp.dmp
导入:mknod temp.dmp p
uncompress < BK.dmp.Z > temp.dmp &
imp user/pass fromuser=aaa touser=xxx file=temp.dmp BUFFER=3072000 grants=N indexes=N ignore=y CONSTRAINTS=N log=imp_old.log
rm temp.dmp
另外,导出前可以将一些无用的大的临时表删除。
1 使表空间为只读: alter tablespace users read only;
2 导出表空间。在操作系统提示符下执行: exp tablespaces=users transport_tablespace=y file=exp_ts_users.dmp
exp_ts_users.dmp 文件只包含元数据(不是表空间 USERS 的内容)因此它将非常小。
3 在10g目标服务器上转化文件格式4 导入表空间
2. 使用RMAN,但对目标数据库的性能要求很高.
1 关数据库,把所有redo log/datafile/spfile/全部拷贝过去。
2 把源库的controlfile trace出来。
3 在linux下建一个相同的实例,修改spfile重新指定controlfile位置。
4 修改controlfile trace文件,重新指定每个文件的位置。
5 在linux下找一个已有数据库的datafile ooo,要求块大小一样的。用dd命令把所有数据文件的第一个块用linux下的那个文件的代替:dd infile=ooo outfile=... blocksize=8k(块大小) count=1。dd的参数记不清,具体用的时候查下。
6 重建controlfile,打开数据库
7 如果打不开,就open到mount
8 recovery database
9 alter database open resetlogs;
7、8、9 可能不需要,如果能直接打开的话,原理:
1 32位的linux和windows是同高低字节的机器,所以oracle数据文件的差别仅是第一个数据块上记录的一些信息不同,改了之后就能用了,可传输表空间也是类似原理。
2 spfile里有控制文件的位置,修改成linux里的位置
3 控制文件里有数据文件的位置,也要修改成linux里的位置,然后重建控制文件。