顺子
Oracle的导入导出,还是有点麻烦的。
它不像MySQL,导入导出完事。
MySQL就算版本不一致,只要版本相差别太大,导入导出,就没毛病,也不存在什么用户啊,权限啊,表空间啊之类的报错。
MySQL常见的导入导出报错,是数据库性能不够用,可以瞅瞅我之前的文章,有提高性能的介绍。
导前须知
Oracle数据库原理
Oracle削弱了库的概念,增强了表的概念。
我们使用MySQL导出时,指定某个数据库导出,但是Oracle呢。
指定导出用户,而不是指定导出数据库,可以理解为一个用户,一个数据库。
在Oracle中,默认,只有一个大的数据库实例orcl,在这张大饼上,切分成了一块又一块的表空间。
为什么导入Oracle时,会出现表空间不存在错误
在别的地方的Oracle,拿到你本地导入,却导不进去,报表空间不存在。
因为别人的Oracle,建表时,指定了表空间为abc,就是说在别人的物理机上,在别人的数据库实例中,有一块区域命名为abc,a表,b表,c表存在于这个表空间中。
到你的数据库实例这里,没有abc表空间,你让这几张表放哪去,随缘。
比如本地,你将scott用户的表导进jack用户的表就不会报这个错。
因为scott用户与jack用户在同一个物理机上,共享所有的表空间。
Oracle导入导出数据库时,黑窗口一闪而过
增加环境变量就可以解决。
上图:
Oracle导出报错: unknown command beginning “exp SCOTT/…” - rest of line ignored.
https://blog.youkuaiyun.com/numbbe/article/details/110841172
命令行简单示例
导入命令
imp jack/jack@127.0.0.1:1521/orcl file=C:\Users\admin\Desktop\scott.dmp
导出命令
exp scott/tiger@127.0.0.1:1521/orcl file=C:\Users\admin\Desktop\scott.dmp
导入参数(按重要性排序)
file = *.dmp
导入文件路径。
ignore = y
忽略创建错误,默认为n,需指定y。
full = y
导入整个文件。
grants = y
导入权限。
log = *.log
屏幕输出的日志文件。
fromuser
从哪里人的表中来。
touser
到哪里人的表中去。
indexes = y
导入索引。
tables
表名列表。
buffer = 65536
数据缓冲区大小。
导出参数(按使用频率排序)
full = y
导出整个文件,默认为n。
owner = scott
导出数据。
grants = y
是否导出权限,默认Y。
file = *.dmp
导出文件名。
log = *.log
导出日志 。
rows = y
具体行。
compress = n
是否压缩导出的文件。
buffer = 65536
数据缓冲区大小。
tables
导出具体的表。
indexes = y
是否导出索引。
triggers=y
是否导出触发器。
owner参数测试
第一组,测试加不加owner参数的区别。
导出system用户数据(不加owner参数)
exp system/orcl996 file='C:\Users\admin\Desktop\owner01.dmp'
导出system用户数据(加owner参数)
exp system/orcl996 file='C:\Users\admin\Desktop\owner02.dmp' owner=system
第二组,测试system用户导出的scott用户的数据,与scott用户本身导出的数据是否一致。
system导出scott用户数据(加owner参数)
exp system/orcl996 file='C:\Users\admin\Desktop\owner03.dmp' owner=scott
scott用户导出scott用户数据(加owner参数)
exp scott/tiger file='C:\Users\admin\Desktop\owner04.dmp'
第三组,测试owner参数使用限制
lucy具有dba权限,可以导出。
exp lucy/lucy file='C:\Users\admin\Desktop\owner05.dmp' owner=scott
收回lucy的dba权限,命令执行失败。
exp lucy/lucy file='C:\Users\admin\Desktop\owner05.dmp' owner=scott
测试结果
不加owner参数,导出的就是登陆用户的。
加上owner参数,指定是某个用户,导出的就是某个用户的。
注意:非dba不可以导出其他用户数据。
full参数测试
第一组,测试加不加full参数的效果。
导出system用户数据(不加full参数)
exp system/orcl996 file='C:\Users\admin\Desktop\full01.dmp'
system导出全库数据(加full参数)
exp system/orcl996 file='C:\Users\admin\Desktop\full02.dmp' full=y
第二组,测试不同用户使用full参数,导出数据是否一致。
jack导出全库数据(加full参数)
exp jack/jack file='C:\Users\admin\Desktop\full03.dmp' full=y
第三组,测试full参数使用限制
scott整库导出数据库
exp scott/tiger file='C:\Users\admin\Desktop\full04.dmp' full=y
测试结果
不加full=y,system用户导出的是自己的数据。
加上full=y就是全库导出,不管是system用户还是jack用户,导出的dmp文件一模一样,都是orcl整个数据库实例。