先来点虚的:
exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,
imp命令可以把dmp文件从本地导入到远处的数据库服务器中。
1.导出数据库:
exp shark_3/shark_3@STAGE2[192.168.6.48] file=d:/sharkdb.dmp
2.导入数据库:
imp shark/shark@SHARK[192.168.6.112] file=d:/sharkdb.dmp full=y ignore=y
---导入时,其中的full=y可以考虑不要,ignore=y忽略冲突
再来点实的:
有时候,开发环境和准生产环境的数据库表结构不同,想把准生产环境的表结构导到开发环境数据库来,但又发现这些表已经存在了,只是增加了列;怎么办呢?
1.drop user再重建?可惜俺不是DBA,木有那些个权限;
drop user shark cascade;
create user shark identified by shark;
grant connect,resource,dba to shark;
2.直接导入么已存在的表肯定报错,去掉full=y么,改变了结构又已存在的表结构还是老的;
OK,有办法了,先用查询语句生成对当前用户下所有表的dorp语句, 然后批执行一下,就爽了(这个相当truncate user ^_^),SQL如下:
select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;
这时候再导入,就不会报错了。
类似的还有:(这个网上多,比俺找的全^_^)
--drop sequence
select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;
--drop sequence
select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;
--drop function
select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';
--drop procedure
select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';
--drop package
select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';
有时候在数据导出时,会发现有N多的日志表,日积月累,里边数据还超大,导出来又没啥用;
怎么办呢?举一反三,俺们可以再生成如下SQL,再批执行一下:(哇噻,导出的时候快多了^_^)
select 'truncate table ' || table_name ||';'||chr(13)||chr(10) from user_tables where table_name like '%LOG' OR table_name like '%BAKE';
旧瓶装心酒。