全部博文(147)
分类: Oracle
2010-01-27 17:10:31
跨平台迁移ORACLE结构,而不迁移数据的方法
1\ 在原库中导出相关信息:
expdp system/sywg1234 directory=test dumpfile=test.dump logfile=test.log schemas=SYWG,GAZX,WEBCALL,HQ,SJCK,SJPZ CONTENT=METADATA_ONLY
2\ 去原库的表空间信息:
去TOAD导出表空间信息,后编辑导出脚本,将系统相关的信息删除;将目录及文件大小按实际需要更改.
3\到目的库中操作:
将原库中导出的dump文件,CP到目的库中一个目录下;
创建导入目录;
impdp system/sywg1234 directory=test dumpfile=test.dump logfile=test_imp.log CONTENT=METADATA_ONLY exclude=statistc
注:
此时有一个很大的问题,就是即使导入的是表结构,无数据,但还是占用大量的表空间,这确实是一个比较大的问题
4\到目的库导入后,分析所有表:
--生成统计信息分析脚本:
select 'analyze table '||owner||'.'||table_name ||' compute statistics; 'from all_tables
where OWNER in ('GAZX','SJCK','SJPZ','SYWG','HQ','WEBCALL')
---执行上面生成的脚本,以进行统计信息的更新
5\ 压缩空表占用的大量表空间:
---查看表的占用空间情况,
SELECT OWNER,segment_name,SEGMENT_TYPE,BYTES/1024/1024 FROM DBA_SEGMENTS
WHERE OWNER='GAZX'
ORDER BY 4 DESC
---确认表中是否有数据
SELECT * FROM GAZX.GSGG
---查看表是否允许row_movement
select a.row_movement,a.* from all_tables a where a.owner='GAZX' AND a.TABLE_NAME='GSGG'
---若不允许,则开启row_movement
alter table GAZX.GSGG enable row movement;
生成批量处理的脚本:
SELECT 'ALTER TABLE GAZX.'||SEGMENT_NAME||' enable row movement;'
FROM DBA_SEGMENTS
WHERE OWNER='GAZX' AND SEGMENT_TYPE='TABLE'
----压缩表占用的空间
ALTER TABLE GAZX.GSGG SHRINK SPACE CASCADE;
生成批量处理的脚本:
SELECT 'ALTER TABLE GAZX.'||SEGMENT_NAME||' SHRINK SPACE CASCADE;'
FROM DBA_SEGMENTS
WHERE OWNER='GAZX' AND SEGMENT_TYPE='TABLE'
----压缩表完毕后,压缩数据文件
5\ 原库和目的库的校对:
导入后校对:
---核对表的数量
select OWNER,COUNT(TABLE_NAME) from all_tables
where OWNER in ('GAZX','SJCK','SJPZ','SYWG','HQ','WEBCALL')
GROUP BY OWNER
---核对索引的数量
SELECT OWNER,COUNT(TABLE_NAME) FROM ALL_INDEXES
where OWNER in ('GAZX','SJCK','SJPZ','SYWG','HQ','WEBCALL')
GROUP BY OWNER