windows导出:
之前我windows上只装了pl/sql,用工具/导出对象,只能导出表结构,达不到要求。
后来上了官网,下了oracle 11g的客户端(下载地址:链接:https://pan.baidu.com/s/1f9ou6lIdEmX5AFNEWcsvAQ 密码:j7n0),完整安装后,可以用命令行导出:
导出语句如下:
exp username/password@ip/servicename file=XXX.dmp owner=XXX log=XXX.log ignore=y statistics=none compress=n
导出前可以用 exp -help查看下参数的意思,能加上就加上,不然导入报错,各种坑。
linux导出:
同样,linux服务器上我也只装了个简化版的sqlplus,需增加exp文件。
如果没有图形化安装环境,只能到安装有客户端的机器上拷exp文件。
下载地址:链接:https://pan.baidu.com/s/14z7n1bHv9IWLl4ppPMyQnw 密码:bzwv
参考文章:https://blog.youkuaiyun.com/silence_ljh/article/details/9793691
https://blog.youkuaiyun.com/huaishu/article/details/39056369
imp导入:
前面一开始导出没导好,后来导入也是各种坑。
导入步骤:
1.创建表空间your_tablespace
create tablespace your_tablespace datafile 'C:\tablespace\your_tablespace ' size 4000m autoextend on next 10m maxsize unlimited;
2.创建用户zhangshan 赋权 connet resource dba
对用户处理
revoke unlimited tablespace from zhangshan
alter user zhangshan quota 0 on system;//将用户在System表空间的配额置为0
alter user zhangshan quota unlimited on your_tablespace;//设置在用户在your_tablespace
注:your_tablespace是你导出的用户所在的表空间名
3.导入:
imp username/password@ip/servicename file=C:\TEMP\xxx.dmp log=C:xxx.log fromuser=xxx
touser=zhangshan ignore=y statistics=none
后续:
最近升级公司应用又让我搞了一天,头痛,做好总结:
导出命令:
exp username/password@ip/servicename file=XXX.dmp owner=XXX log=XXX.log ignore=y statistics=none compress=n
导入命令:
imp username/password@ip/servicename file=XXX.dmp log=XXX.log full=y ignore=y
容易出现的问题:
(1)oracle有空表导出会报错,解决方案:
执行select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
粘贴运行结果sql直接运行;
然后直接使用plsql导出数据表即可
(2)导出的表空间名与导入的表空间表不一致,造成无法导入数据,解决方法:
1)、可以用sed修改dmp文件,正常导入
sed -i 's/TEST_TS/USERS/g' a.dmp
2)、dmp文件包含导出时候表空间的信息,导入时候如果没有创建相应的表空间会提示表空间不存在
3)、如果几个表导出,导入时将错误忽略 ignore=y即可
4)、用transport_tablespace参数
exp transport_tablespace=y tablespaces=(TEST_TS) file=b.dmp
imp transport_tablespace=y file=b.dmp datafiles=/data1/oracle/test.dbf
总之,导入导出作好日志记录,就好排查问题,用pl/sql就没有日志,还是用命令行好。