oracle数据导入与导出

  数据的导入导出

说明:

针对的对象:  数据的导入导出牵涉到的角色主要是工程实施人员。

需解决的问题:把所需要的数据从一个数据库中导入到另外一个数据库中。

1    工具方式

1.1         工具说明

1.  使用PLSQL Developer工具主要为了方便工程实施人员操作数据库,如导入、导出数据库对象。

2.    使用TOAD工具方便工程实施人员操作数据库且导入、导出数据的效率比较高。

3.    使用以上两种工具,实施人员无需在命令行下操作数据库,方便而且不易出错。

1.1.1      准备工作

1.  工具软件PLSQL Developer 、TOAD。

2.  记录数据源的oracle数据库信息(IP、端口、全局数据库名),记为SOURCE_DB;

3.  scheme(SOURCE_SCHM)、tablespace(默认表空间 SOURCE _SPACE,索引表空间 INDEX _SPACE );

4.  用于数据导出的账号(记录为EXPUSR);

5.  记录数据目标的oracle数据库信息(IP、端口、全局数据库名),记为DEST_DB;

6.  scheme(DEST_SCHM)、tablespace(默认表空间 DEST_SPACE,索引表空间 DESINDEX _SPACE);

7.  用于数据导入的账号(记录为IMPUSR)等信息。

8.  记录需要从数据源中导出的数据库对象,记为DB_OBJECTS;

9.  如果需要过滤导出数据,则要记录过滤条件,记为DATA_FILTER。

 

1.2         数据库对象

1.2.1      导出数据库对象

1.  启动PL/SQL Developer,以用户 EXPUSR 登录源Oracle数据库SOURCE_DB;

2.  从PL/SQL Developer菜单Tools中选择Export User Objects;

3.  导出数据库对象

a、 在User的下拉框中选择需要导出数据的

b、选中属性 Single file,include Owner, include Storage。

c、选择需要导出的数据库对象;

d、点击Export按钮则可以将数据库对象导出,此时会生成一个以sql为扩展名的文件(记录为EXPORT_FILE)。

1.1.1. 导入数据库对象

1.  修改Sql脚本

如果源数据的scheme和目标数据库的scheme不一致,或者源数据库的表空间和目标数据库的表空间不一致,需修改导出的EXPORT_FILE。

create table .ACTION_INFO 修改为

create table .ACTION_INFO

tablespace (源默认表空间)   --   改为目标默认表空间()

pctfree 10                               

initrans 1                                  

maxtrans 255                                 

storage                                       

(                                              

initial 64K                                    

minextents 1                                  

maxextents unlimited                          

);                                              

create index AK_CDR_D_DETAIL on CDR_D_DETAIL (USER_NUMBER)

tablespace (源索引表空间)  --à改为目标索引表空间()

pctfree 10

initrans 2

maxtrans 255

storage

(

initial 64K

minextents 1

maxextents unlimited

);

  using index

 tablespace (源索引表空间)  --à改为目标索引表空间()

  pctfree 10

  initrans 2

  maxtrans 255

  storage

  (

    initial 64K

    minextents 1

    maxextents unlimited

  );

2.  启动PL/SQL Developer,以用户 IMPUSR登录目标Oracle数据库DEST_DB;

3.  从PL/SQL Developer菜单中选择New下面的Command Window;

选择Editor选项,将EXPORT_FILE文件内容拷贝到Editor选项框中

按F8即可将数据库对象导入到DEST_SCHM中。

        

1.3         数据导入导出

使用TOAD工具进行数据导入导出。

1.3.1      导出数据

1.  启动TOAD,以EXPUSR登录源数据库SOURCE_DB;

2选择菜单中的Database->Export->Data Pump Export Wizard选项

 

 

2.  在Export选项中选择Tables

 

3.    在下拉框中选择源数据库的Scheme:SOURCE_SCHM,并选择需要导出的数据表。

4.  如果数据需过滤,则此处填写过滤条件DATA_FILTER。

 

5.  Content下拉框选择Data Only选项。

6.  Directory中选择所要导出数据的目录,Output file name(.dmp)给导出的数据指定一个文件名记为DUMP_FILE。

7.  按Finish即可将数据导出。

 

        1.3.2      导入数据        

8.  以用户 登录目标Oracle数据库DEST_DB;

