oracle 数据库备份还原(本地及远程操作)
执行环境: 可以在 SQLPLUS.EXE 或者 DOS(命令行)中执行, DOS 中可以执行时由于 在
oracle 8i 中 安装目录\ora81\BIN 被设置为全局路径, 该目录下有 EXP.EXE 与 IMP.EXE 文
件被用来执行导入导出。
oracle 用 java 编写,我想 SQLPLUS.EXE、EXP.EXE、IMP.EXE 这俩个文件是被包装后的类文件。
SQLPLUS.EXE 调用 EXP.EXE、IMP.EXE 他们所包裹的类,完成导入导出功能。
用 IMP 和 EXP 处 理 的 :
file=
file=
EXP
IMP
userid=/@
userid==/@
fromuser=
touser=
实例: 数据的导出
exp qhmis/qhmis@qhmis
file='d:\backup\qhmis\qhmis20060526.dmp'
grants=y
full=n
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
oracle 的备份的用户 qhmis 导入到用户 qhmis 的数据库
file=d:\daochu.dmp
tables=(table1) 下面这句是执行将 c 盘的
imp qhmis/qhmis@qhmis
file='c:qhmis20060224.dmp'
ignore=n grants=y
full=y
远程备份的时候只要将 mailto:“@%3Cservice_name>”@后的部分改成连接数据库的方式就
可以了,如:LSD_192.168.1.33 这是我在..\ora92\network\admin\tnsnames.ora 中自己设置的,
代码如下: LSD_192.168.1.32 =
(ADDRESS =
(PROTOCOL = TCP)(HOST = 192.168.1.32)(PORT = 1521))
(CONNECT_DATA =
(SID = ora9i)
) 注:其中红色部分是要自己改写的
******************************************************************
(SERVER = DEDICATED)
(ADDRESS_LIST =
)
(DESCRIPTION =
)
进阶:
将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子
exp userid=system/manager owner=username1 file=expfile.dmp imp userid=system/manager
fromuser=username1 touser=username2 ignore=y file=expfile.dmp
ORACLE 数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但数
据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设
备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方法不需要数
据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。
数据库逻辑备份方法 ORACLE 数据库的逻辑备份分为三种模式:表备份、用户备份和完全备
份。
表模式
备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。 若备份到本地
文件,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0
file=exp_icdmain_csd_yyyymmdd.dmp
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0
file=/dev/rmt0
log=exp_icdmain_csd_yyyymmdd.log
tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo
注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面
的考虑,尽量不要直接备份到磁带设备。
用户模式
备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。 若备份到本地文件,
使用如下命令: exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0 file=exp_icdmain_yyyymmdd.dmp log=exp_icdmain_yyyymmdd.log
若直接备份到磁带设备,使用如下命令:
exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536 feedback=100000
volsize=0 file=/dev/rmt0 log=exp_icdmain_yyyymmdd.log
注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采
用这种办法备份。
完全模式
备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y
file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0) log=exp_fulldb_yyyymmdd.log
对于数据库备份,建议采用增量备份,即只备份上一次备份以来更改的数据。增量备份 命
令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y
inctype=incremental
file=exp_fulldb_yyyymmdd.dmp( 磁 带 设 备 则 为 /dev/rmt0)
log=exp_fulldb_yyyymmdd.log 注:关于增量备份必须满足下列条件:
1. 只对完整数据库备份有效,且第一次需要 full=y 参数,以后需要 inctype=incremental 参数。
2. 用户必须有 EXP_FULL_DATABASE 的系统角色。
3. 话务量较小时方可采用数据库备份。
4. 如果磁盘有空间,建议备份到磁盘,然后再备份到磁带。 业务数据库备份方法及周期 用
EXP 进行备份前,先在 SYS 用户下运行 CATEXP.SQL 文件(如果以前已运行该文件,则不要执
行这个脚本)。 没有特殊说明,不允许在客户端执行备份命令。
备份命令参照表模式下的备份命令。
从磁盘文件备份到磁带 如果首先备份到本地磁盘文件,则需要转储到磁带设备上。
1. 若需查看主机上配置的磁带设备,使用如下命令:lsdev -Cc tape 显示的结果如下例所示:
rmt0 Available 30-58-00-2,0 SCSI 4mm Tape Drive rmt1 Defined
30-58-00-0,0 SCSI 4mm Tape
Drive 标明 Available 的设备是可用的磁带设备。
2. 若需查看磁带存储的内容,使用如下命令: tar -tvf /dev/rmt0 显示的结果如下例所示:
-rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp 如果显示类似如
下内容,则表示该磁带存储的备份数据是从数据库直接备份到磁带上,而非从本地磁盘转储
到磁带的备份文件,因此操作系统无法识别。 tar: 0511-193 An error occurred while reading
from the media. There is an input or output error. 或 tar: 0511-169 A directory checksum error
on media; -267331077 not equal to 25626.
3. 对 于 新 磁 带 或 无 需 保 留 现 存 数 据 的 磁 带 , 使 用 如 下 命 令 : tar -cvf /dev/rmt0
exp_icdmain_yyyymmdd.dmp 注:A. 该命令将无条件覆盖磁带上的现存数据。
B. 文件名不允许包含路径信息,如:/backup/exp_icdmain_yyyymmdd.dmp。
4. 对 于 需 要 保 留 现 存 数 据 的 磁 带 , 使 用 如 下 命 令 : tar -rvf /dev/rmt0
exp_icdmain_yyyymmdd.dmp 注:该命令将文件 exp_icdmain_yyyymmdd.dmp 追加到磁带的
末端,不会覆盖现存的数据。 特别强调:如果备份时是从数据库直接备份到磁带上,则不
可再向该磁带上追加复制任何其他文件,否则该备份数据失效。
5. 若需将转储到磁带上的备份文件复制到本地硬盘,使用如下命令:
A. 将磁带上的全部文件复制到本地硬盘的当前目录 tar -xvf /dev/rmt0
B. 将 磁 带 上 的 指 定 文 件 复 制 到 本 地 硬 盘 的 当 前 目 录 tar -xvf /dev/rmt0
exp_icdmain_yyyymmdd.dmp 备份时间安排 由于备份时对系统 I/O 有较大影响,所以,建议
在晚上 11 点以后进行备份工作。 业务数据库 Oracle 版本的恢复,恢复方案需根据备份方
案确定。由于业务数据库采用表备份和用户备份相结合的方案,所以业务数据库的恢复需根
据实际情况采用表恢复和用户恢复相结合的方案。
恢复方案 数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式。
表模式
此方式将根据按照表模式备份的数据进行恢复。
A. 恢复备份数据的全部内容 若从本地文件恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000
d_yyyymmdd.dmp
log=imp_icdmain_csd_yyyymmdd.log
file=exp_icdmain_cs
ignore=n
volsize=0
若从磁带设备恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000 ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_csd_yyyymmdd.log
B. 恢复备份数据中的指定表 若从本地文件恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000
d_yyyymmdd.dmp
log=imp_icdmain_csd_yyyymmdd.log tables=commoninformation,serviceinfo
file=exp_icdmain_cs
volsize=0
ignore=n
若从磁带设备恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000 ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_csd_yyyymmdd.log
tables=commoninformation,serviceinfo
用户模式 此方式将根据按照用户模式备份的数据进行恢复。
A. 恢复备份数据的全部内容 若从本地文件恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000
yymmdd.dmp
log=imp_icdmain_yyyymmdd.log 若 从 磁 带 设 备 恢 复 , 使 用 如 下 命 令 : imp icdmain/icd
fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000
ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_yyyymmdd.log
file=exp_icdmain_yy
volsize=0
ignore=n
B. 恢复备份数据中的指定表 若从本地文件恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000
yymmdd.dmp
log=imp_icdmain_yyyymmdd.log tables=commoninformation,serviceinfo
file=exp_icdmain_yy
volsize=0
ignore=n
若从磁带设备恢复,使用如下命令:
imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536
feedback=100000
log=imp_icdmain_yyyymmdd.log
tables=commoninformation,serviceinfo
file=/dev/rmt0
volsize=0
ignore=n
完全模式 如果备份方式为完全模式,采用下列恢复方法: 若从本地文件恢复,使用如下命
令:
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y
volsize=0 full=y file=exp_icdmain_yyyymmdd.dmp log=imp_icdmain_yyyymmdd.log
若从磁带设备恢复,使用如下命令:
imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y
volsize=0 full=y file=/dev/rmt0 log=imp_icdmain_yyyymmdd.log
参数说明
1. ignore 参数 Oracle 在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据 ignore
参数的设置来决定如何操作。 若 ignore=y,Oracle 不执行 CREATE TABLE 语句,直接将数据
插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但
合法的记录会添加到表中。 若 ignore=n,Oracle 不执行 CREATE TABLE 语句,同时也不会将
数据插入到表中,而是忽略该表的错误,继续恢复下一个表。
2. indexes 参数 在恢复数据的过程中,若 indexes=n,则表上的索引不会被恢复,但是主键
对应的唯一索引将无条件恢复,这是为了保证数据的完整性。
字符集转换 对于单字节字符集(例如 US7ASCII),恢复时,数据库自动转换为该会话的字符
集(NLS_LANG 参数);对于多字节字符集(例如 ZHS16CGB231280),恢复时,应尽量使字
符集相同(避免转换),如果要转换,目标数据库的字符集应是输出数 据库字符集的超集。
恢复 方法 业务 数据库 采用表 恢复方 案。在 用 IMP 进行 恢复前 ,先在 SYS 用户 下运行
CATEXP.SQL 文件(如果以前已运行该文件,则不要执行这个脚本),然后执行下列命令: IMP
ICDMAIN/ICD FILE= 文 件 名 LOG=LOG 文 件 名 ROWS=Y COMMIT=Y BUFFER=Y IGNORE=Y
TABLES=表名 注:要恢复的表名参照备份的表名
。
没有特殊说明,不允许在客户端执行恢复命令
。恢复是在原表基础上累加数据
附录一: 给用户增加导入数据权限的操作 第一,启动 sql*puls 第二,以 system/manager
登陆 第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省
略) 第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY
DBA,CONNECT,RESOURCE,CREATE
VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
SESSION
imp
或 者 imp userid=system/manager full=y
userid=system/manager full=y file=*.dmp
file=filename.dmp
TO 用 户 名 字 第 五 , 运 行 -cmd- 进 入 dmp 文 件 所 在 的 目 录 ,
执行示例:
F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp
屏 幕 显 示 Import: Release 8.1.7.0.0 - Production on 星 期 四 2 月 16 16:50:05 2006 (c)
Copyright 2000 Oracle Corporation. All rights reserved.
连接 到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option
JServer Release 8.1.7.0.0 - Production
经由常规路径导出由 EXPORT:V08.01.07 创建的文件已经完成 ZHS16GBK 字符集和 ZHS16GBK
NCHAR 字符集中的导入导出服务器使用 UTF8 NCHAR 字符集 (可能的 ncharset 转换) . 正在
将 AICHANNEL 的 对 象 导 入 到
. 正 在 导 入 表
"INNER_NOTIFY"
4 行被导入准备启用约束条件... 成功终止导入,但出现警告。
AICHANNEL
.
FROMUSER=TGPMS
然 后 , 使 用 时 命 令 如 下 : imp parfile=/filepath/import9.par
附录二: Oracle 不允许直接改变表的拥有者, 利用 Export/Import 可以达到这一目的. 先
建 立 import9.par,
例
TOUSER=TGPMS2
import9.par 内容如下:
(注:把表的拥有者由 FROMUSER 改为 TOUSER,FROMUSER 和 TOUSER 的用户可以不同)
ROWS=Y
CONSTRAINTS=Y
file==/backup/ctgpc_20030623.dmp
BUFFER=409600
log==/backup/import_20030623.log windows 环 境 下 的 oracle 服 务 注 : SID - 数 据 库 标 识
HOME_NAME - Oracle Home 名 称 , 如 OraHome92 、 OraHome81 ( 1 ) OracleServiceSID
数据库服务,这个服务会自动地启动和停止数据库。如果安装了一个数据库,它的缺省启动
类型为自动。服务进程为 ORACLE.EXE,参数文件 initSID.ora,日志文件 SIDALRT.log,控制台
SVRMGRL.EXE、SQLPLUS.EXE。
INDEXES=Y
GRANTS=Y
(2)OracleHOME_NAMETNSListener 监听器服务,服务只有在数据库需要远程访问时才需
要(无论是通过另外一台主机还是在本地通过 SQL*Net 网络协议都属于远程访问),不用这
个服务就可以访问本地数据库,它的缺省启动类型为自动。服务进程为 TNSLSNR.EXE,参数
文件 Listener.ora,日志文件 listener.log,控制台 LSNRCTL.EXE,默认端口 1521、1526。
(3)OracleHOME_NAMEAgent OEM 代理服务,接收和响应来自 OEM 控制台的任务和事件
请求 ,只有 使用 OEM 管理 数据库 时才需 要,它 的缺省 启动类 型为 自动。 服务进 程为
DBSNMP.EXE,参数文件 snmp_rw.ora,日志文件 nmi.log,控制台 LSNRCTL.EXE,默认端口 1748。
(4)OracleHOME_NAMEClientCache
名字缓存服务,服务缓存用于连接远程数据库
的 Oracle Names 数据。它的缺省启动类型是手动。然而,除非有一台 Oracle Names 服务器,
否则没有必要运行这个服务。服务进程为 ONRSD.EXE,参数文件 NAMES.ORA,日志文件
ONRSD.LOG,控制台 NAMESCTL.EXE。
(5)OracleHOME_NAMECMAdmin
连接管理服务,是构建
Connection Manager 服务器所用,只有服务器作为 Connection Manager 才需要,它的缺省启
动类型是手动。服务进程为 CMADMIN.EXE,参数文件 CMAN.ORA,日志文件 CMADM_PID.TRC,
控制台 CMCTL.EXE,默认端口 1830。
连接网关服务,是构建 Connection
(6)OracleHOME_NAMECMan
Manager 服务器所用,只有服务器作为 Connection Manager 才需要,它的缺省启动类型是手
动 。 服 务 进 程 为 CMGW.EXE , 参 数 文 件 CMAN.ORA , 日 志 文 件 CMAN_PID.TRC, 控 制 台
CMCTL.EXE,默认端口 1630。
(7 )OracleHOME_NAMEDataGatherer 性 能 包 数 据 采 集 服 务 , 除 非 使 用 Oracle Capacity
Planner 和 Oracle Performance Manager,否则不需要启动,它的缺省启动类型是手动。服
务进程为 VPPDC.EXE,日志文件 alert_dg.log,控制台 vppcntl.exe。
(8)OracleHOME_NAMEHTTPServer Oracle 提供的 WEB 服务器,一般情况下我们只用它来
访问 Oracle Apache 目录下的 Web 页面,比如说 JSP 或者 modplsql 页面。除非你使用它作
为你的 HTTP 服务,否则不需要启动(若启动它会接管 IIS 的服务),它的缺省启动类型是手
动。服务进程为 APACHE.EXE,参数文件 httpd.conf,默认端口 80。
(9)OracleHOME_NAMEPagingServer 通过一个使用调制解调器的数字传呼机或者电子邮件
发出警告(没试过),它的缺省启动类型是手动。服务进程 PAGNTSRV.EXE,日志文件 paging.log。
(10)OracleHOME_NAMENames Oracle Names 服务,只有服务器作为 Names Server 才需要,
它 的 缺 省 启 动 类 型 是 手 动 。 服 务 进 程 NAMES.EXE , 参 数 文 件 NAMES.ORA , 日 志 文 件
NAMES.LOG,控制台 NAMESCTL.EXE,默认端口 1575。
(11)OracleSNMPPeerMasterAgent SNMP 服务代理,用于支持 SNMP 的网管软件对服务器
的管理,除非你使用网管工具监控数据库的情况,否则不需要启动,它的缺省启动类型是手
动。服务进程为 AGNTSVC.EXE,参数文件 MASTER.CFG,默认端口 161。
(12)OracleSNMPPeerEncapsulater SNMP 协议封装服务,用于 SNMP 协议转换,除非你使
用一个不兼容的 SNMP 代理服务,否则不需要启动,它的缺省启动类型是手动。服务进程为
ENCSVC.EXE,参数文件 ENCAPS.CFG,默认端口 1161。
(13)OracleHOME_NAMEManagementServer OEM 管理服务,使用 OEM 时需要,它的缺省
启动类型是手动。服务进程为 OMSNTSVR.EXE,日志文件 oms.nohup。
Oracle 怎样进行远程备份?(就是说我在本地想备份其他机器上的数据库)
备份:exp 用户名/密码@要连接的远程计算机 IP/要备份的远程数据库名称 file=文件路径
注:此用户必须拥有 dba 的权限
事例: Java 代码
exp hom/hom@192.168.5.14/qa file=d:\aa1.dmp
还原: imp 用户名/密码@还原的数据库名称 file=文件路径 文件名称 fromuser=导出数据
库的用户名 touser=导入数据库的用户名
示例: Java 代码
imp hom1/hom1@192.168.5.14/qa file=D:\aa1.dmp fromuser=hom1 touser=hom 备份还原成
功!!!
本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处 :
http://blog.csdn.net/amork/archive/2009/07/30/4394891.aspx