当前位置: 首页 > news >正文

使用exdp 备份数据库

使用expdp工具备份

expdp属于逻辑备份。逻辑备份是指利用Oracle提供的导出工具,将数据库中选定的记录集或数据字典的逻辑副本以二进制文件的形式储存到操作系统中。逻辑备份的二进制文件称为转储文件,以dmp格式存储。
在Oracle 11g数据库中提供了Data Pump Export(EXPDP)实用程序,实现数据的逻辑备份与恢复。
EXPDP是服务器端程序,其转储文件只能存放在由DIRECTORY对象指定的特定数据库服务器操作系统目录中,而不能使用指定的操作系统目录。
EXPDP工具的执行可以采用3种方式:交互方式、命令行方式及参数文件方式。命令行方式是在命令行中直接指定参数设置;参数文件方式是将参数的设置信息存放到一个参数文件中,在命令行中用PARFILE参数指定参数文件;交互方式是通过交互式命令进行导出作业管理。
EXPDP提供了5种导出模式,在命令行中通过参数设置来指定。
全库导出模式:通过参数FULL指定,导出整个数据库。
模式导出模式:通过参数SCHEMAS指定,是默认的导出模式,导出指定模式中的所有对象。
表导出模式:通过参数TABLES指定,导出指定模式中指定的所有表、分区及其依赖对象。
表空间导出模式:通过参数TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义和数据。
传输表空间导出模式:通过参数TRANSPORT_TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义。通过该导出模式以及相应导入模式,可以实现将一个数据库表空间的数据文件复制到另一个数据库中。
EXPDP命令的常用参数及其说明,见表13-1。
表13-1 expdp命令说明
参数名称 说明
ATTACH 把导出结果附加在一个已存在的导出作业中,默认为当前模式唯一的导出作业
CONTENT 指定要导出的内容。CONTENT取值为ALL或者DATA_ONLY或者METADATA_ONLY。ALL表示导出对象的定义及其数据;DATA_ONLY表示只导出对象的数据;METADATA_ONLY表示只导出对象的定义。默认为ALL
DIRECTORY 指定转储文件 和日志文件所在位置的目录对象,该对象由DBA预先创建
DUMPFILE 指定转储文件名称列表,可以包含目录对象名,默认值为expdp.dmp
EXCLUDE 指定导出操作中要排除的对象类型和对象定义
FILESIZE 指定转储文件的最大尺寸
FULL 指定是否进行全数据库导出,包括所有数据及定义
HELP 指定是否显示EXPDP命令的在线帮助
INCLUDE 指定导出操作中要导出的对象类型和对象定义
JOB_NAME 指定导出作业的名称
LOGFILE 指定导出日志文件的名称
NOLOGFILE 指定是否生成导出日志文件
PARALLEL 指定执行导出作业时的并行进程最大个数
PARFILE 指定导出参数文件的名称
QUERY 指定导出操作中SELECT语句中的数据导出条件
SCHEMAS 指定进行模式导出及模式列表
TABLES 指定进行表模式导出及表列表
TABLESPACES 指定进行表空间模式导出及表空间列表
TRANSPORT_TABLESPACES 指定进行传输表空间模式导出及表空间列表

13.3.1导出数据
【例13-2】在准备要备份的数据库服务器上创建备份目录Oracle_bak,使用expdp
实现以下需求:
备份整个数据库;
把schemas用户数据导出;
把表空间tbs1,tbs2导出;
把表table1,table2导出;
把表table1按条件导出;
在后面使用sql命令创建的逻辑目录并不是在OS上创建目录,所以先要在服务器上创建一个目录),代码如下:

su Oracle$ mkdir /home/Oracle/Oracle_bak

用管理员身份登录到sqlplus,代码如下:
$ sqlplys /nolog
SQL> conn sys/Oracle as sysdba
创建逻辑目录,代码如下:
SQL> create directory data_dir as ‘/home/Oracle/Oracle_bak’;
查看管理员目录是否存在,代码如下:
SQL> select * from dba_direcories;
使用管理员用户给指定的用户赋予在该目录的操作权限(比如该用户需要备份自己的数据),代码如下:
SQL> grant read,write on directory data_dir to C##BAK_TEST_USER;
导出有五种方式:
(1)全量导出数据库,代码如下:
$ expdp sys/Oracle@orcl dumpfile=expdp.dmp directory=data_dir full=y logfile=expdp.log
(2)schemas按用户导出,代码如下:
$ expdp user/passwd@orcl schemas=user dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
(3)按表空间导出,代码如下:
$ expdp sys/passwd@orcl tablespace=tbs1
,tbs2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
(4)导出表,代码如下:
$ expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
(5)按查询条件导出,代码如下:
$ expdp user/passwd@orcl tables=table1=‘where number=1234’ dumpfile=expdp.dmp directory=data_dir logfile=expdp.log
13.3.2导入数据
首先将需要导入的数据文件存放到需要导入的数据库服务器上,参照导出的时候的建立目录方式,建立物理目录和逻辑目录(只是建目录即可,如果需要给用户权限则加上给用户权限的那步)使用命令导入。
【例13-3】使用imp命令,实现以下导入需求:
以系统用户sys登陆服务器名称为oracl的服务器,把整个数据库导入;
然后把A用户中表table1和table2导入到B用户中。
将A用户表空间TBS01、TBS02、TBS03导入到表空间A_TBS,将用户B的数据导入到A,并生成新的oid防止冲突。
从A用户中把表table1和table2导入到B用户中;
将表空间TBS01、TBS02、TBS03导入到表空间A_TBS,将用户B的数据导入到A;
导入表tbs1空间;
注意本例中的密码都使用passwd,在实际应用中应该以实际密码为准
(1)全量导入数据库,代码如下:
impdp sys/passwd@orcl directory=data_dir dumpfile=expdp.dmp full=y

