日期:2014-05-16  浏览次数:20497 次

手工备份恢复--导入导出(练习15.16.17)
到目前为止介绍的备份和恢复活动都是物理操作,如果只希望把数据库的数据和对象拷入或拷出Oracle数据库,又如何处理呢?Oracle应用程序Export(导出)和Impot(导出)可以把一个数据库的逻辑内容拷贝到一个Oracle二进制格式的转储文件中,并把该文件保存在磁盘或者磁带上,当需要时可以把该二进制文件内容读入一个Oracle数据库库中以创建其中包含的对象。这样的逻辑转移可以在同一个数据库上进行,也可以在不同的Oracle数据库之间进行,即使这些数据库位于硬件和软件配置不同的平台上。
当在一个Oracle数据库上运行Export时,所有的非数据字典对象(如:表)都提取到一个文件中,Imort应用程序从一个Export转出文件中读取对象定义以及表数据,并在Oracle数据库中创建这些对象。导出文件可以作为除正常的物理备份之外的备份。使用Export/Import需要注意的要点:

导入操作只能由Oracle导入应用程序读取;
导入应用程序的版本不能比用于创建转储文件的导出应用程序的版本老;
在运行导入或导出应用程序时数据库必须打开;
导出和导入应用程序可以在任何Net8客户机上运行;所处理的文件常常存放在客户机上,NET8导出或导入会引起额外的网络通信开销。
Export/Import有四种模式:

完整数据库模式(Full database mode):导出数据库的内容写入到一个文件中,但某些用户对象(SYS、ORDSYS、CTXSYS、MDSYS、ORDPLUGINS)并不导出,定义用户模式的导入参数是FULL=Y;
用户模式(User mode) :属于特定用户的所有数据库对象写到一个文件中,该用户的所有表、索引、视图、触发器、同义词、数据库链接、对象、存储代码等,导入用户是在FROMUSER参数中定义;
表模式(Table mode) :单个表以及相关的对象(例如:索引、约束、触发器、授权)写入到一个文件中,每个表用TABLES参数命名;
表空间模式(Tablespace mode) :对应所选表空间以及这些表空间中包括所有对象元数据写入一个文件中,实际的表数据(行)并不写入到导出文件中。产生的导出文件连同表空间数据文件一个从源数据库拷贝到目标数据库,在导入过程中表空间和对象元数据添加到目标数据库上。
Oracle导出和导入应用程序参数说明:

参数
描 述

Userid
Userid参数为运行导出/导入应用程序的用户提供数据库用户的id和口令,如果以SCOTT身份连接数据库,应输入:

Userid=scott/tiger

如果准备在NET8连接,应该输入:

Userid=scott/tiger@pracitce

如果必须以SYSDBA身份运行导出或导入程序,应该输入:

Userid=”scott/tiger as SYSDBA”

File
参数file定义导出应用程序将要创建的或者导入应用程序将要读取的文件名称,可以完整给出路径名称;如果只提供文件名称,文件将创建到当前目录下或从当前目录下读取;如果没有提供文件名称,这两种应用程序在当前工作目录下寻找expdat.dmp文件

Log
导出/导入屏幕数据可以捕捉到参数log定义的一个文件中。可以完整地给出路径名称,如果仅提供文件名称,文件将在当前目录下创建

Help
在命令提示符下可以键入help=y来获取导出和导入应用程序的所有参数的一个简要列表,当用HELP参数列出导出的参数时,部分参数在简单的描述后面都会给出默认值

Parfile
导出/导入应用程序的参数可以从一个参数文件的文件中读取

Tables
导出时提取表列表中的那些表或在导入包含在导出文件中的表

Rows
表示提取每个导出表的行或指示导入应用程序插入每个导入表中的行





导出/导入应用程序少数参数在导出和导入之间是公用的,但意义和内涵不同:

