Oracle数据库导入导出

来源:互联网 发布:金盾加密软件授权 编辑:程序博客网 时间:2024/06/05 22:59


Oracle数据库有四种常用的备份方法,它们分别是导出/导入(EXP/IMP)、热备份、冷备份、rman备份。


1 导出、导入(Export、Import)

    利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去,这是人们最常用,也是比较可靠的一种备份恢复方法。在数据库的版本升级时一般采用这种方法。Oracle支持三种方式类型的输出,下面举例说明(jnth是用户名,thpassword是用户密码, oracle是数据库服务命名, yxgl_a、yxgl_b, yxgl_c是表名):

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

    备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式,若备份到本地文件,使用如下命令:

    exp jnth/thpassword@oracle rows=y indexes=n compress=n buffer=50000000 file=080813.dmp log=080813.log tables= yxgl_a,yxgl_b,yxgl_c

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

    备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式,若备份到本地文件,使用如下命令:

    exp jnth/thpassword@oracle owner=jnth rows=y indexes=n compress=n buffer=50000000 file=080813.dmp log=080813.log


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

    备份完整的数据库,备份命令为:

exp system/manager@oracle rows=y indexes=n compress=n buffer=50000000 full=y file=080813.dmp log=080813.log

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

1.4 恢复备份数据中的指定表

    若从本地文件恢复,使用如下命令:

    imp jnth/thpassword@oracle fromuser=jnth touser=jnth rows=y indexes=n commit=y buffer=50000000 ignore=n file=080813.dmp log=080813.log tables=yxgl_a,yxgl_b,yxgl_c


1.5 按照用户模式备份的数据进行恢复

    A. 恢复备份数据的全部内容

    若从本地文件恢复,使用如下命令:

    imp jnth/thpassword@oracle fromuser=jnth touser=jnth rows=y indexes=n commit=y buffer=50000000 ignore=n file=080813.dmp log=080813.log

    B. 恢复备份数据中的指定表

    若从本地文件恢复,使用如下命令:

    imp jnth/thpassword@oracle fromuser=jnth touser=jnth rows=y indexes=n commit=y buffer=50000000 ignore=n file=080813.dmp log=080813.log tables=yxgl_a,yxgl_b,yxgl_c

1.6 如果备份方式为完全模式,采用下列恢复方法
    若从本地文件恢复,使用如下命令:

    imp system/manager@oracle rows=y indexes=n commit=y buffer=50000000 ignore=y full=y file=080813.dmp log=080813.log

    导出、导入(Export、Import)的优点:
    ●简单易行;
    ●可靠性高;
    ●不影响数据库的正常运行。

    缺点:
    ●只能提供到“某一时间点上”的恢复,不能最大可能的恢复数据;
    ●数据量大时,恢复较慢。


2 冷备份

    冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。

2.1 冷备份中必须拷贝的文件包括

    所有数据文件

    所有控制文件

    所有联机REDO LOG文件

    Init.ora文件(可选)

    值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。

2.2下面是做冷备份的完整例子

2.2.1 关闭数据库

    sqlplus /nolog

    sql>connect /as sysdba

    sql>shutdown normal;

2.2.2 用拷贝命令备份全部的数据文件、重做日志文件、控制文件、初始化参数文件

    可以通过命令select v$tablespace.name,v$datafile.name from v$tablespace, v$datafile where v$tablespace.ts#= v$datafile.ts#;查看相关文件的具体位置。或通过查看Enterprise Manager Console 的初始化参数知道这些文件的具体位置。

2.2.3 重启Oracle数据库

    sql>startup

2.3 冷备份的优点

    ●非常快速、容易的备份方法,只需简单拷贝文件;
    ●非常容易恢复到某个时间点上,只需将文件再拷贝回去;
    ●能与归档方法相结合,做数据库“最佳状态”的恢复;
    ●低度维护,高度安全。

2.4 缺点

    ●单独使用时,只能提供到“某一时间点上”的恢复;
    ●实施冷备份的全过程中,数据库必须是关闭状态,因此会影响正常工作;
    ●不能按表或按用户恢复。

3 热备份

    热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。

3.1 查看归档模式

    SQL> archive log list;

    数据库日志模式      存档模式

    自动存档             启用

    存档终点            c:\oracle\ora92\RDBMS

    最早的概要日志序列     11

    下一个存档日志序列     13

    当前日志序列           13

    SQL>

