Oracle数据
任务描述
描述:将用户oa中的OA表空间的表,导入到用户tddc_ywjg中的表空间TDDC_YWJG中
方法(针对小数据量)
采用exp与IMP导出导入命令进行
10g以后大量数据采用数据泵(EXPDP和IMPDP命令)
原理
以exp命令导出的.dmp文件中指定了其表空间,如果直接以imp命令导入的话,相应的数据表格等还会储存在原来的表空间中
我们首先将原表空间名改为要转入的表空间名,这样.dmp文件中指定的表空间就是要转入的表空间了,最后再将名字换回来导入,由于只导出导入数据库会丢失序列等信息,所以采取用户导出的方式
过程
1、查询原表空间物理路径
select file_name, tablespace_name from dba_data_files;
2新建表空间(与原表空间路径相同),用户,授权
createtablespace TDDC_YWJG
datafile'E:\APP\ADMINISTRATOR\ORADATA\GOLF\ TDDC_YWJG.DBF'
size 500m
autoextend on
next 100mmaxsize unlimited
extentmanagement local;
create usertddc_ywjg identified by tddc_ywjg
defaulttablespace TDDC_YWJG
grant dbaconnect,resource to tddc_ywjg;
grantcreatesequence,selectanysequencetotddc_ywjg;
2、修改表空间名称(将OA换成TDDC_YWJG)
alter tablespaceTDDC_YWJG rename toTDDC_YWJG_bak;
alter tablespaceOA rename to TDDC_YWJG;
3、导出
exp oa/oa@192.9.30.33/orcl file=E:\database\sequence.dmp log= E:\database\sequence.log
4、把名字改回去
alter tablespaceTDDC_YWJG rename toOA;
alter tablespaceTDDC_YWJG_bak rename toTDDC_YWJG;
5导入
imp tddc_ywjg/tddc_ywjg@192.9.30.33/orclfile=E:\database\sequence.dmp log= E:\database\isequence.log full=y
错误方法
1、查询原表空间物理路径
select file_name, tablespace_name from dba_data_files;
2、新建表空间(与原表空间路径相同),用户,授权
如上
3、执行命令:
导出:
EXPoa/oa@192.9.30.33/orcl tablespaces=OA file=E:\database\OA.dmp ignore=y
导入
imptddc_ywjg/tddc_ywjg@192.9.30.33/orcl file=E:\database\OA2.dmp FULL=Y ignore=y
错误结果
表空间tddc_ywjg为空,表空间OA多了一份
出现的问题
1、客户端精简版(instantclient_11_2)是没有exp与imp命令
安装客户端完整版
2、客户端安装:
安装程序进行到最后
[INS-20802]Oracle Net Configuration Assistant 失败
不出现监听配置
方法:管理员身份运行安装程序setup.exe
3、导出成功终止,但有警告
显示如下:
经查证警告是由于服务器与客户端编码不一致导致,不影响最后导入结果,在结尾加ignore=y就不会出现了。
4、关于空表不能导出的问题
空表不能导入导出,需要给空表添加一些数据,11G中有个新特性,当表无数据时,不分配segment,以节省空间
解决方法:
查找空表
select 'altertable '||table_name||' allocate extent;' from user_tables where num_rows=0
把查询结果导出,就是把语句复制出来单独运行,即给空表分配segment
如:alter table ACT_HI_ATTACHMENT allocate extent;
5、导出表空间丢失序列等信息
EXP oa/oa@192.9.30.33/orcltablespaces=TDDC_YWJG file=E:\database\TDDC_YWJG.dmp
IMP tddc_ywjg/ tddc_ywjg@192.9.30.33/orcl tablespaces=TDDC_YWJG file=E:\database\TDDC_YWJG.dmp
问题:只将表导入了,缺少序列等内容
解决:以用户的方式导出导入
6、关于数据泵
需要以SYSDB身份建立目录才可导出
导入导出语法总结
1、导出:exp
完全导出
Exp username/password@service BUFFER=64000 file=储存路径\xx.dmp ignore =y
导出用户:
Expusername/password@service BUFFER=64000 file=储存路径\xx.dmp owner=username ignore=y
导出表:
Expusername/password@service BUFFER=64000 file=储存路径\xx.dmp owner=username tables=table_name ignore =y
导出表空间
Expusername/password@service BUFFER=64000 file=储存路径\xx.dmp owner=username tablespace=tablespace_name ignore=y
2、导入imp
完全导入
Imp username/password@service BUFFER=64000 file=储存路径\xx.dmp full=y
导入用户
imp username/password@service BUFFER=64000 file=储存路径\xx.dmp
fromuser=username touser=username full=y
导入表
Imp username/password@service BUFFER=64000 file=储存路径\xx.dmptables=table_name full=y
导入表空间
Imp username/password@service BUFFER=64000 file=储存路径\xx.dmp tablespace=tablespace_name full=y