(2)从A用户中把表table1和table2导入到B用户中,代码如下:
impdp B/passwd@orcl tables=A.table1,A.table2 remap_schema=A:B directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;
(3)将A用户表空间TBS01、TBS02、TBS03导入到表空间A_TBS,将用户B的数据导入到A,并生成新的oid防止冲突,代码如下:
impdp A/passwd@orcl remap_tablespace=TBS01:A_TBS,TBS02:A_TBS,TBS03:A_TBS remap_schema=B:A FULL=Y transform=oid:n
directory=data_dir dumpfile=expdp.dmp logfile=impdp.log
(4)导入表空间,代码如下:
impdp sys/passwd@orcl tablespaces=tbs1 directory=data_dir dumpfile=expdp.dmp logfile=impdp.log
并行操作可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。可以指定通配符作为文件名,而不是显式地输入各个文件名,代码如下:
expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export
注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为exp CASES_nn.dmp,其中nn 从 01 开始,然后按需要向上增加。
在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。
数据库监控还可以从数据库视图获得关于运行的 Data Pump 作业的更多信息。监控作业的主视图是 DBA_DATAPUMP_JOBS,它可以显示在作业上有多少个工作进程(列 DEGREE)在工作。
另一个重要的视图是 DBA_DATAPUMP_SESSIONS,当它与上述视图和 VKaTeX parse error: Expected 'EOF', got '#' at position 52: …ect sid, serial#̲ from vsession s, dba_datapump_sessions d where s.saddr = d.saddr;
这条指令显示前台进程的会话。更多有用的信息可以从警报日志中获得。当进程启动时,MCP 和工作进程在警报日志中显示如下:
kupprdp:master process DM00 started with pid=23, OS id=20530 to execute - SYS.KUPM M C P . M A I N ( ′ C A S E S E X P O R T ′ , ′ A N A N D A ′ ) ; k u p p r d p : w o r k e r p r o c e s s D W 01 s t a r t e d w i t h w o r k e r i d = 1 , p i d = 24 , O S i d = 20532 t o e x e c u t e − S Y S . K U P W MCP.MAIN('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute - SYS.KUPW MCP.MAIN(CASESEXPORTANANDA);kupprdp:workerprocessDW01startedwithworkerid=1pid=24OSid=20532toexecuteSYS.KUPWWORKER.MAIN(‘CASES_EXPORT’, ‘ANANDA’); kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute - SYS.KUPW W O R K E R . M A I N ( ′ C A S E S E X P O R T ′ , ′ A N A N D A ′ ) ; 它显示为数据泵操作启动的会话的 P I D 。可以用以下查询找到实际的 S I D ,代码如下: s e l e c t s i d , p r o g r a m f r o m v WORKER.MAIN('CASES_EXPORT', 'ANANDA'); 它显示为数据泵操作启动的会话的 PID。可以用以下查询找到实际的 SID,代码如下: select sid, program from v WORKER.MAIN(CASESEXPORTANANDA);它显示为数据泵操作启动的会话的PID。可以用以下查询找到实际的SID,代码如下:selectsidprogramfromvsession where paddr in (select addr from v p r o c e s s w h e r e p i d i n ( 23 , 24 , 25 ) ) ; P R O G R A M 列将对应警报日志文件中的名称显示进程 D M 或 D W ( 为工作进程 ) 。如果一个工作进程使用了并行查询,比如说 S I D 23 ,可以在视图 V process where pid in (23,24,25)); PROGRAM 列将对应警报日志文件中的名称显示进程 DM 或 DW (为工作进程)。如果一个工作进程使用了并行查询,比如说 SID 23,可以在视图V processwherepidin(232425));PROGRAM列将对应警报日志文件中的名称显示进程DMDW(为工作进程)。如果一个工作进程使用了并行查询,比如说SID23,可以在视图VPX_SESSION 中看到它,并把它找出来。它将为显示从 SID 23 代表的工作进程中运行的所有并行查询会话,代码如下:
select sid from v p x s e s s i o n w h e r e q c s i d = 23 ; 从视图 V px_session where qcsid = 23; 从视图 V pxsessionwhereqcsid=23;从视图VSESSION_LONGOPS中可以获得其它的有用信息来预测完成作业将花费的时间,代码如下:
select sid, serial#, sofar, totalwork from v$session_longops where opname = ‘CASES_EXPORT’ and sofar != totalwork;
列 totalwork 显示总工作量,该列的 sofar 数量被加和到当前的时刻 — 因而可以用它来估计还要花多长时间。
不同版本数据库之间数据互导
如将11g数据库的数据导入导10g数据库的服务器上。
首先在11g服务器上导出,代码如下:
EXPDP USERID=‘SYS/cuc2009@cuc as sysdba’ schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0
然后在10g数据库服务器上导入,代码如下:
IMPDP USERID=‘SYS/cuc2009@cucf as sysdba’ schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2
没嗯

相关文章:

  • [Agent]AI Agent入门02——ReAct 基本理论与实战
  • 测试反馈陷入死循环?5大策略拆解新旧Bug难题
  • InitializingBean接口和@PostConstruct-笔记
  • 鸢尾花(Iris)数据集的多模型分类与可视化分析工具
  • Linux系统之----程序地址空间
  • 状态模式 (State Pattern)
  • 已有 npm 项目,如何下载依赖、编译并运行项目
  • STM32 RTC配置
  • JQ6500语音模块详解(STM32)
  • Android 热点开发调试总结
  • locust压力测试
  • LeetCode热题100--560.和为K的子数组(前缀和)--中等
  • ubuntu安装docker,conda,tmux,btop,nvitop
  • ai环境cuda cudnn conda torch整体迁移 wsl docker
  • vue的生命周期 以及钩子
  • 第二章:Agent System
  • 【亚马逊云】AWS Wavelength 从理论讲解到实验演练
  • AWS PrivateLink vs Lattice:深度解析两大网络服务的异同
  • python_股票月数据趋势判断
  • [leetcode]2302.统计得分小于k的子数组
  • 新造古镇丨上海古镇朱家角一年接待164万境外游客,凭啥?
  • “85后”潘欢欢已任河南中豫融资担保有限公司总经理
  • 柳州警方通报临牌车撞倒行人:扣留涉事车辆,行人无生命危险
  • 新干式二尖瓣瓣膜国内上市,专家:重视瓣膜病全生命周期管理
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 闲暇时间的“堕落”