3.2 如数据库在非归档模式下的,如下命令更改非归档模式为归档模式

    SQL> shutdown immediate; (立即关闭数据库)

    SQL> startup mount (启动实例并加载数据库,但不打开)

    SQL> alter database archivelog; (更改数据库为归档模式)

    SQL> alter database open; (打开数据库)

    SQL> alter system archive log start; (启用自动归档)

    SQL> exit (退出)


3.3 一旦数据库运行在archivelog状态下,就可以做备份了热备份的命令文件由三部分组成

    3.3.1 数据文件的备份


    (1) 设置表空间为备份状态

SQL>alter tablespace rlgl begin backup;

表空间已更改。

    (2) 备份表空间的数据文件

用操作系统的复制拷贝数据文件。

    (3) 回复表空间为正常状态

SQL> alter tablespace sysbs end backup

表空间已更改。

    3.3.2 备份归档日志文件

    在sqlplus上执行alter system switch logfile命令来强迫日志切换,以便所有的日志都被归档。通过在执行archive log list命令获取当前的日志顺序号,从最早的概要日志序列到当前日志序列的联机redo日志都应该拷贝出来。

3.3.3 使用alter database backup controlfile to trace;命令获得控制文件的一个备份,可以到%oracle_base%\admin\ %oracle_sid%\ ump目录中寻找最新的跟踪文件,其中有重建控制文件的全部命令。

3.4 恢复实例,假设表空间JNTH中的数据文件jinth1.dbf损坏

    SQL> startup

    ORACLE 例程已经启动。

    Total System Global Area 135338868 bytes

    Fixed Size 453492 bytes

    Variable Size 109051904 bytes

    Database Buffers 25165824 bytes

    Redo Buffers 667648 bytes

    数据库装载完毕。

    ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件

    ORA-01110: 数据文件 8: ’E:\ORACLE\ORADATA\ JNTH1.DBF’

    恢复过程:

    (1)可以先将损坏的表空间文件脱机。

    SQL> alter database datafile ’e:\oracle\oradata\jnth1.dbf’ offline;

    数据库已更改。

    (2)打开数据库。

    SQL> alter database open;

    数据库已更改。

    (3)将拷贝的文件jnth1.dbf拷贝回先前的文件夹E:\ORACLE\ORACLEDATA。

    (4)恢复数据库文件。

    SQL>recover datafile ’e:\oracle\oradata\jnth1.dbf’;

    介质恢复完成。

    (5)关闭数据库。

    SQL>shutdown immediate;

    (6)重新打开数据库。

    SQL> startup;

3.5 热备份的优点

    ●可在表空间或数据库文件级备份,备份的时间短;

    ●备份时数据库仍可使用;

    ●可以恢复到某一时间点上;

    ●恢复快速。

3.6 缺点

    ●不能出错,否则将不能正常恢复数据;

    ●维护较困难,需要一定的oracle数据库知识。

4 RMAN ( Recovery Manager, 恢复管理器 )备份恢复

    RMAN ( Recovery Manager, 恢复管理器 )是从Oracle8开始提供的一套用于备份和恢复的有利工具,它有两种使用界面:GUI(图形用户界面)和CLI(命令行界面)。使用RMAN可以完成Oracle 数据库备份和恢复的各种任务。现在许多oracle 备份恢复软件的内核实际上就是RMAN(例如 VERITAS NetBackup 备份软件)。

4.1 切换服务器归档模式

    C:\sqlplus /nolog (启动sqlplus)

    SQL> conn / as sysdba (以DBA身份连接数据库)

    SQL> archive log list (查看是否是归档模式,更改归档模式在热备份时已介绍)

4.2 连接

    C:\rman target=rman/rman@oracle (启动恢复管理器,oracle是服务名,根据自己的实际情况设定)

4.3 基本设置

    RMAN> configure default device type to disk; (设置默认的备份设备为磁盘)

    RMAN> configure device type disk parallelism 2; (设置备份的并行级别,通道数)

    RMAN> configure channel 1 device type disk format 'e:\backup1\backup_%U'; (设置备份的文件格式,只适用于磁盘设备)

    RMAN> configure channel 2 device type disk format 'e:\backup2\backup_%U'; (设置备份的文件格式,只适用于磁盘设备)

    RMAN> configure controlfile autobackup on; (打开控制文件与服务器参数文件的自动备份)

    RMAN> configure controlfile autobackup format for device type disk to 'e:\backup1\ctl_%F'; (设置控制文件与服务器参数文件自动备份的文件格式)

