返回
基础
分类

但是用imp导入后的表还是会去找原来的表空间进行恢复,创建一个数据库导出目录

日期: 2020-05-06 16:02 浏览次数 : 65

经常有人会问:原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经修改了目的用户的默认表空间,为什么结果还是IMP到USERS表空间中了呢。

 

本文内容

  • 数据泵与传统的 IMP/EXP 工具的区别
  • 开始使用 datapump 导出
  • 创建数据库目录
  • 再次尝试导出
  • 导入另一个数据库
  • 网络导入
  • 从 PL/SQL 调用
  • Oracle 11g Release 1 (11.1) Data Pump 导出和导入概述
  • Oracle 11g Release 1 (11.1) Data Pump 导出和导入模式
  • 参考资料
  • 修改记录

导出/导入是逻辑备份,用于数据迁移,不能跟冷备份和热备份相比。

从 Oracle 10 g 开始,Oracle 引入了一个新的导入和导出工具数据泵(Oracle Data pump),是一个服务,基于大容量数据迁移的结构,用来取代传统的 IMP/EXP 工具。数据泵与传统的导入/导出工具完全不同。传统的 IMP/EXP 是 Oracle 最古老的两个命令行工具,但不支持所有的 Oracle 10g 和 11g 的功能。这个新的工具名为 expdp 和 impdp。

关于此问题,作如下解释:

虽然是按照用户的方式导出的,但导入之前,还是必须要有相同的用户存在,删除用户以后,是无法进行导入的
--重新创建回zlm用户 SQL> create user zlm identified by zlm;

数据泵与传统的 IMP/EXP 工具的区别


  • 传统的 IMP/EXP 工具,都作为客户端程序运行,如果在导出过程中发生网络中断或客户端程序异常,都会导致导出操作失败;而数据泵主要工作在服务器端,通过新的 API 来建立和管理,主要由 DBMS_DATAPUMP 来完成。数据泵完全成为一个客户端应用,IMPDP/EXPDP 执行的命令实际上都是在调用服务器端的 API 在执行操作,一旦一个任务被调度或执行,客户端就可以退出连接,任务会在服务端继续运行。
  • 传统的 IMP/EXP 工具,是单线程操作,这在很多情况下成为一个瓶颈;而数据泵多线程的,建立多个数据泵工作进程来读/写正在被导出/导入的数据,也可以建立并行IO服务器进行。
  • 此外,数据泵还有其他优势。其实,它们的差异都归于结构的差异。传统的 IMP/EXP 完成是在客户端进行,而数据泵是在调用服务端的 API。

Oracle并没有提供什么参数来指定要导入哪个表空间,数据默认将导入到原本导出时数据所在的表空间中,但是我们可以通过以下的方法来实现导入到不同的表空间。

尽管zlm用户的默认表空间是USERS,但是用imp导入后的表还是会去找原来的表空间进行恢复,即“ZLM”,那么我们把原来的表空间也删除掉,会怎么样呢?
--删除ZLM表空间后测试恢复情况 SQL> drop tablespace zlm including contents;

 

1.在IMP时候使用INDEXFILE参数

注意,使用including contents只是把可控制文件中相应的信息删除,物理上还是存在于OS的磁盘上的,如果要连同文件一起删除,那么就要使用including contents and datafiles,那么就连渣渣也不剩了

开始用 datapump 导出


$ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

 

Export: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March,  2006 11:36:07

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

 

ORA-39002: invalid operation

ORA-39070: Unable to open the log file.

ORA-39087: directory name DMPDIR is invalid

说明:

  • "dmpdir" 为导出目录;
  • "scott.dmp" 为导出的 datadump 文件;
  • scott 用户下的表在默认表空间 USERS 和临时表空间 TEMP 下。所以这个命令将 scott 用户把自己的表(对象)导出来;
  • 因为,Oracle 已经有这两个表空间,所以,直接导入即可。但是,如果是自己创建的表空间,就先要创建这个表空间,然后再导入。

导出失败了!因为,我们需要先创建目录!

必赢手机登录网址 , 

当给此参数指定了某一文件名,IMP的时候所有的index将不会直接导入到表空间中,而是在指定的文件中生成创建index的脚本。 然后用文本编辑器打开此文件,直接编辑脚本中的storage参数,修改为想要导入的表空间名称。 然后重新执行IMP,使用INDEXS=n参数将除Index之外的Objects导入。 最后进入SQL*PLUS,直接运行刚才编辑的脚本,生成索引。 该方法适用于将index以及constraints导入指定的表空间。 2.改变目的用户的默认表空间 这就是上面说的经常有人提问的方法。但是上述的问题之所以没有成功,是因为缺少了下面的几步。 首先,收回目的用户的"UNLIMITED TABLESPACE"权限: revoke unlimited tablespace from username; 其次,取消目的用户在原数据导出表空间中的配额,这样才能迫使IMP把数据导入到用户的默认表空间中去。 然后,将希望导入的表空间设为目的用户的默认表空间,并添加配额。

当我们把原来zlm用户导出时的表空间ZLM删除以后再倒入,此时会发现imp会把用户导到数据库缺省的USERS表空间上去,基于这种原理,当我们做逻辑导入导出的时候,尽量保持源端与目标端有相同的环境,当然还包括字符集(这里没有做测试)等。否则在导入数据后,可能会产生意外地状况,比方说源库的表空间是很大的,但是由于在目标库中没有创建相应的表空间,默认放到了USERS表空间中,环境和源库产生了不同,可能导入的时候就直接报错了。当然了,字符集更是一个要注意的问题。

创建数据库目录


执行如下命令,创建一个数据库导出目录。该目录必须指向一个同一个服务器的有效目录作为数据库:

SQL> CREATE DIRECTORY dmpdir AS '/opt/oracle';

Directory created.

 

SQL> GRANT read, write ON DIRECTORY dmpdir TO scott;

Grant succeeded.

说明:

  • "dmpdir" 为导出目录,"/opt/oracle" 为数据库路径(也可以操作系统的绝对路径,如"d:db_backup");
  • 导出目录授权。让 scott 用户对该目录可读写。这样,scott 用户才能正常访问该目录,将数据库内容和导出的日志文件放在这里。

备注:Oracle 从 Oracle 10g R2 开始,引入了一个称为 "DATA_PUMP_DIR" 的默认目录,如下所示:

SQL> SELECT directory_path FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR';

 

DIRECTORY_PATH

--------------------------------------------------------------------------------

/app/oracle/product/10.2.0/rdbms/log/

 

最后,执行IMP。 3.使用TOAD TOAD是强大的Oracle数据库管理软件,是Quest出品的第三方软件,我们可以使用其中的Rebuild Multi Objects工具来实现将多个Object转移到指定的表空间。 于是我们可以不管三七二十一,先IMP,然后再用TOAD作事后的修改。 关于TOAD的使用,此处不作详细解释。

exp/imp通常在Oracle 8i/9i等早期的版本中用得较多,到了10g以后基本全面被数据库泵(Data Pump)取代,即expdp/impdp,虽然说已经是过时的技术,但作为DBA也不能完全不了解,因为和数据泵还是有异曲同工之处的,只是数据泵的功能更强大了。本篇实验采用了一个最不实用的方法来演示exp/imp的使用方法,即:交互方式,该方式可支配的参数非常少,如,不能指定log,feedback等参数,也不能指定按条件进行导出,且每次使用起来都要一步步确认非常多的步骤,非常繁琐,不推荐使用,即便要使用,也推荐采用另外两种方式:1.命令行模式、2.参数文件模式(推荐)。

再次尝试导出


$ expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

 

Export: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March, 2006 11:41:02

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

Starting "SCOTT"."SYS_EXPORT_SCHEMA_01":  scott/********  DIRECTORY=dmpdir DUMPFILE=scott.dmp

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 175.2 MB

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/COMMENT

Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC

Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE

Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC

Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE

Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Processing object type SCHEMA_EXPORT/JOB

. . exported "SCOTT"."BIGEMP"                            145.2 MB 3670016 rows

. . exported "SCOTT"."DEPT"                              5.656 KB       4 rows

. . exported "SCOTT"."EMP"                               7.820 KB      14 rows

. . exported "SCOTT"."ORD_CHARGE_TAB"                    5.296 KB       2 rows

. . exported "SCOTT"."SALGRADE"                          5.585 KB       5 rows

. . exported "SCOTT"."BONUS"                                 0 KB       0 rows

. . exported "SCOTT"."NEWOBJECT1_T"                          0 KB       0 rows

. . exported "SCOTT"."T1"                                    0 KB       0 rows

Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:

  /app/oracle/scott.dmp

Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at 11:44:50

 

 

导入到另一个数据库


$ impdp system/oracle DIRECTORY=dmpdir DUMPFILE=scott.dmp

 

Import: Release 10.2.0.1.0 - 64bit Production on Friday, 31 March, 2006 12:00:59

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

Master table "SYSTEM"."SYS_IMPORT_FULL_02" successfully loaded/unloaded

Starting "SYSTEM"."SYS_IMPORT_FULL_02":  system/******** DIRECTORY=dmpdir DUMPFILE=scott.dmp

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported "SCOTT"."BIGEMP"                            145.2 MB 3670016 rows

. . imported "SCOTT"."DEPT"                              5.656 KB       4 rows

. . imported "SCOTT"."EMP"                               7.820 KB      14 rows

. . imported "SCOTT"."ORD_CHARGE_TAB"                    5.296 KB       2 rows

. . imported "SCOTT"."SALGRADE"                          5.585 KB       5 rows

. . imported "SCOTT"."BONUS"                                 0 KB       0 rows

. . imported "SCOTT"."NEWOBJECT1_T"                          0 KB       0 rows

. . imported "SCOTT"."T1"                                    0 KB       0 rows

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC

Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE

Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC

Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE

Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Processing object type SCHEMA_EXPORT/JOB

Job "SYSTEM"."SYS_IMPORT_FULL_02" successfully completed at 12:02:22

备注:

  • expdp 和 impdp 命令都是操作系统下执行;
  • 而创建导出目录,并为其授权,都是 SQL PLUS 下执行。
  • 以上例子对于刚开始的你已经足够。更多信息,请参看 Oracle 工具指南。输入下面命令可以列出该命令的所有参数。

    $ expdp help=yes

    $ impdp help=yes

 

先备份相关表
分为按用户导与按表导,
按表的话,需要指定表名。
备份内容有:
一个表中所有的数据
一个表的数据与结构
按用户的话,该用户下的所在模式对象都导出来了

网络导入


通过网络模式导入,不需要任何中间的 dump 文件。数据,通过一个数据库链路(database link)导出,直接导入到目标数据库。例如:

SQL> create user new_scott identified by tiger;

User created.

 

SQL> grant connect, resource to new_scott;

Grant succeeded.

 

SQL> grant read, write on directory dmpdir to new_scott;

Grant succeeded.

 

SQL> grant create database link to new_scott;

Grant succeeded.

 

SQL> conn new_Scott/tiger

Connected.

 

SQL> create database link old_scott connect to scott identified by tiger  using 'orcl.oracle.com';

Database link created.

 

$ impdp new_scott/tiger DIRECTORY=dmpdir NETWORK_LINK=old_scott remap_schema=scott:new_scott

所有的工作在目标操作系统上完成。唯一一个到源操作系统的引用是通过数据库链路(database link)。

 

exp help=y
exp hr/123456
回答几个问题

从 PL/SQL 调用


可以从 PL/SQL 调用 datapump。这对于每天或每周计划用 DBMS_SCHEDULER 导出很方便。

DECLARE

  hand NUMBER;

BEGIN

  hand := Dbms_DataPump.Open(operation => 'EXPORT',

                              job_mode => 'FULL',

                              job_name => 'FULLEXPJOB',

                               version => 'COMPATIBLE');

  Dbms_DataPump.Add_File(handle => hand,

                       filename => 'expdp_plsql.log',

                      directory => 'DMPDIR',

                       filetype => 3);

  Dbms_DataPump.Add_File(handle => hand,

                       filename => 'expdp_plsql.dmp',

                      directory => 'DMPDIR',

                       filetype => 1);

  -- Dbms_DataPump.Set_Parameter(handle => hand,

  --                               name => 'ESTIMATE',

  --                              value => 'STATISTICS');

  Dbms_DataPump.Start_Job(hand);

END;

/

 

说明

一般情况下,导出/入不会遇到太多问题,只要注意一下几点就行:

  • 导出目录必须存在,否则导出工具无法写 export.log 导出文件日志,会报 Ora 错误;
  • 导出使用的用户必须对导出目录有读写权限。这个显而易见;
  • 导入时,相应的表空间和用户必须已存在。这个也显而易见。

注意这三点,一般都会成功导出/导入。

 

上面是 Datapump 导出/导入的步骤。下面概述一下该工具。

 

带着问题去学习!!!!到这里所产生的问题
1.exp-00091:exporting questionable statistics.是什么东西
2.用exp导出所有的表如何做。上面的需要事先知道表名,然后一个一个导出。
经baidu查询,
问题1解决办法如下:

Oracle 11g Release 1 (11.1) Data Pump 导出和导入概述


Oracle Data Pump(数据泵)技术可以使数据和元数据高速地从一个数据库移动到另一个数据库。该技术是 Oracle数据库数据移动实用工具 Data Pump Export 和 Import 的基础。也就是说,导出/导入工具是基于 Oracle 数据泵技术。

Data Pump 可以让你指定作业是否移动数据和元数据的一个子集。这是通过 Export 和 Import 参数,使用数据过滤和元数据过滤来完成。

指定Linux系统的NLS_LANG环境变量为数据库的字符集
1)查询数据库的字符集(方法很多只用一种)
SQL> select userenv('language') from dual;

Data Pump 导出

Data Pump 导出是一个把数据和元数据卸载到一个称为“转储文件集(dump file )”操作系统文件集的工具。转储文件集可以移动到另一个系统,并通过 Data Pump 导入工具加载。

转储文件集是由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的、二进制格式写入,只有 Data Pump 导入工具可以读取。导入期间,Data Pump Import 工具使用这些文件在转存文件集中定位每个数据库对象。

USERENV('LANGUAGE')

AMERICAN_AMERICA.ZHS16GBK

2)设置Linux操作系统的NLS_LANG环境变量
[oracle@RH207 exp]$export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
Window系统的环境变量的修改方法是:
C:>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

这样再次exp时就不会报EXP-00091: Exporting questionable statistics.错误了

 

按用户导

[oracle@db Downloads]$ exp

Export: Release 11.2.0.4.0 - Production on Sun Dec 18 12:50:18 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


Username: lcpsys
Password: 

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Enter array fetch buffer size: 4096 > 

Export file: expdat.dmp > 

(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 

Export grants (yes/no): yes > 

Export table data (yes/no): yes > 

Compress extents (yes/no): yes > 

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

--about to 即将,行将;刚要
About to export specified users ...
--指定要导出的用户名
User to be exported: (RETURN to quit) > lcpsys
--如果没有其它的用户名,直接回车退出配置模式,就开始导了。
User to be exported: (RETURN to quit) > 
--开始了
. exporting pre-schema procedural objects and actions
. exporting foreign function library names for user LCPSYS 
. exporting PUBLIC type synonyms
. exporting private type synonyms
. exporting object type definitions for user LCPSYS 
About to export LCPSYS's objects ...
. exporting database links
. exporting sequence numbers
. exporting cluster definitions
. about to export LCPSYS's tables via Conventional Path ...

 

 

问题2解决办法如下:
具体命令参数可以参考
exp help=y
1、EXP:
      有三种主要的方式(完全、用户、表)
      1、完全:
          EXP SYSTEM/123456 BUFFER=64000 FILE=full.dmp FULL=Y
          如果要执行完全导出,必须具有特殊的权限
      2、用户模式:
          EXP hr/123456    BUFFER=64000 FILE=hr.dmp OWNER=hr
          这样用户hr的所有对象被输出到文件中。
      3、表模式:
          EXP hr/123456    BUFFER=64000 FILE=hr-xue.dmp TABLES=xue
但是用imp导入后的表还是会去找原来的表空间进行恢复,创建一个数据库导出目录。          这样用户hr的表xue就被导出
2、IMP:
      具有三种模式(完全、用户、表)
      1、完全:
          IMP SYSTEM/123456 BUFFER=64000 FILE=full.dmp FULL=Y
      2、用户模式:
          IMP hr/123456    BUFFER=64000 FILE=hr.dmp FROMUSER=hr TOUSER=hr
          这样用户hr的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。
      3、表模式:
          IMP hr/123456    BUFFER=64000 FILE=hr-xue.dmp TABLES=xue
          这样用户hr的表xue就被导入。有一个问题是,如果表存在,数据不能导入,只需要在后面加入ignore=y参数就可以了

问题的现象:
EXP-00026: conflicting modes specified
EXP-00000: Export terminated unsuccessfully  

备份文件会生成 但是没有内容。
这个问题主要是 exp的时候 里面参数发生了冲突。
   比较常见的:
1.同时指定了 owner  和 tables
2.同时指定了 FULL 和tables
3.同时指定了多个owner和full
owner 表示导出整个用户或者多个用户  而tables表示只导出其中的表 。
要么只导出其中的表  要么导出整个用户。不然就会冲突了、

增删改相关行或表,再用备份的数据进行恢复。
sqlplus hr/123456
set pagesize 200
set linesize 200
create table xue(id integer,name varchar(25));
insert into xue values(1,'wang');
insert into xue values(2,'liu');
commit;

将表删除
drop table xue;
如果有索引关系的表,用下面
drop table mytest cascade constraints;

留下表结构,删除一行或所有数据。
delete from regions where region_id=5;
delete from regions

imp hr/123456
回答几个问题

带着问题去学习!!!!到这里所产生的问题
1.所要回答的问题有些不清楚,需要细查一下。
2.字符集的问题要处理一下。
经baidu查询,结果如下:

以上的这种方法算是一种逻辑备份,将数据导入到一个临时的文件之中。
还可以物理备份的方法,即将oradata/下面的所有数据全部复制到另外一个安全的地方,也叫冷备
还可以热备的方法。

ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。
  
  数据库逻辑备份方法
  
  ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份。
  
  表模式
  
  备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。
  
  若备份到本地文件,使用如下命令:
  
  exp icdmain/icd rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=exp_icdmain_csd_yyyymmdd.dmp
  log=exp_icdmain_csd_yyyymmdd.log
  tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
  
  若直接备份到磁带设备,使用如下命令:
  exp icdmain/icd rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=/dev/rmt0
  log=exp_icdmain_csd_yyyymmdd.log
  tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
  
  注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。
  
  用户模式
  
  备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。
  若备份到本地文件,使用如下命令:
  exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=exp_icdmain_yyyymmdd.dmp
  log=exp_icdmain_yyyymmdd.log
  若直接备份到磁带设备,使用如下命令:
  exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
  feedback=100000 volsize=0
  file=/dev/rmt0
  log=exp_icdmain_yyyymmdd.log
  注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。

    完全模式

  1、 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
  exp system/manager@TEST file=d:daochu.dmp full=y
   2、 将数据库中system用户与sys用户的表导出
  exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
  3、 将数据库中的表table1 、table2导出
  exp system/manager@TEST file=d:daochu.dmp tables=(table1,table2)
  4、 将数据库中的表table1中的字段filed1以"00"打头的数据导出
  exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
  上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。不过在上面命令后面 加上 compress=y 就可以了

删除某用户下的所有对象
Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助。

方法1:
drop user hr cascade;
    要退出所有的hr用户连接,才能正确执行。
drop tablespace USERS INCLUDING CONTENTS;
    不能删除默认永久表空间。

create user hr profile default identified by 123456 default tablespace USERS temporary tablespace TEMP account unlock;

--授权
grant dba to hr;
grant connect,resource to hr;

方法2:
写存储过程实现

DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);

Tab_name name_list:=name_list();
Tab_type type_list:=type_list();

sql_str VARCHAR2(500);
BEGIN
sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;

FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;

sqlplus hr/123456
drop table jobs cascade constraints;    这样直接删除可能会有问题。所以尽量用下面的步骤解决,因为看了以后,没有明白后续步骤。
drop table jobs
ORA-02449: unique/primary keys in table referenced by foreign keys
报错,用下面的方法解决

1.检查哪些表的外键引用了要删除的表的唯一/主键.
select A.*
from user_constraints A, user_constraints B
where b.table_name = 'MYTEST'
and a.constraint_type = 'R'
and a.r_constraint_name = b.constraint_name;

2.生成所有引用要删除表的外键的创建语句.
      select 'select dbms_metadata.get_ddl(''REF_CONSTRAINT'',''' ||
          A.CONSTRAINT_NAME || ''') FROM DUAL;'
       from user_constraints A, user_constraints B
       WHERE b.table_name = 'JOBS'
        and a.constraint_type = 'R'
        and a.r_constraint_name = b.constraint_name;

select 'drop table '|| table_name ||' cascade constraints' sql1 from user_tables;
     
3.执行步骤2中产生的SQL语句,获取外键定义.
      set long 3000
      set linesize 3000
      set pagesize 300
      执行步骤2产生的语句.
4.删除表.
      drop table mytest cascade constraints;
5.删除并重建表.
6.建立因创建该表所删除的外键约束.
      执行步骤3中获取到的sql语句.
7.检查各外键是否得到恢复,系统是否正常.

 

 

drop table emp purge;

purge recyclebin;

commit,事务与删除表没有关系,可以不用敲。

exp
没有数据的表是不导出的。

在实际的备份操作中,exp与imp用不了,因为在其导出的过程中,必须保证其他用户不更新数据。

数据库的冷备份,严格称为归档备份。指的是数据库要关闭服务,所有的事务都需要提交。
备份如下内容:oradata/目录下的内容
1.控制文件:通过v$controlfile数据字典找到
2.重做日志文件:通过v$logfile数据字典找到
3.数据文件:通过v$datafile数据字典找到
4.参数文件: 通过show parameter pfile找到
5.记录好相关文件的路径
6.关闭oracle服务,但是这个关有个问题,比如超市说关门,不是立马就关的,有时能关一个小时,在关闭其间还有少量的io.
    shutdown immediate
7.复制出所有的相关文件
8.重新启动oracle服务,多种方式
    startup或者将计算机关机一下,再开机,再startup

 

Data Pump 导入

Data Pump 导入是一个把导出的转存文件集加载到目标系统。转储文件集是由一个或多个包含表数据、数据库对象元数据和控制信息的磁盘文件组成。这些文件以专有的、二进制格式写入。

导入也可以用于直接从源数据库加载到目标数据库加载,而无需转储文件,使得导出和导入操作同时进行,最大限度地减少总时间。这称为“网络导入”。

导入也可以让你看到导入作业正在执行的所有 SQL DDL,而不实际执行的 SQL。这是通过导入 SQLFILE 参数完成的。

Data Pump API

Data Pump API 提供一个高速的机制,把所有或部分数据和元数据从一个数据库移动到另一个数据库。若使用 Data Pump API,你可以使用 DBMS_DATAPUMP PL/SQL 包提供的存储过程。Data Pump Export 和 Data Pump Import 实用工具是基于 Data Pump API。

Metadata API

元数据用程序编程接口( Metadata API)为你提供一个途径完成以下工作:

  • 检索一个对象的 XML 元数据
  • 以多种不同的方式传输 XML,包括把它传输到 SQL DDL
  • 提交 XML 以通过检索重建提取的对象

若使用元数据 API,您可以使用 DBMS_METADATA PL/SQL 包中提供的存储过程。元数据的目的,数据库中的每个实体都被模型化一个对象,它属于一个对象类型。例如,scott.emp 表是一个对象,它的对象的类型是 TABLE。当你获取一个对象的元数据时,必须指定对象类型。

 

Oracle 11g Release 1 (11.1) Data Pump 导出和导入模式


导出模式

导入模式

 

参考资料


  • Oracle 11g Release 1 (11.1) Documents Oracle Data Pump
  • Oracle 11g Release 1 (11.1) Documents 最初的导出/导入工具 exp/imp
  • Oracle 11g Release 1 (11.1) Data Pump 导出模式
  • Oracle 11g Release 1 (11.1) Data Pump 导入模式
  • Oracle 11g Release 1 (11.1) Data Pump API:DBMS_DATAPUMP
  • Oracle 11g Release 1 (11.1) Metadata API:DBMS_METADATA
  • Oracle 10g 以前的导出/入工具(exp/imp)
  • Oracle 工具
  • Oracle 10g 及之后导出/导入(Datapump Export/Import)工具

 

修改记录


  • 第一次 2012-04-09 [UPDATE][ADD]
  • 第二次 2012-04-11 [UPDATE][ADD]
  • 第三次 2013-03-09 [ADD]

必赢手机登录网址 1