9.  选择菜单中的Database->Import-> Data Pump Import Wizard选项

Import选项中选择Entire dumpfile。

 

10.      Source为导出源数据库的,Target为导入目标数据库的

 

11.      Content下拉框选项中选择Data Only。

12.      Directory:指定导入数据文件的路径;Input file name为所要导入的数据文件DUMP_FILE。

13.      按Finish即可将数据导入。

 

 

 

1.4         导入导出记录

SOURCE_DB

源数据库信息

SOURCE_SCHM

源数据要导出的用户

SOURCE _SPACE

源默认表空间

INDEX _SPACE

源索引表空间

EXPUSR

数据导出的账号

DEST_DB

目标数据库信息

DEST_SCHM

目标数据导入的用户

DEST_SPACE

目标默认表空间

DESINDEX _SPACE

目标索引表空间

IMPUSR

数据导入的账号

EXPORT_FILE

导出的sql脚本

DUMP_FILE

导出的数据文件

DB_OBJECTS

导出的数据库对象

DATA_FILTER

导出数据的过滤条件

 

2    命令行方式      

2.1         数据库对象导入

1、打开数据对象脚本,检查脚本是否正确。表空间是否匹配,索引是否建在正确的索引空间。

2、在命令行窗口输入数据对象脚本:@文件路径+文件名,例如:

@e:/biao/tables.sql

把数据对象脚本导入后,检查是否正确。包括表,索引,存储过程,视图等。检查对象个数是否匹配。

 

2.2         数据导出

使用expdp要先在数据库中创建directory如在D盘下建立dumptestdir,并给相应的用户read,write权限. 注意要以有权限的的用户登陆;

SQL>create directory dumpdir as 'd:\dumptestdir';

SQL>grant read,write on directory dumpdir to HUNAN;

1)        数据的导出方法

从数据库中把表数据导出到目录中:

>Expdp hunan/[email protected] tables(action_info) dumpfile=dumptest.dmp directory=dumpdir logfile=dumptest.log connect=data_only

2.3         数据导入

1)  使用Impdp要先在数据库中创建directory如在D盘下建立dumptestdir,并给相应的用户read,write权限.并把要导入的文件拷贝在此目录下,注意要以有权限的的用户登陆;

2)  把表数据导入到数据库中(先由上述方法把表结构导入到数据库中):

Impdp kuang/[email protected] dumpfile=”dumptestsj.dmp” directory=dumpdir remap_schema=hunan:kuang remap_tablespace=cdmadata:cdma content=data_only

 

常用一些参数说明:


DUMPFILE:导出后的文件名(*)

DIRECTORY:导出文件存放位置(位于服务器端)(*)

CONTENT:导出文件中包含的内容(默认为:ALL,可选DATA_ONLY/METADATA_ONLY)

FILESIZE:指定导出文件大小(单位为bytes).

JOB_NAME:此次导出进程使用的名称,方便跟踪查询(可选)

LOGFILE:日志文件名(默认为:export.log)


INCLUDE:导出时包含指定的类型

(例:INCLUDE=TABLE_DATA,

INCLUDE=TABLE:"LIKE 'TAB%'"

INCLUDE=TABLE:”NOT LIKE ‘TAB%’”…)

EXCLUDE:导出时排除的数据类型(例:EXCLUDE=TABLE:EMP)


FULL:全库导出时使用(同EXP的FULL,默认为N)

SCHEMA:导出某一个SCHEMA下的所有数据

TABLES:按表导出(这里的方法和EXP一样)

TABLESPACE:指定一个表空间导出.

QUERY:按表导出时,使用条件语句限定导出范围(同exp中的QUERY

 


 

3    Oracle备份恢复

3          

3.1         基于RMAN备份策略

1    

2    

3.1.1      RMAN简介

RMAN(Recovery Manager)是DBA的一个重要工具,用于备份、还原和恢复oracle数据库,RMAN 可以用来备份和恢复数据库文件、归档日志和控制文件,也可以用来执行完全或不完全的数据库恢复。具有如下特点:

1)  RMAN操作相对简单,很多工作自动完成

2)  RMAN 工具能以很多种方法备份 Oracle 数据库,给备份和恢复方法提供了很大的灵活性

