zoukankan      html  css  js  c++  java
  • Oracle简单的备份和恢复-导出和导入(2)

    ylbtech-Oracle:Oracle简单的备份和恢复-导出和导入(2)

     简单的备份和恢复-导出和导入(2)

    1. 用户导入导出文件中的一张表(emp)返回顶部
    0.1,
    我们在sql plus中删除掉一张表emp,把dept表的记录删空。
    drop table emp;
    delete from dept;
    之后我们先利用刚才导出的mytable.dmp导入emp表。具体导入步骤如下:
    1.在命令行下输入imp命令。
    2.系统首先提示我们输入用户名和密码,在这里我们可以用scott/tiger的形式同时输入用户名和密码。
    3.系统提示我们从哪个文件导入数据,默认导入文件为EXPDATE.DMP,在这里我们输入c:mytable.dmp。
    4.系统提示我们输入插入缓冲区大小(最小为8192),默认值为30720,我们按回车接受默认值。
    5.系统提示是否只列出导入文件的内容(yes/no):默认值是no,在这里我们一定要选择no,否则数据不会被顺利导入的。
    6.系统提示我们由于对象已存在,忽略创建错误(yes/no):默认值是no,这里的具体含义是如果导入的对象在数据库中已经存在,如果重复创建就会出现一个错误,而我们这里应该忽略这个错误,这样导入操作才会继续进行,所以这里一定要选择yes。
    7.接下来系统会提示是否导入权限(yes/no):默认值yes,是否导入数据(yes/no)默认值yes,我们接受这两个默认值,按两次回车继续。
    8.系统询问是否导入整个导入文件(yes/no),默认值为no,也就是在导出文件中选择一部分数据导入,如果选择yes则会把所有导出文件中的内容都导入数据库中。
    9.接下来系统提示我们输入用户名:原因是一个导出文件中可能有很多个用户的数据,我们要在此确定到底导出那个用户对象,我们输入scott,表示导出属于scott的数据。
    10.之后系统提示我们输入,输出表(T)或分区(T:P)名称。空列表表示用户的所有表。我们输入emp表示导入导出文件中scott用户的emp表,如果直接按回车就表示导入scott的所有文件中的对象。
    输入表(T)或分区(T:P)的名称或。如果完成:emp
    11.接下来按回车表示只导入emp表,出现如下结果:
     
    输入表 (T) 或分区 (T: P) 的名称或 。如果完成:
    
    . 正在将 SCOTT 的对象导入到 SCOTT
    . 正在将 SCOTT 的对象导入到 SCOTT
    . . 正在导入表                           "EMP"导入了          14 行
    即将启用约束条件...
    IMP-00017: 由于 ORACLE 错误 2298, 以下语句失败:
     "ALTER TABLE "EMP" ENABLE CONSTRAINT "FK_DEPTNO""
    IMP-00003: 遇到 ORACLE 错误 2298
    ORA-02298: 无法验证 (SCOTT.FK_DEPTNO) - 未找到父项关键字
    成功终止导入, 但出现警告。
    可以看到emp表被成功建立,并放入了数据,但是在启用约束的时候出现了错误,原因是现在dept表为空,而emp表和dept表之间又有主外键关系这样emp表的deptno列的数据都是违背外键约束的,这样添加外间的操作自然会失败。
    但从这个例子我们可以看到,导入一张表的顺序是:
    建立表--> 插入记录--> 添加约束
    我们忽略了创建错误。
    1.1,  之代码
    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    
    C:UsersAdministrator>imp
    
    Import: Release 10.2.0.3.0 - Production on 星期六 1月 21 09:30:06 2017
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    用户名: scott/tiger@orcl
    
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    
    导入文件: EXPDAT.DMP> c:mytable.dmp
    
    输入插入缓冲区大小 (最小为 8192) 30720>
    
    经由常规路径由 EXPORT:V10.02.01 创建的导出文件
    已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    只列出导入文件的内容 (yes/no): no >
    
    由于对象已存在, 忽略创建错误 (yes/no): no > yes
    
    导入权限 (yes/no): yes >
    
    导入表数据 (yes/no): yes >
    
    导入整个导出文件 (yes/no): no >
    用户名: scott
    
    输入表 (T) 或分区 (T: P) 名称。空列表表示用户的所有表
    输入表 (T) 或分区 (T: P) 的名称或 。如果完成:  emp
    
    输入表 (T) 或分区 (T: P) 的名称或 。如果完成:
    
    . 正在将 SCOTT 的对象导入到 SCOTT
    . 正在将 SCOTT 的对象导入到 SCOTT
    . . 正在导入表                           "EMP"导入了          14 行
    即将启用约束条件...
    IMP-00017: 由于 ORACLE 错误 2298, 以下语句失败:
     "ALTER TABLE "EMP" ENABLE CONSTRAINT "FK_DEPTNO""
    IMP-00003: 遇到 ORACLE 错误 2298
    ORA-02298: 无法验证 (SCOTT.FK_DEPTNO) - 未找到父项关键字
    成功终止导入, 但出现警告。
    
    C:UsersAdministrator>
    View Code
    1.2,
    2. 导入整个导出文件返回顶部
    2.1,
    我们利用刚才装有scott所有数据库对象的scott.dmp文件进行导入,在是否导入整个导出文件(yes/no):的位置我们选择输入yes,系统开始导入。
    导入过程中会看到如下画面:
     
    . 正在将 SCOTT 的对象导入到 SCOTT
    . . 正在导入表                         "BONUS"导入了           0 行
    . . 正在导入表                          "DEPT"导入了           4 行
    . . 正在导入表                           "EMP"
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    该画面告诉我们,dept的4行数据被导入,而emp进行导入的时候会出现错误,原因是表已经建立,数据也已经存在,而且该表又主键约束,会阻止重复记录的插入,但是对于没有主键和唯一约束的表,记录则会被重复插入两次,比如salgrade表就会被重新插入5行记录,虽然给建立emp表和给emp表的操作都因为emp表和其中的数据已经存在而失败,但是给emp表添加外键约束的操作却会成功,原因是dept表中已经存在了记录。
    2.2, 之代码
    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    
    C:UsersAdministrator>imp
    
    Import: Release 10.2.0.3.0 - Production on 星期六 1月 21 09:41:24 2017
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    用户名: scott/tiger@orcl
    
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    
    导入文件: EXPDAT.DMP> c:scott.dmp
    
    输入插入缓冲区大小 (最小为 8192) 30720>
    
    经由常规路径由 EXPORT:V10.02.01 创建的导出文件
    已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    只列出导入文件的内容 (yes/no): no >
    
    由于对象已存在, 忽略创建错误 (yes/no): no > yes
    
    导入权限 (yes/no): yes >
    
    导入表数据 (yes/no): yes >
    
    导入整个导出文件 (yes/no): no > yes
    
    . 正在将 SCOTT 的对象导入到 SCOTT
    . . 正在导入表                         "BONUS"导入了           0 行
    . . 正在导入表                          "DEPT"导入了           4 行
    . . 正在导入表                           "EMP"
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 73692 SMITH
    列 3 CLERK
    列 4 79025 17-12月-1980:00:00:006 80078 20
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 74992 ALLEN
    列 3 SALESMAN
    列 4 76985 20-2月 -1981:00:00:006 16007 3008 30
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 75212 WARD
    列 3 SALESMAN
    列 4 76985 22-2月 -1981:00:00:006 12507 5008 30
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 75662 JONES
    列 3 MANAGER
    列 4 78395 02-4月 -1981:00:00:006 297578 20
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 76542 MARTIN
    列 3 SALESMAN
    列 4 76985 28-9月 -1981:00:00:006 12507 14008 30
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 76982 BLAKE
    列 3 MANAGER
    列 4 78395 01-5月 -1981:00:00:006 285078 30
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 77822 CLARK
    列 3 MANAGER
    列 4 78395 09-6月 -1981:00:00:006 245078 10
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 77882 SCOTT
    列 3 ANALYST
    列 4 75665 19-4月 -1987:00:00:006 300078 20
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 78392 KING
    列 3 PRESIDENT
    列 45 17-11月-1981:00:00:006 500078 10
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 78442 TURNER
    列 3 SALESMAN
    列 4 76985 08-9月 -1981:00:00:006 15007 08 30
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 78762 ADAMS
    列 3 CLERK
    列 4 77885 23-5月 -1987:00:00:006 110078 20
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 79002 JAMES
    列 3 CLERK
    列 4 76985 03-12月-1981:00:00:006 95078 30
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 79022 FORD
    列 3 ANALYST
    列 4 75665 03-12月-1981:00:00:006 300078 20
    IMP-00019: 由于 ORACLE 错误 1 而拒绝行
    IMP-00003: 遇到 ORACLE 错误 1
    ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
    列 1 79342 MILLER
    列 3 CLERK
    列 4 77825 23-1月 -1982:00:00:006 130078 10导入了           0 行
    . . 正在导入表                      "SALGRADE"导入了           5 行
    即将启用约束条件...
    成功终止导入, 但出现警告。
    
    C:UsersAdministrator>
    View Code
    2.3,
    3. 用一个用户导出其他用户的表返回顶部
    3.1,
    使用system导出scott的emp和dept表
    我们在命令行下键入exp命令,使用system登录,在选择导出类型的时候我们选择导出表选择T或者3,在提示输入表名的时候我们输入c:scott.emp后回车,再次输入scott.dept后再次回车退出导出,保存为scotable.dmp。
    3.2, 之代码
    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    
    C:UsersAdministrator>exp
    
    Export: Release 10.2.0.3.0 - Production on 星期六 1月 21 09:49:48 2017
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    
    用户名: system/Yb123456@orcl
    
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    输入数组提取缓冲区大小: 4096 >
    
     导出文件: EXPDAT.DMP > c:scotable.dmp
    
    (1)E(完整的数据库), (2)U(用户) 或 (3)T(表): (2)U > T
    
    导出表数据 (yes/no): yes >
    
    压缩区 (yes/no): yes >
    
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
    
    即将导出指定的表通过常规路径...
    要导出的表 (T) 或分区 (T: P): (按 RETURN 退出) > scott.emp
    
    当前的用户已更改为 SCOTT
    . . 正在导出表                             EMP导出了          14 行
    要导出的表 (T) 或分区 (T: P): (按 RETURN 退出) > scott.dept
    
    . . 正在导出表                            DEPT导出了           4 行
    要导出的表 (T) 或分区 (T: P): (按 RETURN 退出) >
    
    成功终止导出, 没有出现警告。
    
    C:UsersAdministrator>
    View Code
    3.3,
    4. 用一个用户导出其他用户的所有数据库对象返回顶部
    4.1,
    使用system导出scott所有的数据库对象,保存为scoobject.dmp
    当我们是使用system用户选择导出用户选项时,我们不光可以导出system自己的数据库对象,我们还可以选择导出其他的数据库对象,具体过程如下:
    4.2, 之代码
    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    
    C:UsersAdministrator>exp
    
    Export: Release 10.2.0.3.0 - Production on 星期六 1月 21 09:58:18 2017
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    
    用户名: system/Yb123456@orcl
    
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    输入数组提取缓冲区大小: 4096 >
    
     导出文件: EXPDAT.DMP > c:scoobject.dmp
    
    (1)E(完整的数据库), (2)U(用户) 或 (3)T(表): (2)U > u
    
    导出权限 (yes/no): yes >
    
    导出表数据 (yes/no): yes >
    
    压缩区 (yes/no): yes >
    
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
    
    即将导出指定的用户...
    要导出的用户: (按 RETURN 退出) > scott
    
    要导出的用户: (按 RETURN 退出) >
    
    . 正在导出 pre-schema 过程对象和操作
    . 正在导出用户 SCOTT 的外部函数库名
    . 导出 PUBLIC 类型同义词
    . 正在导出专用类型同义词
    . 正在导出用户 SCOTT 的对象类型定义
    即将导出 SCOTT 的对象...
    . 正在导出数据库链接
    . 正在导出序号
    . 正在导出簇定义
    . 即将导出 SCOTT 的表通过常规路径...
    . . 正在导出表                           BONUS导出了           0 行
    . . 正在导出表                            DEPT导出了           4 行
    . . 正在导出表                             EMP导出了          14 行
    . . 正在导出表                        SALGRADE导出了          10 行
    . 正在导出同义词
    . 正在导出视图
    . 正在导出存储过程
    . 正在导出运算符
    . 正在导出引用完整性约束条件
    . 正在导出触发器
    . 正在导出索引类型
    . 正在导出位图, 功能性索引和可扩展索引
    . 正在导出后期表活动
    . 正在导出实体化视图
    . 正在导出快照日志
    . 正在导出作业队列
    . 正在导出刷新组和子组
    . 正在导出维
    . 正在导出 post-schema 过程对象和操作
    . 正在导出统计信息
    成功终止导出, 没有出现警告。
    
    C:UsersAdministrator>
    View Code
    4.3,
    5. 用一个用户恢复其他用户的表返回顶部
    5.1,
    我们可以删除emp表
    drop table emp;
    在用system把它重新恢复。
    我们在系统提示是否导入整个导出文件(yes/no):的时候选择no,之后系统提示输入用户名,我们输入scott,系统再次提示我们输入要导入的表的名字,我们输入emp,之后完成了导入。
    5.2, 之代码
    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    
    C:UsersAdministrator>imp
    
    Import: Release 10.2.0.3.0 - Production on 星期六 1月 21 10:13:39 2017
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    用户名: system/Yb123456@orcl
    
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    
    导入文件: EXPDAT.DMP> c:scoobject.dmp
    
    输入插入缓冲区大小 (最小为 8192) 30720>
    
    经由常规路径由 EXPORT:V10.02.01 创建的导出文件
    已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    只列出导入文件的内容 (yes/no): no >
    
    由于对象已存在, 忽略创建错误 (yes/no): no > yes
    
    导入权限 (yes/no): yes >
    
    导入表数据 (yes/no): yes >
    
    导入整个导出文件 (yes/no): no >
    用户名: scott
    
    输入表 (T) 或分区 (T: P) 名称。空列表表示用户的所有表
    输入表 (T) 或分区 (T: P) 的名称或 。如果完成:  emp
    
    输入表 (T) 或分区 (T: P) 的名称或 。如果完成:
    
    . 正在将 SYSTEM 的对象导入到 SYSTEM
    . 正在将 SCOTT 的对象导入到 SCOTT
    . . 正在导入表                           "EMP"导入了          14 行
    即将启用约束条件...
    成功终止导入, 没有出现警告。
    
    C:UsersAdministrator>
    View Code
    5.3,
     
    6. 用一个用户恢复其他用户的所有返回顶部
    6.1,
    使用system登录sqlplus后删除scott用户及其所有数据库对象。
    SQL> drop user scott cascade;
    注意:必须使用cascade选择。
    之后我们重新建立scott用户,并授予connect和resource角色。
    SQL>create user scott identified by "tiger";
    用户被创建
    SQL>grant connect to scott;
    授权成功
    SQL>grant resource to scott;
     现在的scott用户下没有任何数据库对象,我们使用刚才的scoobject.dmp文件来恢复scott用户的所有数据库对象。
    6.2, 之具体步骤如下:
    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
    
    C:UsersAdministrator>imp
    
    Import: Release 10.2.0.3.0 - Production on 星期六 1月 21 10:20:52 2017
    
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    
    用户名: system/Yb123456@orcl
    
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options
    
    导入文件: EXPDAT.DMP> c:scoobject.dmp
    
    输入插入缓冲区大小 (最小为 8192) 30720>
    
    经由常规路径由 EXPORT:V10.02.01 创建的导出文件
    已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    只列出导入文件的内容 (yes/no): no >
    
    由于对象已存在, 忽略创建错误 (yes/no): no > yes
    
    导入权限 (yes/no): yes >
    
    导入表数据 (yes/no): yes >
    
    导入整个导出文件 (yes/no): no > yes
    
    . 正在将 SYSTEM 的对象导入到 SYSTEM
    . 正在将 SCOTT 的对象导入到 SCOTT
    . . 正在导入表                         "BONUS"导入了           0 行
    . . 正在导入表                          "DEPT"导入了           4 行
    . . 正在导入表                           "EMP"导入了          14 行
    . . 正在导入表                      "SALGRADE"导入了          10 行
    即将启用约束条件...
    成功终止导入, 没有出现警告。
    
    C:UsersAdministrator>
    View Code
    6.3,
    7. 把一个用户的表导入另一个用户下返回顶部
    7.1,
    当我们使用scott导出scott的所有数据库对象或者表时,如果我们使用system来导入,该文件中的数据库对象将会被导入到system下,也就是借助与导入导入来实现数据库对象的用户间的转移。
    7.2,
    8. 如何导出全部的数据库返回顶部
    8.1,
    当一个用户具有exp_full_database角色时?在导出界面他会看到如下的导出选择:
    (1)E(完整的数据),(2)U(用户)或这(3)T(表):(2)U>E
    如果我们选择E或者1,则可以导出全部的数据库。
    当一个用户拥有imp_full_database角色的时候,他就可以把我们导出的包含全部数据对象的导出文件导入。
    8.2,
    9.返回顶部
    9.1,
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    第二次结对作业
    第二次编程作业
    第一次编程作业
    第一篇随笔
    个人总结
    用例图设计
    第二次个人编程作业
    第一次个人编程作业
    第一次博客作业
    个人总结-以梦为马,砥砺前行
  • 原文地址:https://www.cnblogs.com/ylbtech/p/6323179.html
Copyright © 2011-2022 走看看