数据库逻辑备份与恢复

时间:2022-06-22 14:00:20

物理备份与恢复:

冷备份:
找到所有数据文件,控制文件,联机重做日志文件的位置,关闭数据库,在操作系统上面复制备份,也可以使用sql>host copy 原文件名称  目标路径名称

Selectfile_name from dba_data_files;

Selectmember from v%logfile;

Selectvalue from v$parameter where name=’control_files’;

缺点:如果数据库处于24*7(每天24小时,每周7天)状态时,没有机会实现冷备份

 

热备份:
数据库在归档模式下进行的数据文件,日志文件,归档日志文件等的备份

查看是否为归档模式:

ARCHIVELOG LIST;

修改为归档模式:
SHUTDOWN IMMEDIATE;

STARTUPMOUNT;

ALTERDATABASE ARCHIVELOG/NOARCHIVELOG

ALTERDATABASE OPEN;

数据文件的备份,以表空间为单位:
找到相应表空间,以及对应的数据文件:

SELECTTABLESPACE_NAME,FILE_NAME FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME;

分别对每个表空间中的数据文件进行备份

Forexample:
备份users表空间的文件

先设置表空间为备份状态:

ALTERTABLESPACE USERS BEGIN BACKUP;

将表空间中所有的数据文件备份到磁盘下:

HOSTCOPY ‘D:\APP\LENOVO\ORADATA\ORCL\USRE01.DBF’ ‘D:\ORACLE\BACKUP\USER01.DBF’;

结束表空间的备份状态:

ALTERTABLESPACE USRS END BACKUP;

 

备份控制文件:
将控制文件备份为二进制文件:

ALTERDATABASE BACKUP CONTROLFILE TO ‘D:\ORACLE\BACKUP1\CONTROL.BKP’;

将控制文件备份为文本文件:

ALTERDATABASE BACKUP CONTROLFILE TO TRACE;

 

归档当前的联机重做日志文件

ALTERSYSTEM ARCHIVE LOG CURRENT;

ALTERSYSTEM SWITCH LOGFILE;

备份归档重做日志文件和初始化参数文件,直接在操作系统中复制 粘贴

 

 

非归档模式的恢复:
冷备份恢复数据库:关闭数据库,将备份的所有数据文件,控制文件,联机重做日志文件还原到原来所在的位置

 

归档模式恢复:

数据库级恢复:所有或者多数数据文件损坏的恢复

表空间级恢复:表空间中对应的数据文件的恢复

数据文件级恢复:对特定的数据文件进行恢复

 

数据库级恢复:

SHUTDOWNABORT;

STARTUPMOUNT;

RECOVERYDATABASE;

ALTERDATABASE OPEN;

 

 

表空间级恢复 EXAMPLE表空间中的数据文件损坏:

数据库处于关闭状态时:

SHUTDOWNABORT;

在操作系统上将备份的数据文件覆盖

STARTUPMOUNT;

RECOVERYTABLESPACE EXAMPLE;

ALTERDATABASE OPEN;

 

数据库处于关闭时:

STARTUPMOUNT;

ALTERDATABASE DATAFILE ‘D:\APP\LENOVO\ORADATA\ORCL\EXAMPLE01.DBF’ OFFLINE;

ALTERDATABASE OPEN;

ALTERTABLESPACE EXAMPLE OFFLINE FOR RECOVERY;

在操作系统上将备份的数据文件覆盖

RECOVERYTABLESPACE EXAMPLE;

ALTERTABLESPACE EXAMPLE ONLINE;

如果数据库处于打开的状态忽略前面三步。

 

数据文件级完全恢复:

数据库处于关闭状态

SHUTDOWNABORT;

在操作系统上将备份的数据文件覆盖

STARTUPMOUNT;

RECOVERYDATAFILE ‘D:\APP\LENOVO\ORADATA\ORCL\EXAMPLE01.DBF’;

ALTERDATABASE DATAFILE ‘D:\APP\LENOVO\ORADATA\ORCL\EXAMPLE01.DBF’ ONLINE;

ALTERDATABASE OPEN;

 

数据库处于打开状态:
STARTUP MOUNT;

ALTERDATABSE DATAFILE ‘D:\APP\LENOVO\ORADATA\ORCL\EXAMPLE01.DBF’ OFFLINE;

ALTERDATABASE OPEN;

在操作系统上将备份的数据文件覆盖

RECOVERYDATAFILE ‘D:\APP\LENOVO\ORADATA\ORCL\EXAMPLE01.DBF’;

ALTERDATABASE DATAFILE ‘D:\APP\LENOVO\ORADATA\ORCL\EXAMPLE01.DBF’ ONLINE;

 

总结:

