当前位置: 首页>数据库>正文

shell里导出一份mysql数据 shell脚本导出oracle数据库表

Oracle数据库数据的导入导出imp/exp就相当与oracle数据还原与备份

假定: 将数据库orcl导出,用户名:test,密码:test

一. 导出文件:通过exp导出

1. 用户模式: 导出用户所有对象以及对象中的数据

将数据库中test用户与test用户的表导出到d:\daochu.dmp中

exp test/test@orcl file=d:\daochu.dmp owner=(test,test1)

2. 表模式: 导出用户所有表或者指定的表

将数据库中的表table1 、table2导出到d:\daochu.dmp中

exp test/test@orcl  file=d:\daochu.dmp  tables=(table1,table2)

3. 整个数据库: 导出数据库中所有对象

将数据库中所有对象完全导出到D:\daochu.dmp中

exp test/test@orcl  file=d:\daochu.dmp  full=y

注:若需要执行完全导出,必须具有特殊的权限

4.实例:

a. 根据提示操作:

         

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_shell里导出一份mysql数据,第1张

b. 输入命令,以表模式导出为例:  

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_shell里导出一份mysql数据_02,第2张

c. 当不指定文件存放路径时,导出的文件存放在系统默认路径下:

        

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_经验分享_03,第3张

   使用:pwd 命令,显示:文件存放的默认路径

        

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_shell里导出一份mysql数据_04,第4张

d. 将数据库中的表table1中的字段filed1以"00"打头的数据导出

   exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

  如果想生成压缩文件,在上面命令后面 加上 compress=y  即可。

e. 用户模式下,导出文件:

        

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_经验分享_05,第5张

二. 导入文件:采用imp导入

    导入数据也是分为三种模式:

1. 用户模式: 导入用户所有对象以及对象中的数据

imp test/test@orcl  file=d:\daochu.dmp  fromuser=test1  touser=test

fromuser:取出当前dmp文件的用户

touser:把现在dmp文件中的数据导入到目标库的指定用户

2. 表模式: 导入用户所有表或者指定的表

imp test/test@orcl   file=d:\daochu.dmp  tables=(table1,table2)  

3. 整个数据库: 导入数据库中所有对象

imp test/test@orcl   file=d:/daochu.dmp 

注:若需要执行完全导入,必须具有特殊的权限

4. 实例:

a.指定路径的文件导入,如图:为表模式导入

        

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_linux_06,第6张

b. 当exp导出时,未指定文件路径,默认存放路径下的文件导入(表模式导入)

        

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_经验分享_07,第7张

c. 用户模式下,导入文件:

        

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_数据库_08,第8张

fromuser: 是指生成的dmp文件数据的用户名

touser:指要导入dmp文件的用户名

总结:imp数据的步骤:

 (1) create table   (2) insert data   (3) create index  (4) create triggers,constraints

三. 在导入导出中遇到的问题

(1) 数据库对象已经存在

一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;  

数据库对象已经存在, 按缺省的imp参数, 则会导入失败。如果用了参数 ignore=y, 会把exp文件内的数据内容导入。

如果表有唯一关键字的约束条件, 不符合条件将不被导入,如果表没有唯一关键字的约束条件, 将引起记录重复。

(2) 导出多张表数据时问题

     正常情况下,导出多张表的数据采用:exp test/test@orcl  file=d:\daochu.dmp  tables=(table1,table2),在xshell中执行时

会报错:

  下面为一些错误的情况:

          

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_linux_09,第9张

          

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_数据库_10,第10张

  正确情况为:

           

shell里导出一份mysql数据 shell脚本导出oracle数据库表,shell里导出一份mysql数据 shell脚本导出oracle数据库表_shell里导出一份mysql数据_11,第11张

(3) 数据库对象有主外键约束

     不符合主外键约束时, 数据会导入失败 

     解决办法: 先导入主表, 再导入依存表

     disable目标导入对象的主外键约束, 导入数据后, 再enable它们

(4)  权限不够

      如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限

(5)  导入大表( 大于80M ) 时, 存储分配失败

     默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.

     导入时, 如果不存在连续一个大数据块, 则会导入失败

     导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.

(6) imp和exp使用的字符集不同

     如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息. 

     导入完成后再改回来.


https://www.xamrdz.com/database/6tq1957458.html

相关文章: