数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

有关Oracle数据库的备份情况


发布日期:2019年05月17日
 
有关Oracle数据库的备份情况

意义

当我们使用一个数据库时总希望数据库的内容是可靠的正确的但由于计算机系统的故障(硬件故障网络故障进程

故障和系统故障)影响数据库系统的操作影响数据库中数据的正确性甚至破坏数据库使数据库中全部或部分数据丢

因此当发生上述故障后希望能重新建立一个完整的数据库该处理称为数据库恢复恢复子系统是数据库管理系统

的一个重要组成部分恢复处理随所发生的故障类型所影响的结构而变化

备份的方法

ORACLE数据库有三种标准的备份导出/导入(EXPORT/IMPORT) 冷备份热备份

导出备份是一种逻辑备份这种方法包括读取一系列的数据库日志并写入文件中这些日志的读取与其所处位置无关

冷备份和热备份是物理备份(也称低级备份)它涉及到组成数据库的文件但不考虑逻辑内容

下面我们分别介绍一下这三种备份方法及其特点

(一)导出/导入(EXPORT/IMPORT)

EXPORT/IMPORT是用来将ORACLE中数据移出/移入数据库

EXPORT将数据库中数据备份成一个二进制系统文件称为导出转储文件(EXPORT DUMP FILE)并将重新生成数据库写

入文件中

它有三种模式

a用户模式导出用户所有对象以及对象中的数据

b表模式导出用户所有表或者指定的表

c整个数据库导出数据库中所有对象

它的备份有三种类型

a完全型(COMPLETE EXPORT)备份整个数据库

b积累型(COMULATIVE ERPORT)备份上一次积累型备份所改变的数据

c增量型(INCREAMENTAL EXPORT)备份上一次备份后改变的数据

EXPORT 的命令可以交互式进行各参数的具体含义见附录

在进行导出备份时我们要考虑一点问题那就是导出的一致性在导出过程 中导出每读一次就读取一个表因而尽管导出

是在一个特点时自己开始的但不同的表读取的时间不同因此导出开始读一个表时此时表中的数据才是导出的数

这样当大多数表按内部关键字和外部关键字相互联系时在导出过程中这些相关联表的改变就会导致导出的不一致

要避开这个我们可以将导出过程安排在不对表操作的时候进行另外当ORACLE中RESTRICTEP CONSISTENT 选项就

可以保证导出数据一致性

IMPORT导入

导入的过程是导出的逆过程这个命令先读取导出来的导出转储二进制文件并运行文件恢复对象用户和数据

IMPORT命令执行的方法和EXPORT方案有关

如果EXPORT所实施的是完全型方案(FULL)则在IMPORT时所有的数据对象包括表空间数据文件用户都会在导入时创

但考虑到数据库中的物理布局预先创建表空间和用户是有用的

如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式则需要预先设置好表空间用户数据文件

(二)冷备份

冷备份发生在数据库已经正常关闭的情况下当正常关闭时会提供给我们一个完整的数据库

数据库使用的每个文件都被备份下来这些文件包括

☆所有数据文件

☆所有控制文件

☆所有联机REDO LOG 文件

☆INITORA文件(可选)

值得注意的是冷备份必须是数据库关闭的情况下完成当数据库开着的时候执行数据库文件系统备份无效

作冷备份一般步骤是

正常关闭要备份的实例(instance);

: 备份整个数据库到一个目录

启动数据库

SQLDBA>connect internal

SQLDBA>shutdown normal

SQLDBA>! cp <file> <backup directory>

SQLDBA>!tar cvf /dev/rmt/ /wwwdg/oracle

SQLDBA>startup

(三)热备份(ACHIRELOG)

数据库需要二十四小时运行而且随时有新的数据加入数据丢失将影响整个公司采用archivelog mode物理备份

?设置数据库为automatic archivelog mode

#su oracle

%svrmgrl

svrmgrl>connect internal

svrmgrl>startup mount

svrmgrl>alter database archivelog

svrmgrl>shutdown

svrmgrl>exit

