oracle


逻辑备份

<h1>备份类型</h1> <p>1.物理备份:</p> <ul> <li>冷备</li> <li>RMAN</li> </ul> <p>2.逻辑备份:</p> <ul> <li>EXP/IMP:语句级别备份</li> <li>EXPDP/IMPDP:三种备份方式 表备份、用户备份、数据库备份,比EXP/IMP更加优化,以及定义灵活</li> </ul> <p>3.数据容灾:</p> <ul> <li>物理方式:DG</li> <li>逻辑方式:OGG</li> </ul> <h1>逻辑备份类型</h1> <p>导出工具将数据库中数据备份压缩成一个二进制系统文件,可以在不同OS间迁移 导入/导出: imp/exp 原始导入导出工具 oracle 10g之前的工具 数据泵: impdp/expdp oracle 10g之后的工具 --是一种高效的数据和元数据的迁移工具 有四种模式:</p> <ul> <li>用户模式:导出用户所有对象及对象中的数据</li> <li>表模式:导出用户所有表或者指定的表</li> <li>表空间模式:导出表空间(数据泵支持)</li> <li>整个数据库:导出数据库中所有对象</li> </ul> <h1>逻辑备份方式</h1> <h2>EXP/IMP 导出导入</h2> <h3>导出</h3> <p><strong>exp命令详解</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=4cf40ce4fe4065a40bfbcea5238d2c89&amp;amp;file=file.png" alt="" /> <strong>示例</strong> 1.将数据库完全导出 exp userid=scott/tiger file=/home/oracle/dmp01.dmp log=export.log full=y 2.将数据库中system⽤户与sys⽤户的表导出 exp &quot;/ as sysdba\&quot; file=/home/oracle/dmp/dmp02.dmp owner=system,sys 3.将数据库中的表table1 、table2导出 exp &quot;/ as sysdba\&quot; file=/home/oracle/dmp03.dmp tables=table1,table2 4.将 SCOTT 的 EMP 和 DEPT 表每个表导出 10 行。(不足10行的按照实际导出行数导出) exp userid=scott/tiger log=export.log tables=emp,dept query=&quot;'WHERE ROWNUM &lt;= 10'&quot;</p> <h3>导入</h3> <p><strong>exp命令详解</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ae88665214e1a087718bfa32e833107f&amp;amp;file=file.png" alt="" /> <strong>示例</strong> 1.将数据库完全导入 imp &quot;/ as sysdba\&quot; file=/home/oracle/dmp/dmp01.dmp full=y 2.将数据库中system⽤户与sys⽤户的表导入 imp &quot;/ as sysdba\&quot; file=/home/oracle/dmp/dmp02.dmp owner=scott imp &quot;/ as sysdba\&quot; fromuser=scott touser=new_scott ignore=y file=home/oracle/dmp/dmp02.dmp full=y 3.将数据库中的表table1 、table2导出 imp &quot;/ as sysdba\&quot; file=/home/oracle/dmp/dmp03.dmp tables=table1,table2</p> <p>帮助命令 exp help=y imp help=y</p> <h2>EXPDP/IMPDP 数据泵</h2> <p><strong>相比于EXP的异同</strong></p> <ul> <li>expdp可以并行处理数据,但速度更快,效率更高</li> <li>expdp可以只处理某些对象,不处理某些对象,或者只处理某些对象中满足条件的数据</li> <li>expdp导入时可以修改数据所在的 schema 名称,表空间名称以及数据文件名称</li> <li>expdp通过 db link 将远程数据库导出到转储文件,也可以通过 db link,直接将远程数据库中的数据导入到当前数据库。</li> <li>expdp导出模式:数据库 、表空间 、对象模式 、表 。</li> <li>EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用;EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。</li> <li>EXP可导出sys用户下的对象,但expdp不能以任何模式导出SYS, ORDSYS, EXFSYS, MDSYS, DMSYS, CTXSYS, ORDPLUGINS, LBACSYS, XDB, SI_INFORMTN_SCHEMA, DIP, DBSNMP and WMSYS等架构</li> </ul> <p>从Oracle Database 12c第2版(12.2)开始,出于安全原因,导入实用程序(imp)将不再以用户SYS的身份导入对象。如果转储文件包含需要以用户SYS身份重新创建的对象,则imp实用程序将尝试以用户SYSTEM身份重新创建它们。如果用户SYSTEM不能重新创建对象,则必须在导入完成后自己手动重新创建对象。 如果导入作业是由具有DBA角色的用户运行的,并且用户SYSTEM不能重新创建所有对象,则以下警告消息将写入日志文件中:IMP-00403XXXXXXXXXXXXXXXXX</p> <p>生成的SQL文件包含用户SYSTEM无法重新创建的对象的失败DDL。要重新创建这些对象,必须在导入完成后手动执行失败的DDL。</p> <p>通过将“ _sys.sql”附加到为LOG参数指定的文件名来自动命名SQL文件。例如,如果日志文件名是JulyImport,则SQL文件名将是JulyImport_sys.sql。</p> <p>如果未指定日志文件,则SQL文件的默认名称为import_sys.sql。</p> <p>注意:并非所有导入作业都会生成一个SQL文件。只有那些作业以用户DBA身份运行。</p> <p><strong>数据泵的目录</strong></p> <ul> <li>$ORACLE_BASE/admin/SID/dpdump</li> <li>$ORACLE_HOME/admin/SID/dpdump</li> <li>也可以指定⾃定义创建的 directory</li> </ul> <p><strong>expdp 命令详解</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=40cdec91bac7f030b0ac08c27f465d0f&amp;amp;file=file.png" alt="" /> compression= 压缩 ALL : 对导出的元数据和表数据都进行压缩,得到的导出文件是最小的,耗时也是最长的。 DATA_ONLY: 仅对表数据进行压缩,对于大数据量的导出效果明显,会比METADATA_ONLY方式得到更小的压缩文件。 METADATA_ONLY: 仅对元数据进行压缩,而不会对表数据进行压缩,这种压缩执行后效果一般不是很明显,不过速度比较快。 NONE: 不进行任何的压缩,导出后的文件也是最大的。 DEFAULT: 默认方式,即不指定COMPRESSION参数,会采用默认的压缩方式METADATA_ONLY。</p> <p>content= 用来指定导入导出的数据范围 content= all: 默认数据和元数据全部导出或者导入 data_only: 只导数据部分 metadata_only: 只导元数据</p> <p><strong>impdp 命令详解</strong> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=09baf25938848fa33eb8ca06a92b56d2&amp;amp;file=file.png" alt="" /> table_exists_action= 导入数据时使用 – 导入时如果表结构存在的情况下: – 此参数包含四个选项:skip ,append, truncate, replace skip: 默认值,忽略所有的导入,既不导入元数据,也不导入数据 append: 追加到表中需要导入的数据,但不能违反表的约束限制 truncate: 将原来的数据truncate,然后导入外部dumpfile的数据 replace 先删除原有表,用dumpfile的数据,替换原表数据</p> <h3>数据泵的使用</h3> <ol> <li>创建目录: <pre><code class="language-sql">#在OS上创建目录 mkdir -p ~/dmp_dir #在数据库中创建目录对象 SQL&amp;gt;create directory dmp_dir as '/home/oracle/dmp_dir'; #查看⽬录 SQL&amp;gt;select * from dba_directories; #将备份目录赋权给将要导出的用户 SQL&amp;gt;grant read,write on directory dmp_dir to user01;</code></pre></li> <li>导出数据</li> </ol> <pre><code class="language-sql">#用sys用户导出 expdp \&amp;quot;/as sysdba\&amp;quot; #按用户导 #导出用户 scott 和 HR 的所有对象              expdp system/oracle directory=dmp_dir dumpfile=scott_hr.dmp schemas=SCOTT,HR #导出远程用户的scott  expdp userid=system/oracle network_link='test' schemas=scott,hr #并行进程parallel  expdp &amp;lt;username/password@tnsname&amp;gt; directory=&amp;lt;backup_dir&amp;gt; dumpfile=&amp;lt;dumpfile_name.dmp&amp;gt; parallel=&amp;lt;n&amp;gt; job_name=&amp;lt;job_name&amp;gt; #按表名导    #导出用户 scott 的 emp 表和 HR 的 jobs 表 expdp system/oracle directory=dmp_dir TABLES=scott.emp,hr.jobs #按查询条件导        expdp &amp;lt;username/password@tnsname&amp;gt; directory=&amp;lt;backup_dir&amp;gt; dumpfile=&amp;lt;dumpfile_name.dmp&amp;gt; TABLES=&amp;lt;tb_name&amp;gt; query='WHERE deptno=20' #按表空间导  expdp &amp;lt;username/password@tnsname&amp;gt; directory=&amp;lt;backup_dir&amp;gt; dumpfile=&amp;lt;dumpfile_name.dmp&amp;gt; TABLESPACES=&amp;lt;tbs1_name,tbs2_name&amp;gt; #导整个数据库        expdp &amp;lt;username/password@tnsname&amp;gt; directory=&amp;lt;backup_dir&amp;gt; dumpfile=&amp;lt;dumpfile_name.dmp&amp;gt; FULL=y</code></pre> <p>&gt;<strong>schema</strong> 在oracle中,schema是数据库对象的集合;一个oracle用户对应一个schema,并且只能通过创建用户的方法创建schema,可以将schema称为user的别名,也就是schema名字同user名字对应并且相同。</p> <p>3.还原数据库</p> <pre><code class="language-sql">#导到指定用户下    impdp scott/tiger DIRECTORY=dmp_dir DUMPFILE=expdp.dmp SCHEMAS=scott #改变表的owner    impdp system/manager DIRECTORY=dmp_dir DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system #导入表空间          impdp system/manager DIRECTORY=dmp_dir DUMPFILE=tablespace.dmp TABLESPACES=example #导入数据库          impdb system/manager DIRECTORY=dmp_dir DUMPFILE=full.dmp FULL=y #追加数据              impdp system/manager DIRECTORY=dmp_dir DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION</code></pre> <p>&gt; <strong>并行操作(PARALLEL)</strong>  可以通过 PARALLEL 参数为导出使用一个以上的线程来显著地加速作业。每个线程创建一个单独的转储文件,因此参数 dumpfile 应当拥有和并行度一样多的项目。 可以指定通配符作为文件名,而不是显式地输入各个文件名,例如:  expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Export  注意:dumpfile 参数拥有一个通配符 %U,它指示文件将按需要创建,格式将为expCASES_nn.dmp,其中nn 从 01 开始,然后按需要向上增加。  在并行模式下,状态屏幕将显示四个工作进程。(在默认模式下,只有一个进程是可见的)所有的工作进程同步取出数据,并在状态屏幕上显示它们的进度。  分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。否则,与维护 Data Pump 作业相关的开销可能超过并行线程的效益,并因此而降低性能。并行方式只有在表的数量多于并行值并且表很大时才是有效的。  <strong>数据库监控 DBA_DATAPUMP_JOBS</strong> 监控作业的主视图是 DBA_DATAPUMP_JOBS,在作业上有多少个工作进程(列 DEGREE)在工作。  另一个重要的视图是 DBA_DATAPUMP_SESSIONS,当它与上述视图和 V$SESSION 结合时将给出主前台进程的会话 SID。  select sid, serial# from v$session 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$MCP.MAIN('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW01 started with worker id=1, pid=24, OS id=20532 to execute - SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA'); kupprdp:worker process DW03 started with worker id=2, pid=25, OS id=20534 to execute - SYS.KUPW$WORKER.MAIN('CASES_EXPORT', 'ANANDA');  它显示为数据泵操作启动的会话的 PID。您可以用以下查询找到实际的 SID:  select sid, program from v$session where paddr in (select addr from v$process where pid in (23,24,25));  PROGRAM 列将对应警报日志文件中的名称显示进程 DM (为主进程)或 DW (为工作进程)。如果一个工作进程使用了并行查询,比如说 SID 23,您可以在视图 V$PX_SESSION 中看到它,并把它找出来。它将为您显示从 SID 23 代表的工作进程中运行的所有并行查询会话:  select sid from v$px_session where qcsid = 23;  从视图 V$SESSION_LONGOPS 中可以获得其它的有用信息来预测完成作业将花费的时间。  select sid, serial#, sofar, totalwork from v$session_longops where opname = 'CASES_EXPORT' and sofar != totalwork;  列 totalwork 显示总工作量,该列的 sofar 数量被加和到当前的时刻 — 因而您可以用它来估计还要花多长时间。 </p> <h4>Oracle 10g 和11g的互相导入和导出</h4> <p>1) 可以用10g的client连接11g导出11g的数据库,即可导入10g  </p> <p>2) 用expdp,impdp,如:<br /> 在11g服务器上,使用expdp命令备份数据</p> <ul> <li>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</li> </ul> <p>3) 在10g服务器上,使用impdp命令恢复数据<br /> 准备工作:1.建库2.建表空间3.建用户并授权4.将aa.dmp拷贝到10g的dpdump目录下</p> <ul> <li>IMPDP USERID='SYS/cuc2009@cucf as sysdba' schemas=sybj directory=DATA_PUMP_DIR dumpfile=aa.dmp logfile=aa.log version=10.2.0.1.0</li> </ul>

页面列表

ITEM_HTML