4.4 查看所有参数设置

    RMAN> show all;

4.5 查看数据库方案报表

    RMAN> report schema;

4.6 备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志

    RMAN> backup database plus archivelog delete input;

4.7 备份表空间及归档的重做日志,并删除旧的归档日志

    RMAN> backup tablespace system plus archivelog delete input;

4.8 备份归档日志

    RMAN> backup archivelog all delete input;

4.9 复制数据文件

    RMAN> copy datafile 1 to 'e:\backup1\datafile\1.ora';

4.10 查看备份和文件复本

    RMAN> list backup;

4.11验证备份

    RMAN> validate backupset 3;

4.12从自动备份中恢复服务器参数文件

    RMAN> shutdown immediate; (立即关闭数据库)

    RMAN> startup nomount; (启动实例到nomount 状态)

    RMAN> restore controlfile to '/backup1' from autobackup; (从自动备份中恢复控制文件)

4.13 恢复和复原全数据库

    RMAN> shutdown immediate; (立即关闭数据库)

    RMAN> exit (退出)

    将数据文件jnth1.ora,

    C:\ ren E:\oracle\oradata\oracle\jnth1.ora jnth1.bak;   

    C:\ ren E:\oracle\oradata\oracle\jnth2.ora jnth2.bak;   

    C:\rman target=rman/rman@oracle (启动恢复管理器)

    RMAN> startup pfile=C:\oracle\admin\oracle\pfile\ initoracle.ora (指定初始化参数文件启动数据库)

    RMAN> restore database; (还原数据库)

    RMAN> recover database; (恢复数据库)

    RMAN> alter database open; (打开数据库)


4.14 Rman备份的优点

    ●支持在线热备份;
    ●支持多级增量备份;
    ●减小所需要备份量;
    ●备份,恢复使用简单。


4.15 Rman备份的缺点

    ●维护较复杂,需要一定的专业知识。


Oracle数据库备份与还原命令

 
数据导出:
 
  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 将数据库中的表table1 、table2导出
 
  exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
 
  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
 
  上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
 
  在后面加上 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
 
安装oracle9I
Szportdb\szportdb\szportdb
用sysdba 登录建立用户:szportdb 表空间可以自己设定,也可以Users
倒入数据库。
 
Imp szportdb/szportdb@szportdb full=y C:\szportdb.dmp ignore=



如果使用的工具是pl/sql developer的话,点击 tools->export user objects 就可以导出当前用户的所有对象,导出的格式是.sql的。要导入可以点击tools->import tables->sql inserts,就可以导入。用exp/imp文件是这样写的exp user/password@databasename tables=(tablename) [此处如果不写tables是导出所有数据]file='你要导出的位置如:d:\exp.dmp'。用exp/imp的时候要注意,高版本的sqlplus不可以导出低版本的,如10g的不可以导出9i的数据库对象。