%vi initoracleora

加入log_archive_start = true # if you want automatic archiving

log_archive_dest = $ORACLE_HOME/dbs/arch

log_archive_format = log%sarc

%dbstart

%ps ef|grep arch

oracle :: ? : ora_arch_oracle

oracle database is in automatic archivelog mode

?full offline entire database backup 当数据库初始完成后 这份备份是将来备份的基础它提供了所有与数据库有关

的拷贝

%dbshut

%cp /oracle/oradata/oracle/systemdbf

/oracle/oradata/oracle/rbsdbf

/oracle/oradata/oracle/tempdbf

/oracle/oradata/oracle/toolsdbf

/oracle/oradata/oracle/usersdbf

/oraclecle/app/oracle/product//dbs/applicationdbf

/oracle/app/oracle/product//dbs/apptmpspdbf

/oracle/app/oracle/product//dbs/apprlbkspdbf

/oracle/oradata/oracle/redooraclelog

/oracle/oradata/oracle/controlctl

/oracle/oradata/oracle/controlctl

/oracle/oradata/oracle/controlctl

<backup directory>

%dbstart

注:以上*dbf文件为数据文件*log文件为日志文件*ctl文件为控制文件

%exit

%tar uvf /dev/rmt/ <backup files>

注:如果为oracle 则copy 相应的 data filesrelog filescontrol files

每天做一次 partial online with archiving backups

#su oracle

%svrmgrl

%svrmgrl>connect internal

%svrmgrl>alter tablespace billsp begin backup

%svrmgrl>alter tablespace billtmpsp begin backup

%svrmgrl>alter tablespace billrlbksp begin backup

%svrmgrl>alter tablespace system begin backup

%svrmgrl>alter tablespace rbs begin backup

%svrmgrl>alter tablespace temp begin backup

%svrmgrl>alter tablespace tools begin backup

%svrmgrl>alter tablespace users begin backup

%svrmgrl>host cp all datafile to the backup storage #文件名如第一步中以dbf结尾的

%svrmgrl>alter tablespace billsp end backup

%svrmgrl>alter tablespace billtmpsp end backup

%svrmgrl>alter tablespace billrlbksp end backup

%svrmgrl>alter tablespace system end backup

%svrmgrl>alter tablespace rbs end backup

%svrmgrl>alter tablespace temp end backup

%svrmgrl>alter tablespace tools end backup

%svrmgrl>alter tablespace users end backup

做一个sql文件如上所写

The billing system can recover to the point of failure when the failure occur

备份文件的恢复

恢复文件

以下是对"/etc/passwd"文件的恢复