数据库关闭的时候,将备份文件覆盖损坏的数据文件,在mount下执行recovery命令

数据库开启的术后,将数据文件脱机,然后将备份的文件覆盖损坏的文件, 执行recovery命令,再将数据文件联机

 

 

数据库的逻辑备份与恢复:

物理备份即可在数据库open的状态下进行也可以在关闭数据库后进行,但是逻辑备份和恢复只能在open的状态下进行,在数据库介质损坏而无法启动时,不能利用逻辑备份,数据库备份与恢复是以物理备份与恢复,逻辑备份与恢复为辅的

特点:
可以在不同版本的数据库间进行数据移植。

可以在不同的操作系统上运行的数据库间进行数据移植

可以在数据库模式之间传递数据

数据的导入导出与数据库物理结构没有关系

对数据库进行一次逻辑备份与恢复操作能重新组织数据,消除数据库中的链接及磁盘碎片,从而使数据库的性能有较大的提高

可以对数据库对象定义,约束,权限等的备份与恢复

 

常规技术与数据泵的比较:
Export和Import是客户端实用程序,可以在服务器端使用,也可以在客户端使用;

Expdp和Impdp是服务器端实用程序,只能在数据库服务器端使用。

利用Expdp,Impdp在服务器端多线程并行地执行大量数据的导出与导入操作。

数据泵技术具有重新启动作业的能力,即当发生数据泵作业故障时,DBA 或用户进行干预修正后,可以发出数据泵重新启动命令,使作业从发生故障的位置继续进行。

 

 

使用数据泵技术准备工作:

在使用Expdp,Impdp程序之前需要创建DIRECTORY对象,并将该对象的READ,WRITE权限授予用户。例如:

CREATE OR REPLACE DIRECTORY dumpdir AS'D:\ORACLE\BACKUP'; 

GRANT READ,WRITE ON DIRECTORY dumpdir TOSCOTT;

如果用户要导出或导入非同名模式的对象,还需要具有EXP_FULL_DATABASE和IMP_FULL_DATABASE权限。例如:

GRANT EXP_FULL_DATABASE, IMP_FULL_DATABASETO SCOTT;

 

Expdp调用接口:
命令行接口(Command-Line Interface):在命令行中直接指定参数设置。

参数文件接口(Parameter File Interface):将需要的参数设置放到一个文件中,在命令行中用PARFILE参数指定参数文件。

交互式命令接口(Interactive-Command Interface):用户可以通过交互命令进行导出操作管理。

 

Expdp导出模式:

全库导出模式(Full Export Mode):通过参数FULL指定,导出整个数据库。

模式导出模式(Schema Mode):通过参数SCHEMAS指定,是默认的导出模式,导出指定模式中的所有对象。

表导出模式(Table Mode):通过参数TABLES指定,导出指定模式中指定的所有表、分区及其依赖对象。

表空间导出模式(Tablespace Mode):通过参数TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义和数据。

传输表空间导出模式(Transportable Tablespace):通过参数TRANSPORT_TABLESPACES指定,导出指定表空间中所有表及其依赖对象的定义。通过该导出模式以及相应导入模式,可以实现将一个数据库表空间的数据文件复制到另一个数据库中。

 

Expdp帮助及参数:

获取Expdp帮助信息

C:\>expdp HELP=Y

Expdp参数

 

应用实例:

命令行方式导出:表导出模式

导出scott模式下的emp表和dept表,转储文件名称为emp_dept.dmp,日志文件命名为emp_dept.log,作业命名为emp_dept_job,导出操作启动3个进程。

C:\>expdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=emp_dept.dmp TABLES=emp,dept

          LOGFILE=emp_dept.log   

          JOB_NAME=emp_dept_job PARALLEL=3

命令行方式导出:模式导出模式。

导出scott模式下的所有对象及其数据。

C:\>expdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=scott.dmp LOGFILE=scott.log

          SCHEMAS=scott JOB_NAME=exp_scott_schema

 

命令行方式导出:表空间导出模式。

导出EXAMPLE,USERS表空间中的所有对象及其数据。

C:\>expdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=tsp.dmp

          TABLESPACES=example,users

命令行方式导出:传输表空间导出模式

导出EXAMPLE,USERS表空间中数据对象的定义信息。

C:\>expdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=tts.dmp

          TRANSPORT_TABLESPACES=example,users

          TRANSPORT_FULL_CHECK=Y LOGFILE=tts.log

注意:当前用户不能使用传输表空间导出模式导出自己的默认表空间。

命令行方式导出:数据库导出模式

将当前数据全部导出,不写日志文件。

C:\>expdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=expfull.dmp FULL=Y

          NOLOGFILE=Y

命令行方式导出:按条件查询导出

导出scott.emp表中部门号大于10,且工资大于2000的员工信息。