a.简介// 数据库的备份(导出)和恢复(导入)  *.dmp    1.逻辑备份和物理备份        一个数据库实例可以有多个用户,每个用户对应着一种方案,        每个方案里面有每个用户自己的表视图索引等;    2.导出/备份: 导出表、导出方案(同时导出表视图触发器等)、导出数据库        导出命令为exp命令,常用选项有:            userid:用于指定执行导出操作的用户名、口令、连接字符串            tables:指定表            owner:指定方案            full=y:用于指定执行导出操作的数据库            inctype:指定导出操作的增量类型            rows:指定执行导出操作是否要导出表中的数据            file:用于指定导出文件名
b. 创建用户及赋予权限    在sql/plus或者PL/SQL developer中运行:    导出或备份当前用户下的表,用scott用户登陆,导出scott用户下的emp表    1.用sys用户登陆数据库        conn sys/oracle@SIMLINK as sysdba;    2.创建一个新用户        create user exp_imp_dba identified by sys;    3.给该用户赋予dba权限    (1、scott用户备份自己表时也需要赋予dba权限;      2、对sys用户赋予dba权限后对表备份和恢复仍然需要输入用户名和密码,输入用户名时为 sys as sysdba才可以)        grant dba to exp_imp_dba;
C. 备份表和方案   在dos命令行中运行:    1.在oracle安装目录下BIN文件夹中有一个EXP.EXE程序,所以需要在BIN目录下运行导出命令,    如“E:\oracle\product\10.1.0\Db_1\BIN”    cmd    E:    cd oracle\product\10.1.0\Db_1\BIN    2.//导出单张表    exp exp_imp_dba/exp_imp_dba@SIMLINK tables=(scott.kkk) file=D:\kkk.dmp    3.//导出多张表    exp exp_imp_dba/exp_imp_dba@SIMLINK tables=(scott.kkk,scott.dept1) file=D:\kkk_dept1.dmp    4.//将数据库中的表table1中的字段filed1以"76"打头的数据导出    exp exp_imp_dba/exp_imp_dba@SIMLINK tables=(scott.emp) file=d:\emp.dmp query=\" where empno like '76%'\"    5.//只导出表结构    exp exp_imp_dba/exp_imp_dba@SIMLINK tables=(scott.emp) file=d:\emp_jiegou.dmp rows=n;    6.//当表比较大的时候,为了加快导出速度,可直接导出    exp exp_imp_dba/exp_imp_dba@SIMLINK  tables=(scott.emp) file=d:\emp.dmp direct=y    7.//导出方案(即一个用户下的所有表,视图,索引等)    exp exp_imp_dba/exp_imp_dba@SIMLINK owner=scott file=d:\scott.dmp  
D. 恢复/还原表和方案    1.//还原单张表(ignore=y 表示忽略建表错误)    1.1注意这个还原表的时候会重复插入,所以应该在sql/plus中先删除表中所有原数据    delete from scott.kkk;    delete from scot.dept1;    1.2DOS中BIN目录下运行:        imp exp_imp_dba/exp_imp_dba@SIMLINK  file=d:\kkk.dmp fromuser=scott tables=(kkk) ignore=y     或者首先在sql/plus环境下sys用户中对scott用户授权     grant dba to scott;        imp scott/tiger@SIMLINK file=d:\kkk.dmp tables=(kkk) ignore=y (没有表会自动创建)    1.3设置表主键后就不会添加重复数据,但这也是恢复成功的一种    alter table scott.dept1 add constraint dept1_pri primary key(deptno);    2.//还原多张表    imp exp_imp_dba/exp_imp_dba@SIMLINK file=d:\kkk_dept1.dmp fromuser=scott tables=(kkk,dept1) ignore=y    3.//还原方案    imp exp_imp_dba/exp_imp_dba@SIMLINK file=D:\scott.dmp  fromuser=scott touser=scott ignore=y
     E. 导出整个数据库    exp exp_imp_dba/exp_imp_dba@SIMLINK full=y inctype=complete file=d:\simlink.dmp    完全备份complete :对整个数据库的备份    增量备份incremental:是备份上一次完全导出后改变的数据。    累积备份cumulative :是备份自上次完全导出后改变的数据。
F. 恢复整个数据库    imp exp_imp_dba/exp_imp_dba@SIMLINK full=y  file= d:\simlink.dmp ignore=y最后补充一下用PL/SQL Developer备份和还原表  (1、E:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN下的tnsnames.ora文件中有数据库连接配置    2、但是好像因为压缩方式不一样,经试验和命令不兼容    3、这中方式只能备份和还原本用户下的表)   登陆用户scott/tiger->工具->导出表->选择pl/sql developer方式,之后看界面操作,略;   登陆用户scott/tiger->工具->导入表,重点介绍四种导入方式:   1、删掉表(Drop tables)          勾选之后,自动默认选择创建表(Create tables),并且截断表(Truncate tables)和删除记录(Delete tables)变为灰色不可用;这个选项在恢复前首先删除表,然后创建表,再恢复表数据;   2、创建表(Create tables)          在导入数据前,表还未创建时可勾选;   3、截断表(Truncate tables)          在导入数据前首先清空表数据,然后再导入数据。此项和删除记录(Delete tables)互斥;   4、删除记录(Delete tables)          和截断表的功能基本相同,单和截断表互斥,且速度较慢,一般不使用;

0 0
原创粉丝点击