3)  执行增量备份。RMAN 具有执行增量备份和完全备份的能力。增量备份仅备份从上次备份后修改了的内容,此方法允许你一周只有一天执行完全备份,而其它几天都执行增量备份,这样就提高了备份的性能

4)  提供目录信息列表。可以使用 RMAN的LIST和REPORT命令查询存储在catalog目录中有关备份的信息,这些命令提供显示信息的有效方法

5)  RMAN在进行联机备份时,自动判断block的一致性,不需要将数据文件处于备份状态

6)  RMAN可以提供一些关键信息的报告

7)  可以方便的检查介质上保存的备份是否可用

3.2         备份策略   

3.2.1      备份目标

保证目标数据库安全,使数据库的失效次数减到最少,从而使数据库保持最大的可用性;

当数据库不可避免地失效后,要使恢复时间减到最少,从而使恢复的效率达到最高;

当数据库失效后,要确保尽量少的数据丢失或根本不丢失,从而使数据具有最大的可恢复性。

 

3.2.2      备份策略制定准备

1) 以什么方式备份:

用RMAN的增量备份(差量备份),采用多级备份是为了减少了恢复所需要的时间和减少每天备份所需要的时间,而又保证系统有很好的恢复性。

2) 备份的数据保存在什么地方:

备份的数据应该异地保存,这样备份的安全才能有保证。

3) 备份时间安排:

由于备份时对系统I/O有较大影响,所以,建议在下班以后进行备份工作。

4) RMAN备份注意事项:

任何数据库的更改需要重新同步CATALOG目录或重新备份

3.2.3      具体的备份策略

1)    配置目标数据库:

确定数据库为归档模式

设置Flashback启用为ON

设置数据库启动时使用spfile参数

2)    配置rman数据库

3)    差异增量备份:每个月一次全备,周日一次零备,周一,二做二级备份,周三做一次一级的,周四,五,六再做二级备份。

rman> backup database;(数据库全备)

rman> backup incremental level 0 database;(周日)

rman> backup incremental level 2 database; (周一)

rman> backup incremental level 2 database; (周二)

rman> backup incremental level 1 database; (周三)

rman> backup incremental level 2 database; (周四)

rman> backup incremental level 2 database; (周五)

rman> backup incremental level 2 database; (周六)

说明:全备是对整个数据库的所有数据进行完整备份和0级备份的区别在0级可以有增量备份,全备则不可以。

0级备份是对整个数据库的所有数据进行完整备份

      1级备份是只对0级备份以后修改过的数据进行备份

      2级备份只是对1级备份以后修改过的数据进行备份

注意:具体备份恢复步骤参见1.3          

3.3         备份步骤

备份目标数据库和RMAN数据库准备工作:

(一)    目标数据库

a)  修改数据库归档状态,查看归档状态:

SQL> archive log list;

如果数据库未处于未归档模式下,则设置为归档模式

b)  启用 FLASHBACK DATABASE 事件记录,这样在不慎drop表时可以快速恢复。查看Flashback启用状态:

SQL> select dbid,name,flashback_on,current_scn from v$database;

如果没有flashback on,则进行如下设置:

SQL> shutdown immediate

SQL> startup mount

SQL> alter database flashback on;  

SQL> select dbid,name,flashback_on,current_scn from v$database;

SQL> alter database open;

c)  数据库启动时使用spfile参数,这样备份时spfile会和控制文件一起备份。

查看是否用spfile参数文件:

SQL> show parameter spfile

VALUE的值为空,数据库是用pfile文件启动的,如果有值,则为spfile启动,如果没有值,则进行如下设置:

创建spfile参数文件

SQL> create spfile from pfile

SQL> shutdown immediate

SQL> startup

SQL> show parameter spfile;

(二)    配置rman数据库

创建RMAN目录,以下步骤说明了在一个数据库中建立RMAN目录的过程。

a. 为目录创建一个单独的表空间

SQL>Create tablespace rmantablespace datafile ‘D:/rmantablespace.ora’ size 500m;

b.创建RMAN用户

SQL>Create user RMAN identified by RMAN default tablespace rmantablespace temporary tablespace temp;

c.给RMAN授予权限

SQL>Grant connect , resource , recovery_catalog_owner to rman;

d.打开RMAN

$>RMAN

e.连接数据库