C:\>expdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=exp2.dmp TABLES=emp 

          QUERY='emp:"WHERE deptno=10 AND sal>2000"'

          NOLOGFILE=Y

 

参数文件方式导出:

首先创建一个名为scott.txt的参数文件,并存放到d:\backup目录下,其内容为:

SCHEMAS=scott

DUMPFILE=filter.dmp

DIRECTORY=dumpdir

LOGFILE=filter.log

INCLUDE=TABLE:"IN ('EMP','DEPT')"

INCLUDE=INDEX:"LIKE 'EMP%'"

INCLUDE=PROCEDURE

然后在命令行中执行下列命令。

C:\>expdp scott/tigerPARFILE=d:\scott.txt

 

交互命令方式导出

在当前运行作业的终端中按Ctrl+C组合键,进入交互式命令状态;

在另一个非运行导出作业的终端中,通过导出作业名称来进行导出作业的管理。

执行一个作业。

C:\>expdp scott/tiger FULL=YDIRECTORY=dumpdir

        DUMPFILE=fulldb1.dmp,fulldb2.dmp

        FILESIZE=2G PARALLEL=3

        LOGFILE=expfull.log JOB_NAME=expfull

作业开始执行后,按Ctrl+C组合键。

在交互模式中输入导出作业的管理命令,根据提示进行操作。

 Export>STOP_JOB=IMMEDIATE

  Are you sure you wish to stop this job ([Y]/N): Y

 

使用impdp导入数据:
Impdp调用接口:
命令行接口(Command-Line Interface)

参数文件接口(Parameter File Interface)

交互式命令接口(Interactive-Command Interface)

 

Impdp导入模式:
全库导入模式(Full Import Mode)

模式导入模式(Schema Mode)

表导入模式(Table Mode)

表空间导入模式(Tablespace Mode)

传输表空间导入模式(Transportable Tablespace)

 

Impdp帮助及参数:
impdp HELP=Y命令

 

 

Impdp应用实例:
命令行方式导入:表导入模式

使用逻辑备份文件emp_dept.dmp恢复scott模式下的emp表和dept表中数据。

C:\>impdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=emp_dept.dmp TABLES=emp,dept

          NOLOGFILE=Y CONTENT=DATA_ONLY

 

如果表结构也不存在了,则应该导入表的定义以及数据。

 C:\>impdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=emp_dept.dmp

          TABLES=emp,dept NOLOGFILE=Y

 

命令行方式导入:模式导入模式

使用备份文件scott.dmp恢复scott模式。

C:\>impdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=scott.dmp SCHEMAS=scott

          JOB_NAME=imp_scott_schema

如果要将一个备份模式的所有对象导入另一个模式中,可以使用REMAP_SCHEMAN参数设置。例如,将备份的scott模式对象导入oe模式中。

C:\>impdp scott/tiger DIRECTORY=dumpdir

         DUMPFILE=scott.dmp LOGFILE=scott.log

         REMAP_SCHEMA=scott:oe 

         JOB_NAME=imp_oe_schema

 

命令行方式导入:表空间导入模式

利用EXAMPLE,USERS表空间的逻辑备份tsp.dmp恢复USERS,EXAMPLE表空间。

C:\>impdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=tsp.dmp

          TABLESPACES=example,users

如果要将备份的表空间导入另一个表空间中,可以使用REMAP_TABLESPACE参数设置。例如,将USERS表空间的逻辑备份导入IMP_TBS表空间,命令为

C:\>impdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=tsp.dmp

          REMAP_TABLESPACE=users:imptbs

命令行方式导入:传输表空间导入模式。

将表空间USERS导入数据库链接source_dblink所对应的远程数据库中。

C:\>impdp scott/tiger DIRECTORY=dumpdir

          NETWORK_LINK=source_dblink 

          TRANSPORT_TABLESPACES=users

          TRANSPORT_FULL_CHECK=N

          TRANSPORT_DATAFILES=

                            'D:\ORACLE\USERS01.DBF'

命令行方式导入:数据库导入模式

利用完整数据库的逻辑备份恢复数据库。

C:\>impdp scott/tiger DIRECTORY=dumpdir

DUMPFILE=expfull.dmp FULL=Y NOLOGFILE=Y

命令行方式导入: 按条件查询导入

C:\>impdp scott/tiger DIRECTORY=dumpdir

         DUMPFILE=emp_dept.dmp TABLES=emp,dept

         QUERY=

                'emp: "WHERE deptno=20 ANDsal>2000"'

         NOLOGFILE=Y

 

命令行方式导入: 追加导入

如果表中已经存在数据,可以利用备份向表中追加数据。

