18.3 逻辑备份和恢复数据库
逻辑备份数据库是数据库管理员使用最多的,逻辑备份除了在DOS下进行外,还可以在企业管理器的OEM中进行。本节将讲述数据库的逻辑导出与导入操作。
18.3.1 逻辑导出数据
导出数据可以使用EXP工具完成,也可以使用在Oracle 10g以后出现的EXPDP工具完成。下面分别使用这两种方式对数据库进行导出备份。
1.使用EXP工具备份
EXP工具可以将数据库中的对象有选择性地备份出来,可以使用EXP工具导出的数据库对象有表、方案、表空间以及数据库。下面分别讲解如何使用EXP工具导出表、方案、表空间、数据库4个数据库对象。使用EXP工具并不是在SQL*Plus状态下,而是在DOS命令窗口下完成的。
(1)导出表
进入DOS命令窗口,输入下面的语句:
C:\>EXP username/password
这里的username、password就是登录数据库的用户名和密码,但是这里的用户不能是SYS。
【示例5】根据提示导出表productinfo
下面就利用上面的语句导出表productinfo。首先使用SCOTT用户登录数据库,然后按照提示导出表数据。具体操作过程如图18.8所示。
图 18.8 导出表productinfo的过程
从图18.8所示的导出过程可以看到,在导出文件部分是为导出文件存放保存文件的路径,这里用的是c:\productinfo.dmp。如果选择导出的是表,那么可以在后面输入要导出的表名。在导出文件时可以选择E<完整的数据库>来导出数据库所有的文件。
除了像上面一步一步选择之外,还可以直接导出表。
【示例6】直接导出表productinfo
具体操作方法如图18.9所示。
图 18.9 直接导出表productinfo
图18.9中导出的表productinfo是在SCOTT方案中的表,如果要导出其他方案中的表,则需要在表名的前面加上方案名。假设要导出SYSTEM方案下的TEST表,那么就要写成SYSTEM.TEST。如果要导出多个表,可以在表名之间加上“,”间隔开。
注意 在导出语句后面一定不能加上分号,如果加上分号,那么系统就会认为导出的表是表名加上分号的,如图18.10所示。
图 18.10 导出表错误
(2)导出表空间
导出表空间与导出表不同,导出表空间的用户必须是数据库的管理员角色。导出表空间的命令如下:
C:\>EXP username/password FILE="filename.dmp"TABLESPACES="tablespaces_name"
【语法说明】
❑username/password:登录数据库使用的用户名和密码,一定是具有数据库管理员权限的用户。
❑filename.dmp:存放备份的表空间的数据文件。
❑tablespaces_name:要备份的表空间名称。
【示例7】导出表空间TEST
下面利用上面的语句备份表空间TEST。具体操作如图18.11所示。
图 18.11 导出表空间
2.使用EXPDP导出数据
EXPDP是Oracle 10g开始引入的数据泵技术,数据泵技术是在数据库之间或者在数据库与操作系统之间传输数据的工具。EXPDP是数据泵导出的工具,它可以把数据库中的对象导出到操作系统中。使用EXPDP工具与EXP不同的是,在使用EXPDP时要先创建目录对象,通过这个对象就可以找到要备份数据的数据库服务器,并且使用EXPDP工具备份出来的数据必须存放在目录对象对应的操作系统的目录中。下面将分步讲解如何使用EXPDP导出数据。
(1)创建目录对象
创建目录对象是使用EXPDP工具进行导出的前提。创建目录对象的语法如下:
SQL:>CREATE DIRECTORY directory_name AS'file_name'
【语法说明】
❑directory_name:创建的目录名称。
❑file_name:存放数据的文件夹名。
(2)给使用目录的用户赋权限
新创建的目录对象不是任何用户都可以使用的,只有拥有该目录使用权的用户才能使用,所以要为使用该目录的用户赋一个权限。假设备份数据库的用户是SCOTT,那么赋权限的语句如下:
GRANT READ,WRITE ON DIRECTORY directory_name TO SCOTT
这里,directory_name就是创建的目录名称。
【示例8】创建目录并给用户SCOTT赋权限
下面就利用上面的命令完成目录DIR的创建和SCOTT用户权限的授予,具体操作流程如图18.12所示。
图 18.12 创建目录并给用户SCOTT授权
(3)导出表
前面已经创建好了目录,使用EXPDP工具导出数据的方法与EXP导出的方法类似,也是在DOS的命令窗口中实现的。
【示例9】使用EXPDP工具导出表productinfo
下面就利用导出表的语句,再次导出表productinfo。具体操作如图18.13所示。
图 18.13 导出全部数据表
如果想备份其中的某一个表,可以使用下面的命令完成:
C:>EXPDP username/password DIRECTORY=directory_name DUMPFILE=file_name TABLES=table_name
【语法说明】
❑directory_name:存放导出数据的目录名称。
❑file_name:导出数据存放的文件名。
❑table_name:准备导出的表名,对于多个表可以用逗号隔开。
例如,备份productinfo表,命令如下:
EXPDP scott/tiger DIRCETORY=DIR DUMPFILE=temp.dmp TABLES=productinfo