Full 完整导出一位这提取整个数据库的所有内容,并创建他们;
Owner和Fromuser/Touser Owner参数在导出时提取拥有者的所有对象。如果导出文件中对象的拥有者在导入时需要更改,Fromuser将指定导出文件中包含的源对象拥有者,Touser指定创建和拥有导入对象的新模式。例如:可以导出Stephan的对象,并希望把他们按照Kenny模式导入,可以使用如下导入参数:FROMUSER=STEPHAN TOUSER=KENNY
Oracle的导出/导入应用程序有许多有价值的功能和特性:

备份和恢复 导出和导入对于应用开发、数据库转移和可迁移表空间是很有用的,它们可以方面用于除备份和恢复策略外的各种DBA任务。因为导出是表的一个快照,如果丢失一个表或者数据文件,加入表本质上是动态的,那么用导出文件和导入应用程序来替换所有的数据将十分困难。但是导出对于扩展实际的备份和恢复有用;
数据块损坏 可以导出整个数据库或关键的表,以此发现表中损坏的数据块,导出过程会对导出的表进行完全扫描,强制读取每一个数据块,检查介质损坏的情况;
数据库版本交叉 可以将某一版本的Oracle源数据库上的模式和数据拷贝到不同的版本的一个目标Oracle数据库,当从源数据库导出数据时,使用两个数据库中较早版本进行导出,向目标数据库导入数据时,使用目标数据库的导入版本;
操作系统交叉 可以用导出/导入将数据从某个操作系统的一个Oracle数据库转移到相同或者不同操作系统上的另一个Oracle数据库中;
字符集支持 Oracle的NLS(本地语言支持)特性提供了适合支持本地语言的字符、数字、符号、日期等。如果在导出或导入过程中看到POSSIBLE CHARSET CONVERSION字样时,应该留心。请注意导出和导入客户机的字符集,必要时要调整NLS_LANG环境变量设置;
练习15:导出完整的数据库

本练习将创建PRACTICE数据库的一个完整数据库导出。

步骤一:交互导出完整的数据库

在此任务中,可以通过交互运行导出应用程序创建一个完整数据库导出文件。在操作系统的提示符下,键入exp启动导出程序,按下回车键,会出现相关问题:

username 指要执行导出用户的名称。任何用户都可以导出他们自己的模式。在此练习中,以SYS身份连接,如果希望在NET8上连接数据库,在服务台(sys/system@practice)后面添加用户名;
password 给出第1步输入用户的口令;
buffer size 以字节为单位,制定用于提取行缓冲区的大小,接受默认值;
export file 导出应用程序创建一个二进制文件,其中包含了版本信息、运行细节、对象创建命令和表插入语句等,接受默认文件名expdat.dmp;
entire database 定义导出的范围,可以导出整个数据库、一个或多个用户,一个或多个表,选择“1”进行完整数据库导出;
grants 决定导出应用程序是否导出对象授权,完整数据库导出时,所有的对象授权都导出,选择“YES”;
table data 导出表是可以带表数据,也可以不带表数据,因为我们希望整个数据库内容包含在内,选择“YES”;
extents 如果压缩域,那么在导入时建立的对象创建命令会将所有的数据合并到一个初始域中,如果没有压缩域,对象按照他们在导出已有的域设置创建,选择“NO”;
当导出开始运行时,屏幕会显示正在运行的工作,当导出结束时,在导出命令运行的目录下将创建一个名为expdat.dmp文件,该文件包含了除SYS、ORDSYS、CTXSYS、MDSYS和ORDPLUGINS以外每个用户所拥有全部模式对象的一个副本。
步骤二:通过命令行导出完整的数据库

可以把命令行参数放在一行,提供导出应用程序所需的全部信息,如果未能给出所需的某个参数,导出应用程序会提示输入参数值。为了用命令行参数将整个数据库导出到一个指定文件中,给出USERID、FILE和FULL参数如下:

1 WIN> exp USERID=system/system@practice file=D:\oracle\CODE\chap8\full.dmp FULL=Y
每一个关键字后面跟一个或一组值,可以省略userid关键字,如下所示:

1 WIN> exp system