C:\>impdp scott/tiger DIRECTORY=dumpdir

          DUMPFILE=emp_dept.dmp TABLES=emp

          TABLE_EXISTS_ACTION=APPEND

 

 

参数文件方式导入

首先创建一个名为empdept.txt的参数文件,并存放到d:\backup目录下,其内容为

TABLES=emp,dept

DIRECTORY=dumpdir

DUMPFILE=emp_dept.dmp

PARALLEL=3

然后在命令行中执行下列命令就可以实现数据的导入操作。

C:\>impdp scott/tigerPARFILE=d:\empdetp.txt

 

交互命令方式导入

与Expdp交互执行方式类似,在Impdp命令执行作业导入的过程中,可以使用Impdp的交互命令对当前运行的导入作业进行控制管理。

 

 

使用exp imp方式实现导入导出操作

导出:

注意:不要以sql语句操作,在exporacle bin文件夹下面的应用程序

导出表

导出方案

导出数据库:每个用户的方案

导出使用exp命令来完成,该命令常用的选项有:
userid:用于指定执行导出操作的用户名,口令,连接字符串

Tables:用于指定执行导出操作的表

Owner:用于指定执行导出操作的方案
full=y:用于指定导出操作的数据库

Inctype:用于指定执行导出操作的增量类型

Rows:用于指定至尊型导出操作是否要导出表中的数据

File:用于指定导出文件名

 

导出表:

导出自己的表:

Expuserid=scott/tiger@orcl tables=(emp,dept) file=d:\emp.dmp

 

导出其他方案的表:

如果用户要导出其他方案的表,则需要dba的权限或是

Exp_full_database的权限,比如system就可以导出scott的表exp userid=system/system@orcl tables=(scott.emp) file=d:\emp.dmp

 

导出表的结构:

Exp userid=scott/tiger@orcl tavles=(emp)file=d:\emp.dmp rows=n

 

使用直接导出的方式:

Expuserid=scott/tiger@orcl tables=(emp) file=d:\emp.dmp direct=y

这种方式比默认的常规方式速度要块,当数据量大时,可以考虑使用这样的方法,这是需要数据库的字符集要与客户端字符集完全一致,否则会报错

 

导出方案:
导出方案是指使用export工具导出一个方案或是多个方案中的所有对象(表,索引,约束)和数据,并存放在文件中

1.      导出自己的方案:

Expuserid=scott/tiger@orcl owner=scott file=d:\scott.dmp;

2.      导出其他方案

如果用户要导出其他方案,则需要dba权限或是

Exp_full_database的权限,例如system 用户就可以导出任何方案

Expuserid=system/system@orcl owner=(system,scott) file=d:\system.dmp

 

导出数据库:

导出数据库是指利用export导出所有数据库中的对象及数据

要求改用户具有dba权限或是exp_full_database权限

Expuserid=system/system@orcl full=y inctype=complete file=orcl.dmp;

 

 

 

导入:
导入就是使用工具import将文件中的对象和数据导入到数据库中,但是导入要使用的文件必须是export所导出的文件,与导出相似,导入也分为导入表,导入方案,导入数据库三种方式:

Imp常用的选项有:

Userid:用于指定执行导入操作的用户名,口令,连接字符串

Tables:用于指定执行导入操作的表
formuser:用于指定源用户
touser:用户指定目标用户

File:用于指定导入文件名

Full=y:用于指定执行导入整个文件

Inctype:用于指定执行导入操作的增量类型

Rows:指定是否要导入表行

ignore:如果表存在,则只是导入数据

 

 

导入自己的表:注意不要加上分号,否则找不到文件

Impuserid=scott/tiger@orcl tables=(emp) file=d:\zbcxy.dmp;

 

导入表到其他用户:

要求该用户具有dba的权限,或是imp_full_database权限

Impuseid=system/system@orcl tables=(emp) file=d:\zbcxt.dmp touser=scott

 

导入表结构:

只导入表的结构而不导入数据

Impuserid=scott/tiger@orcl tables=(emp) file=d:\zbcxy.dmp rows=n

 

导入数据:

如果对象已经存在可以只导入表的数据:

Impuserid=scott/tiger@orcl tables=(emp) file=d:\xxx.dmp ignore=y

 

 

导入方案:

导入方案是指使用import工具将文件夹中的对象和数据导入到一个或是多个方案中,如果要导入其他方案,要求改用户具有dba的权限,或是imp_full_database

 

导入自身的方案:

Impuserid=scott/tiger file=d:\xx.dmp

导入其他方案:

Impuserid=system/system file=d:\xx.dmp fromuser=system touser=scott

 

 

导入数据库:

在默认情况下,当导入数据库时,会导入所有对象结构和数据,案列如下:

Impuserid=system/manager full=y file=d:\xx.dmp