轻松备份恢复:Oracle 数据库的导入与导出教程 (oracle导出导入数据库)

在使用 Oracle 数据库的过程中,备份与恢复是不可避免的任务。备份数据可以在遇到故障或意外情况时保证数据的安全性,而恢复数据可以帮助我们在故障修复后快速恢复数据库的完整性。这篇文章将为大家分享如何使用 Oracle 数据库的导入与导出功能进行简单操作,实现快速、轻松备份和恢复数据库。

一、备份数据库

在 Oracle 数据库中备份数据可以使用 exp 命令,通过执行以下命令可以导出指定表空间的所有对象。

exp 用户名/密码@连接字符串 file=导出文件名.dmp log=导出日志.log owner=用户名

用户名:指要导出的用户名称。

连接字符串:指数据库连接的地址,一般通过 TNS 或直接 IP 地址连接。

导出文件名.dmp:指导出后的数据文件。

导出日志.log:指导出后的操作日志文件。

如果需要导出当前用户的所有表,则可以执行以下命令:

exp 用户名/密码@连接字符串 file=导出文件名.dmp log=导出日志.log

导出后的数据文件将保存在指定本地路径中。

二、恢复数据库

在 Oracle 数据库中恢复备份数据可以使用 imp 命令。通过执行以下命令可以导入指定表空间的所有对象:

imp 用户名/密码@连接字符串 file=导入文件名.dmp log=导入日志.log fromuser=用户名 touser=用户名

导入时要注意 fromuser 和 touser 参数,fromuser 指导出时用的用户名,touser 指导入后被映射的用户名。如果是完全还原所有对象,则 fromuser 和 touser 参数要保持一致。

如果要导入所有数据库对象,可以执行以下命令:

imp 用户名/密码@连接字符串 file=导入文件名.dmp log=导入日志.log full=y

导入命令执行成功后,数据库就恢复到备份的状态了,数据表和对应的数据也都被还原了。

三、导出指定数据表

如果只需要备份数据中的某些表,而不是整个数据库,可以使用以下命令:

exp 用户名/密码@连接字符串 file=导出文件名.dmp log=导出日志.log tables=(表1,表2)

tables:指要导出的表名,用逗号隔开。

导出后的备份只包含指定的表。

四、导入指定数据表

与导出同理,如果只想恢复某些表,而不是整个数据库,可以使用以下命令:

imp 用户名/密码@连接字符串 file=导入文件名.dmp log=导入日志.log tables=(表1,表2) fromuser=用户名 touser=用户名

tables:指要恢复的表名,用逗号隔开。

此时将只还原备份文件中的指定表。

五、导出数据表中的数据

在 Oracle 数据库中,使用 exp 命令导出数据表时,默认只导出表结构,不包含表中的数据。如果需要导出表中的数据,则可以添加 rows=y 参数。

exp 用户名/密码@连接字符串 file=导出文件名.dmp log=导出日志.log owner=用户名 tables=(表1,表2) rows=y

六、导入数据表中的数据

与导出同理,如果想要恢复数据表中的数据,则在导入时需要添加 rows=y 参数。

imp 用户名/密码@连接字符串 file=导入文件名.dmp log=导入日志.log full=y rows=y

以上是 Oracle 数据库导入与导出的一些基本操作,可以很方便地进行数据库备份和恢复操作,提高了数据的安全性。希望这篇文章对大家有所帮助!

相关问题拓展阅读:

oracle 数据库导入导出

Oracle ExpImp导入导出工具性能调优

Oracle Exp/Imp工具是一个操作简单、方便灵活的备份恢复和数据迁移工具,它可以实施全库级、用户级、表级的数据备份和恢复。对于数据量在G级或G级以内,强调高可用性,可以容忍少量数据丢失的数据库系统,Exp/Imp是普遍使用的逻辑备份方式。目前现网很多生产系统均使用Exp/Imp进行备份恢复。数据量达到G级以后,备份恢复的时间明显拉长了,有没有方法能够有效提高Exp/Imp的速度呢?答案是肯定的,某些方法还可以成倍的提高速度,本文就从Exp、Imp两个工具分别探讨优化备份恢复性能的方法。

1 Exp调优

1.1 使用DIRECT和RECORDLENGTH选项

DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。

和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为更大I/O缓冲,即65535(64kb)。其用法如下:

exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log

直接路径导出根据Oracle版本不同,有一些使用限制。比较重要的限制有,8i及以下版本不支持导出客户端和数据库的字符集转换,因此导出前必须保证NLS_LANG设置正确;8.1.5及以下版本不支持导出含LOBs对象的表;不能使用QUERY参数等。

1.2 使用管道技术

管道是从一个程序进程向另一个程序进程单向传送信息的技术。通常,管道把一个进程的输出传给另一进程作为输入。如果导出的数据量很大,可以利用管道直接生成最终的压缩文件,所耗费的时间和不压缩直接导出的时间相当。这样一来,不仅能够解决磁盘空间不足的问题,而且省去了单独压缩文件的时间;如果需要传输导出文件,还可以减少网络传输的时间。比如,一个10G的文件单独压缩可能需要半小时以上的时间。虽然管道技术不能够直接缩短Exp/Imp本身的时间,但节省出来的压缩时间非常可观。管道和Exp结合的具体使用方法如下:

导出数据示例:

% mknod /tmp/exp_pipe p # Make the pipe

  % compress export.dmp.Z & # Background compress

  % exp file=/tmp/exp_pipe # Export to the pipe

2 Imp调优

Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。

2.1 使用管道技术

前面已经说明了Exp时如何使用管道,在导入时管道的作用是相同,不仅能够解决磁盘空间不足的问题,而且省去了单独解压缩文件的时间。在大数据量导入导出的时候,推荐一定要使用管道。

导入数据示例:

2.2 避免I/O竞争

Import是一个I/O密集的操作,避免I/O竞争可以加快导入速度。如果可能,不要在系统高峰的时间导入数据,不要在导入数据时运行job等可能竞争系统资源的操作。

2.3 增加排序区

Oracle Import进程先导入数据再创建索引,不论INDEXES值设为YES或者NO,主键的索引是一定会创建的。创建索引的时候需要用到排序区,在内存大小不足的时候,使用临时表空间进行磁盘排序,由于磁盘排序效率和内存排序效率相差好几个数量级。增加排序区可以大大提高创建索引的效率,从而加快导入速度。

8i及其以下版本:导入数据前增加数据库的sort_area_size大小,可设为正常值的5-10倍。但这个值设定会影响到所有会话,设的过高有可能导致内存不足出现paging, swapping现象。更为稳妥的方法是,对于大表和索引特别多的表,只导数据不导索引。导完数据后,创建一个会话,设定当前会话的sort_area_size一个足够大的值,再手工创建索引。

9i:在workarea_size_policy=AUTO的情况下,所有会话的UGA共用pga_aggregate_target定义的内存,不必单独设定sort_area_size。导入数据前增加pga_aggregate_target大小,如果机器内存够大,可从通常设定的500M提高到1-2G。pga_aggregate_target大小可以动态调整,导入完成后可在线调回原值。

2.4 调整BUFFER选项

Imp参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=

2.5 使用COMMIT=Y选项

COMMIT=Y表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次。这样会大大减少对系统回滚段等资源的消耗,对顺利完成导入是有益的。

2.6 使用INDEXES=N选项

前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N 只导入数据不创建索引,从而加快导入速度。

我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,之一次导入数据,第二次导入索引。其用法如下:

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=ignore=y rows=y indexes=n

imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=ignore=y rows=n indexes=y

2.7 增加LARGE_POOL_SIZE

如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。

检查数据库是否在MTS模式下:

SQL>select distinct server from v$session;

如果返回值出现none或shared,说明启用了MTS。

附录:EXP/IMP命令选项注释

>exp help=y

通过输入 EXP 命令和用户名/口令,您可以

后接用户名/口令的命令:

例程: EXP SCOTT/TIGER

或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”

按照不同参数。要指定参数,您可以使用关键字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,…,valueN)

例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)

或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的之一个参数。

关键字 说明(默认)关键字 说明(默认)

—-

USERID 用户名/口令FULL导出整个文件 (N)

BUFFER 数据缓冲区大小OWNER 所有者用户名列表

FILE输出文件 (EXPDAT.DMP) TABLES表名称列表

COMPRESS 导入到一个区 (Y)RECORDLENGTH IO 记录的长度

GRANTS 导出权限 (Y)INCTYPE 增量导出类型

INDEXES 导出索引 (Y)RECORD跟踪增量导出 (Y)

DIRECT 直接路径 (N)TRIGGERS 导出触发器 (Y)

LOG屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)

ROWS 导出数据行 (Y)PARFILE 参数文件名

CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)

OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)

FEEDBACK每 x 行的显示进度 (0)

FILESIZE每个转储文件的更大大小

FLASHBACK_SCN用于将会话快照设置回以前状态的 SCN

FLASHBACK_TIME用于获取最接近指定时间的 SCN 的时间

QUERY 用于导出表的子集的 select 子句

RESUMABLE遇到与空格相关的错误时挂起 (N)

RESUMABLE_NAME用于标识可恢复语句的文本字符串

RESUMABLE_TIMEOUT RESUMABLE 的等待时间

TTS_FULL_CHECK对 TTS 执行完整的或部分相关性检查

TABLESPACES要导出的表空间列表

TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)

TEMPLATE调用 iAS 模式导出的模板名

>imp help=y

可以通过输入 IMP 命令和您的用户名/口令

后接用户名/口令的命令:

例程: IMP SCOTT/TIGER

或者, 可以通过输入 IMP 命令和各种参数来控制“导入”

按照不同参数。要指定参数,您可以使用关键字:

格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,…,vlaueN)

例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N

或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的之一个参数。

关键字 说明(默认)关键字 说明(默认)

USERID 用户名/口令FULL导入整个文件 (N)

BUFFER 数据缓冲区大小FROMUSER 所有人用户名列表

FILE 输入文件 (EXPDAT.DMP) TOUSER用户名列表

SHOW 只列出文件内容 (N) TABLES 表名列表

IGNORE 忽略创建错误 (N)RECORDLENGTH IO 记录的长度

GRANTS 导入权限 (Y)INCTYPE 增量导入类型

INDEXES 导入索引 (Y)COMMIT提交数组插入 (N)

ROWS 导入数据行 (Y)PARFILE 参数文件名

LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)

DESTROY 覆盖表空间数据文件 (N)

INDEXFILE将表/索引信息写入指定的文件

SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)

FEEDBACK 每 x 行显示进度 (0)

TOID_NOVALIDATE跳过指定类型 ID 的验证

FILESIZE 每个转储文件的更大大小

STATISTICS始终导入预计算的统计信息

RESUMABLE在遇到有关空间的错误时挂起 (N)

RESUMABLE_NAME用来标识可恢复语句的文本字符串

RESUMABLE_TIMEOUT RESUMABLE 的等待时间

COMPILE 编译过程, 程序包和函数 (Y)

STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)

STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)

下列关键字仅用于可传输的表空间

TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)

TABLESPACES 将要传输到数据库的表空间

DATAFILES 将要传输到数据库的数据文件

TTS_OWNERS 拥有可传输表空间集中数据的用户

imp

system/manager

file=bible_db

log=dible_db

full=y

ignore=y

system/manager是用户名和密码

file=bible_db

是要导入的文件

log=dible_db是生成日志的名称

full=y是导入整个文件

ignore=y是忽略创建错误

数据库是a.dmp我想导入的时候,数据库是b

Private Sub Form_Load()

Picture1.Cls

Picture1.DrawWidth =’DrawWidth返回或设置图形方法输出的线宽。

Picture1.AutoRedraw = True

Picture1.BackColor = QBColor(0)’QBColor:用来表示所对应颜色值的 RGB 颜色码,参数:1~15

Picture1.Scale (-1500, 1500)-(1500, -1500)’Scale用以定义 Form、PictureBox 或 Printer 的坐标系统,参数:左上-右下

Picture1.Scale (0, 1500)-(1500, -1500)’Scale用以定义 Form、PictureBox 或 Printer 的坐标系统,参数:左上-右下

Picture1.Line (-1500, 0)-(1500, 0), QBColor(15) ‘画水平线

End Sub

继续支持.给我分吧.

如何在oracle中导入导出dmp数据库文件

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库饥哪服务器导出到本地的dmp文件,imp命

令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。

  执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,

  DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径,

  该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导李稿出。

  oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。

  SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。

  下面介绍的是导入导出的实例。

  数据导出:

  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 将数据库中的表inner_notify、notify_staff_relat导出

   exp aichannel/aichannel@TESTDB2 file= d:\data\newgnt.dmp tables=(inner_notify,notify_staff_relat)

  4 将数据库中的表table1中的字段filed1以”00″打头的数据导出

   exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\” where filed1 like ‘烂扰码00%’\”

  

   上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。

   也可以在上面命令后面 加上 compress=y 来实现。

  数据的导入

  1 将D:\daochu.dmp 中的数据导入 TEST数据库中。

   imp system/manager@TEST file=d:\daochu.dmp

   imp aichannel/aichannel@HUST full=y file=file= d:\data\newgnt.dmp ignore=y

   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

   在后面加上 ignore=y 就可以了。

  2 将d:\daochu.dmp中的表table1 导入

  imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

  基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

  注意:

  操作者要有足够的权限,权限不够它会提示。

  数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

  附录一:

  给用户增加导入数据权限的操作

  之一,启动sql*puls

  第二,以system/manager登陆

  第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)

  第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,

   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

   DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字

  第五, 运行-cmd-进入dmp文件所在的目录,

   imp userid=system/manager full=y file=*.dmp

   或者 imp userid=system/manager full=y file=filename.dmp

  执行示例:

  F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp

  屏幕显示

  Import: Release 8.1.7.0.0 – Production on 星期四 2月 16 16:50:

  (c) Copyright 2023 Oracle Corporation. All rights reserved.

  连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 – Production

  With the Partitioning option

  erver Release 8.1.7.0.0 – Production

  经由常规路径导出由EXPORT:V08.01.07创建的文件

  已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入

  导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)

  . 正在将AICHANNEL的对象导入到 AICHANNEL

  . . 正在导入表 “INNER_NOTIFY” 4行被导入

  准备启用约束条件…

  成功终止导入,但出现警告。

  附录二:

  Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.

   先建立import9.par,

   然后,使用时命令如下:imp parfile=/filepath/import9.par

   例 import9.par 内容如下:

   FROMUSER=TGPMS

   TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)

   ROWS=Y

   INDEXES=Y

   GRANTS=Y

   CONSTRAINTS=Y

   BUFFER=409600

   file==/backup/ctgpc_.dmp

   log==/backup/import_.log

oracle导出导入数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle导出导入数据库,轻松备份恢复:Oracle 数据库的导入与导出教程,oracle 数据库导入导出,如何在oracle中导入导出dmp数据库文件的信息别忘了在本站进行查找喔。


数据运维技术 » 轻松备份恢复:Oracle 数据库的导入与导出教程 (oracle导出导入数据库)