(放入正确的磁带

(运行以下命令恢复"/etc/passwd"文件

# rsh www mt f /dev/rmt/ rew

( 找到最近的磁带向前进带到最近的"/etc/passwd"比如要找星期三的"/etc/passwd"文件运行如下命令)

#rsh www mt f /dev/rmt/n fsf

# ufsrestore if www:/dev/rmt/n

ufsrestore > ls

etc/

ufsrestore > cd etc

ufsrestore > ls

./etc

passwd

ufsrestore > add passwd

Warnign ./etcFile exists

ufsrestore > verbose

verbose mode on

ufsrestore > extract

Extract requested files

You have not read any volumes yet .

Unless you know which volume your file(s) are on you should start witch the last volume and work to wards

the first.

Specify next volume #

extract file ./etc/passwd

Add links

Set directory mode owerand times.

set owner /mode for ?(yn)n

Directories already exit set mode anyway?(yn)y

ufsrestore >quit

热备份可以在数据库打开打情况下进行一般通过使用Alter命令改变表空间的状态来开始进行备份的备份完成后

要恢其原来状态否则redo log 会错配引起数据库下次启动时对受影响的表空间进行完全覆盖热备份的要求是

热备份工作必需要求数据库在Archivelog 方式下操作在SQLDBA状态下用alter database archivelog|noarchivelog命

令可改变备份的模式

热备份只能在数据库不使用或使用率低的情况下进行

热备份需要大量的档案空间

一般情况Oracle 以循环的方式写入Online redo log 文件当填满第一个redo log文件后写第二个直至最后一个

后一个被填满后后台进程LGWR就覆盖第一个在Archivelog方式下后台进程ARCH在每一个redo log 文件被覆盖前

它作一个拷贝一般这些文档的redo log 文件被写入磁盘或磁带中如果磁盘空间够用建议使用磁盘这样可大大减

少完成备份所需的时间

在作热备份之前要将configora文件中的log_archive_start 设为true 将log_archive_dest

规定archive redo log 文件的位置

log_archive_dest=/wwwdg/oracle/arch/arch

log_archive_start=true

一旦数据库运行在archivelog状态下就可以作备份了热备份的命令文件由三部分组成

数据文件一个表空间一个空间地备份

a设置表空间为备份状态

b备份表空间的数据文件

c恢复表空间为正常状态

备份归档要作log 文件

a临时停止归档进程

blog下那些在archive redo log目标目录中的文件

c重新启动archive进程

d备份归档的redo log 文件

用alter database backup controlfile命令来备份拷贝文件

在热备份运行之前log_archive_dest目录可能已满这时就要备份目录然后删除文件释放空间这个过程有如下步

暂时停止archive进程

记录在log_archive_dest目录下的文件

重新启动archive 进程

备份archive redo log 文件

删除目录中的文件

sqldba lmode=y <<EOF arch

archive log stop;

exit

EOF arch

FILES=ls /wwwdg/oracle/arch/arch*dbf;

sqldba lmode=y<<EOF arch

connect internal

archive log start;

exit

EOF arch

tar rvf /dev/rmt/ FILES

rm f $FILES

逻辑备份与物理备份的结合

前面介绍了三种备份的方法在数据库做备份时应该将数据这三种备份的特点灵活运用我们首先比较一下三种方法的

特性

方 法

类 型

恢 复 特 性

EXPORT导出

逻辑型

可以将任何数据库对象恢复到它被导出时的状态

乻hutdown

?将最近copyes of datafile拷贝到$oracle_home/dbs目录

?%svrmgrl

?svrmgrl>connect internal

…svrmgrl>startup mount pfile=filename exclusive

?svrmgrl>alter database recover;

注:将自动恢复数据到the point of failure;

? svrmgrl>alter database open;

?当archive log文件过多时在 做过部分备份后可将current log sequence 之前的log***arc删除

#su oracle

%svrmgrl

svrmgrl>connect internal;

svrmgrl>archive log list;

#此处标有current log sequence假设为

Svrmgrl>exit

$cd /billdg/oracle/app/oracle/product//dbs/arch

$ rm #将logarc之前的文件如logarclogarc删除

冷 备 份

物理型

可将数据库到它被关闭的状态

热 备 份

物理型

可将数据库恢复到任一时间点的状态

当数据库比较小时处理业务也小时冷备份导出就可以了如果只对一两个表备份导出就够了一般来说一个好备份最

终执行总包括逻辑和物理导出确认数据库在逻辑的正确性而物理备份确保物理

另外在进行备份时需要一些存储介质对于这些介质应该对其作好管理

根据备份的内容日期将介质统一编号以免备份和恢复时弄错介质造成原有的备份丢失

介质应存放在与计算机设备不同的地点以免机房发生意外时备份与计算机设备一同损坏

附录

tar命令

tar option [arguments] filename

option:

c:创建一个由命令行指定的新的tarfile

t:列出tarfile中的内容

x:打开tarfile;

f:使用其后的filename 或/dev/rmt/|

v:列出被恢复的文件名

p:恢复文件

example:

#tar cvf /dev/rmt/ /oracle

备份/root 下的所有内容

#tar tvf /dev/rmt/

列出磁带上的所有内容

#tar xvf /dev/rmt/ /oracle

将磁带上的/oracle目录中的内容恢复到当前目录中

导出选项

关键字 内 容

USERID 运行导出命令的帐号的用户名/口令

BUFFEER 用来取数据行的缓沖区的大小

FILE 导出转储文件的名字

COMPRESS 导出是否应该压缩有碎片的段成一个范围这将会影响STORAGE

子句

GRANTS 导出时否要导出数据库对象上的授权

INDEXES 是否要导出表上的索引

ROWS 是否应导出行如它为N那么在导出文件中仅生成数据库

对象的DDL

CONSSTRAINTS 是否导出表旧的约定条件

FULL 如设为Y那么将执行一个整个数据库导出操作

OWNER 要导出的一系列数据库帐号然后执行这些帐号的USER导出操

TABLES 要导出的一系列表执行这些表的TABLE导出操作

RECORDLENGTH 转储导出文件日志的长度(以字节为单位)通常都使用缺省

非要在两个不同操作系统中传递导出文件

INCTYPE 正在执行的导出操作的类型(有效值有COMPLETE(缺省值)

CUMULATIVEIVCREMENTAL)

RECORD 在增量导出类型中的一个标记标明是否将日志存储到数据字典

中日志导出的表中

PARFILE 要传递给导出的参数文件的名字这个文件将包含所有参数的入

口项

ANALYZE 标明是否将移对象的统计信息写入导出转储文件中

CONSISTENT 标明是否保留所有导出对象的读取一致复制

LOG 导出日志将要写入的文件的名字

MLS 标明是否要导出MLS 标号

MLS_LABEL_ 规定了MLS标号的格式

导入选择项

USERID 运行导入命令的帐号的用户名/口令

BUFFEER 用来取数据行的缓沖区的大小

FILE 导入转储文件的名字

SHOW 规定文件内容是否被显示而不是被执行

EGORE 标明在执行CREATE命令时是否忽略遇到的错误如果正

在导入的对象已经存在时应使用这个参数

FULL 如设为Y那么将执行一个整个数据库导入操作

FROMUSER 在FULL=N的情况下才有参数它是一系列的数据库帐号

对象应从导出转储文件中读取

TOUSER 一系列数据库帐号导出转储文件扣的对象将要导入这些帐号

GRANTS 导入时否要导入数据库对象上的授权

INDEXES 是否要导入表上的索引

ROWS 是否应导入行如它为N那么在导入文件中执行数据库对

象的DDL

FULL 如设为Y那么将执行一个整个数据库导出操作

TABLES 要导入的一系列表

RECORDLENGTH 转储导入文件日志的长度(以字节为单位)通常都使用缺省

非要在两个不同操作系统中传递导入文件

INCTYPE 正在执行的导入操作的类型(有效值有COMPLETE(缺省值)

CUMULATIVEIVCREMENTAL)

PARFILE 要传递给导入的参数文件的名字这个文件将包含所有参数的入

口项

ANALYZE 标明是否将移对象的统计信息写入导入转储文件中

LOG 导入日志将要写入的文件的名字

MLS 标明是否要导入MLS 标号

热备份的命令文件

ORACLE_SID=oracle

ORACLE_HOME=/wwwdg/oracle

sqldba lmode=y<<EOF arch

connect internal

alter tablespace SYSTEM begin backup;

!tar cvf /dev/rmt/ /wwwdg/oracle/dbms/sysdbf

alter tablespace SYSTEM end backup;

alter tablespace BWT begin backup;

!tar cvf /dev/rmt/ /wwwdg/oracle/dbms/BWTdbf

alter tablespace BWT end backup;

archive log stop

exit

EOF arch

FILES=ls /wwwdg/oracle/arch/arch*dbf;

sqldba lmode=y<<EOF arch

connect internal

archive log start;

exit

EOF arch

tar rvf /dev/rmt/ $FILES

rm f $files

sqldba lmode=y<<EOFarch

alter database backup controlfile to

/wwwdg/oracle/dbms/bwtcontrfilebackup;

exit

EOF arch

tar rvf /dev/rmt/ /wwwdg/oracle/bwt/bwtcontrofilebackup

               

上一篇:Oracle DBA需要的技能

下一篇:Oracle11g新特性点评之RMAN