1、  备份策略:
智能网采用Export方式进行数据库备份
Export(逻辑备份)
只是简单的备份方法,可按数据库中某个表、某个用户或整个数据库来导出,并且支持全部、累计、增量三种方式,使用这种方法数据库必须处于打开状态,而且如果数据库不是在restrict状态将不能保证导出数据的一致性。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

备份策略如下(可配置):
(1)       每天均做全库备份,备份完删除当天的archive日志。
(2)       可以通过配置文件配置是否需要备份lhdscharge/lhdschargebak用户。
具体的备份脚本(expdb.sh)执行时间由操作系统的crontab功能调度,必要时也可以手工来执行该脚本。
说明:
1、                     当配置文件(放在/home/lhds10/etc/orabkup.ini)不存在时,以全库方式备份。
2、                     当配置文件(放在/home/lhds10/etc/orabup.ini)存在时,并且LHDSCHARGE=0时,则备份除LHDSCHARGELHDSCHARGEBAK用户外的所有数据。
一个完整的样例文件如下:
$/home/lhds10/etc/orabkup.ini
#ORACLE  BACKUP  CONFGURATION FILE [OWNER]
         LHDSCHARGE=1 # 1 FULL BACKUP
                       # 0 backup all owers except lhdscharge and lhdschargebak.
一般情况下,请不要设置这等参数,保持LHDSCHARGE1,另外,如果不存在该配置文件,也执行整库备份。
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.
注:fromusertouser后均填上这个被破坏的表属于的用户名。
logname/password 填上的数据库登录用户、密码,例如:system/manager
被破坏的表名在tables的括弧中全部列出,以逗号分隔。
Expfilename填上exp方式备份出的文件名,如/lhdsdata/lhdsbak/lhdsdb1.dmp

 

b)  如果表中的部分数据丢失
先清空表中剩余的数据(使用truncate语句),然后按操作实例:a)恢复。

 

c)  如果用户丢失或该用户的所有对象和数据丢失
如果用户丢失,先重新创建该用户,例如lhdssys用户丢失,先创建lhdssys用户,并设置该用户原先设定的密码、缺省表空间、临时表空间和dba的权限。再以lhds10Oracle执行:
$imp  logname/password   fromuser = username    touser = username  file = expfilename  ignore = y
注:fromusertouser后均填上该用户名
logname/password 填上的数据库登录用户、密码,例如:system/manager
Expfilename填上exp方式备份出的文件名,如/lhdsdata/lhdsbak/lhdsdb1.dmp

 

d)  如果用户存在,该用户的部分对象和数据丢失
如果可以列出丢失数据的表,可以先将这些表drop掉,然后再按照操作实例:a)恢复。如果不能确切知道丢失了那些表的那些数据,可以先将该用户删除(包括对象),然后按操作实例:c)进行恢复。

 

e)  如果非系统用户(如LH打头的用户)所对应的表空间、数据文件被损坏
先通过dba studio 等工具记录下所有使用该表空间上的用户,然后先使用如下语句将被损坏的表空间(或涉及到数据文件损坏的表空间)offline 现假设lhds_data表空间(或其数据文件)被损坏,以lhds10Oracle执行:
$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 –rf/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”是一个自命名,无其它意思。
待续!