1、
备份策略:
智能网采用
Export
方式进行数据库备份
Export
(逻辑备份)
只是简单的备份方法,可按数据库中某个表、某个用户或整个数据库来导出,并且支持全部、累计、增量三种方式,使用这种方法数据库必须处于打开状态,而且如果数据库不是在
restrict
状态将不能保证导出数据的一致性。
备份策略如下(可配置):
(1)
每天均做全库备份,备份完删除当天的
archive
日志。
(2)
可以通过配置文件配置是否需要备份
lhdscharge/lhdschargebak
用户。
具体的备份脚本(
expdb.sh
)执行时间由操作系统的
crontab
功能调度,必要时也可以手工来执行该脚本。
说明:
1、
当配置文件(放在
/home/lhds10/etc/orabkup.ini
)不存在时,以全库方式备份。
2、
当配置文件(放在
/home/lhds10/etc/orabup.ini
)存在时,并且
LHDSCHARGE=0
时,则备份除
LHDSCHARGE
和
LHDSCHARGEBAK
用户外的所有数据。
一个完整的样例文件如下:
$/home/lhds10/etc/orabkup.ini
#ORACLE BACKUP CONFGURATION FILE [OWNER]
LHDSCHARGE=1 # 1 FULL BACKUP
# 0 backup all owers except lhdscharge and lhdschargebak.
一般情况下,请不要设置这等参数,保持
LHDSCHARGE
为
1
,另外,如果不存在该配置文件,也执行整库备份。
2、
备份和恢复:
2.1
数据库备份
可以通过任务执行该脚本,也可以手工执行
expdb.sh
,脚本执行日志为
/lhdsdata/lhdsbak/lhdsdb1.log
,数据库
exp
命令执行返回则在
/lhdsdata/lhdsbak/lhdsdb[1-2].log
日志中(以
1
结尾的文件为较新的一个)。导出的文件则以
/lhdsdata/lhdsbak/lhdsdb[1-2].dmp
命令(以
1
结尾的文件为较新的一个备份)。
2.2
数据库恢复:
由于使用逻辑备份方式,所以备份的是某个时间点的数据,这样在进行数据恢复时,也只能恢复到备时的时间点,下面针对以下场景分别讲述数据库恢复。
2.2.1
场景
1
:在线时丢失表、表中数据、用户及用户对象。
在
Online
情况下,丢失表、表中数据、用户及用户对象时,可以通过备份数据进行恢复。
操作实例:
a)
如果表或表中的数据全部丢失:
以
lhds10
或者
Oracle
执行:
$imp logname/password fromuser = username touser = username tables=\(tablename1,tablename2…\) file = expfilename ignore = y.
注:
fromuser
和
touser
后均填上这个被破坏的表属于的用户名。
logname/password
填上的数据库登录用户、密码,例如:
system/manager
被破坏的表名在
tables
的括弧中全部列出,以逗号分隔。
Expfilename
填上
exp
方式备份出的文件名,如
/lhdsdata/lhdsbak/lhdsdb1.dmp
b)
如果表中的部分数据丢失
先清空表中剩余的数据(使用
truncate
语句),然后按操作实例:
a
)恢复。
c)
如果用户丢失或该用户的所有对象和数据丢失
如果用户丢失,先重新创建该用户,例如
lhdssys
用户丢失,先创建
lhdssys
用户,并设置该用户原先设定的密码、缺省表空间、临时表空间和
dba
的权限。再以
lhds10
或
Oracle
执行:
$imp logname/password fromuser = username touser = username file = expfilename ignore = y
注:
fromuser
和
touser
后均填上该用户名
logname/password
填上的数据库登录用户、密码,例如:
system/manager
Expfilename
填上
exp
方式备份出的文件名,如
/lhdsdata/lhdsbak/lhdsdb1.dmp
d)
如果用户存在,该用户的部分对象和数据丢失
如果可以列出丢失数据的表,可以先将这些表
drop
掉,然后再按照操作实例:
a
)恢复。如果不能确切知道丢失了那些表的那些数据,可以先将该用户删除(包括对象),然后按操作实例:
c
)进行恢复。
e)
如果非系统用户(如
LH
打头的用户)所对应的表空间、数据文件被损坏
先通过
dba studio
等工具记录下所有使用该表空间上的用户,然后先使用如下语句将被损坏的表空间(或涉及到数据文件损坏的表空间)
offline
现假设
lhds_data
表空间(或其数据文件)被损坏,以
lhds10
或
Oracle
执行:
$sqlplus /nolog
SQL>connect internal
SQL>alter tablespace lhds_data offline immediate;
SQL>drop tablespace lhds_data including contents;
SQL>create tablespace lhds_data datafile ……
(创建表空间参数,以及数据文件的路径和大小,可以参照以前的设置)
创建表空间成功后,通过操作实例:
c
)一一恢复属于该表空间的各用户对象。
f)
如果系统用户所对应的表空间、数据文件被损坏
以
Oracle
用户执行以下命令强制关闭数据库:
SQL>connect internal
SQL>shutdown abort
删除
/lhdsdata/oracle
目录下所有文件和目录
$rm �Crf/lhdsdata/oracle/*
以
Oracle
用户执行
crdb.sh
(在
/home/oracle
目录下),再执行以命令进行数据全部恢复
$imp logname/password full = y file = expfilename log = imp.log
注:
logname/password
填上数据库登录用户、密码,例如:
system/manager
Expfilename
填上
exp
方式备份出的文件名,如
/lhdsdata/lhdsbak/lhdsdb1.dmp
注:文章中的“lhds”是一个自命名,无其它意思。
待续!