RMAN>connect catalog rman/rman

f.创建恢复目录

RMAN>Create catalog tablespace rmantablespace;

注册目标数据库,恢复目录创建成功后,就可以注册目标数据库了,目标数据库就是需要备份的数据库,一个恢复目录可以注册多个目标数据库,注册目标数据库的命令为:

$>RMAN target sys/kzp4715712@kuang

RMAN>connect catalog rman/rman

RMAN>Register database;

数据库注册完成,就可以用RMAN来进行备份了。

d)  查看和修改RMAN备份配置

RMAN>show all;

查看RMAN默认备份参数,根据实际需求更改

RMAN>configure controlfile autobackup on;

配置参数指定进行任何备份时,都对控制文件和参数文件同时进行备份(默认OFF)

(三)    备份目标数据库

a)  对目标数据库进行日志切换,以便生成最新的归档文件进行备份

rman>sql ‘alter system archive log current’;

b)  全库备份:

RMAN>backup database;

备份目标数据库上所有的数据文件,控制文件与参数文件以及归档文件

c)  查看目标数据库的备份信息:

RMAN>list backup of database;

d)  增量备份:

Rman> backup incremental level 0 database; (周日)

Rman> backup incremental level 2 database; (周一)

Rman> backup incremental level 2 database; (周二)

Rman> backup incremental level 1 database; (周三)

Rman> backup incremental level 2 database; (周四)

Rman> backup incremental level 2 database; (周五)

Rman> backup incremental level 2 database; (周六)

3.4         恢复步骤

(一)    全库恢复

a)  连接目标服务器

>rman

RMAN> connect target sys/kzp4715712@orcl

b)  连接RMAN服务器

RMAN>connect catalog rman/rman

c)  假设目标服务器损坏

d)  启动目标服务器

RMAN>startup nomount;

RMAN>restore spfile from autobackup;修复参数文件

RMAN>restore controlfile from autobackup;修复控制文件

RMAN>restore database;修复数据文件

RMAN>alter database mount;启动到MOUNT状态

RMAN>recover database;进行修复

RMAN>alter database open resetlogs;重设日志文件打开数据库

e)  最后重建临时表空间

(二)    基于时间的恢复

基于时间的恢复可以将数据库恢复到过去某一个时间点,常用于在误操作删除数据后,将库恢复到删除时间之前,从而挽回丢失的数据。

RMAN> run{

sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss" ';

set until time '2009-04-08:11:00:00';

restore database;

recover database;

alter database open resetlogs;

}

4    基于EMP/IMP备份策略(oracle10g已不支持)

Oracle导出/导入(Export/Import)数据库备份方法:利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。     

4.1         简单导出数据(Export)和导入数据(Import)

Oracle支持三种方式类型的输出:

(一)    表方式(T方式),将指定表的数据导出。

(二)    用户方式(U方式),将指定用户的所有对象及数据导出。

(三)    全库方式(Full方式),将数据库中的所有对象导出。

  数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。

4.2         增量导出/导入

  增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。

  增量导出包括三种类型:

(一)    “完全”增量导出(Complete)

  即备份三个数据库,比如:

  exp system/kzp4715712 inctype=complete file=040731.dmp

(二)    “增量型”增量导出

  备份上一次备份后改变的数据,比如:

 Exp system/kzp4715712 inctype=incremental file=040731.dmp

(三)    “累积型”增量导出

  累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:

  exp system/manager inctype=cumulative file=040731.dmp

  数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。

  比如数据库的备份任务可以做如下安排:(括号中字母表示备份文件名)

  星期一:完全备份(A)

  星期二:增量导出(B)

  星期三:增量导出(C)

  星期四:增量导出(D)

  星期五:累计导出(E)

  星期六:增量导出(F)

  星期日:增量导出(G)

  如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:

  第一步:用命令CREATE DATABASE重新生成数据库结构;

  第二步:创建一个足够大的附加回滚。

  第三步:完全增量导入A:

  imp system/manager inctype=RESTORE FULL=y FILE=A

  第四步:累计增量导入E:

  imp system/manager inctype=RESTORE FULL=Y FILE=E

  第五步:最近增量导入F:

  imp system/manager inctype=RESTORE FULL=Y FILE=F

 


 

 

你可能感兴趣的:(数据库)