当前位置: Oracle DBA培训网-优技培训 >> dba培训 > DBA培训教程 >

dba培训教程:Oracle备份恢复-手动备份

dba培训教程:Oracle备份恢复-手动备份

dba培训教程:Oracle备份恢复-手动备份 

平台:redhat Linux as5,oracle10g

Oracle提供了许多方法来备份数据库。包括用户管理,恢复管理器(RMAN),Oracle数据泵等。用户管理允许用户通过操作系统命令手动备份数据库。本文主要介绍如何手动备份整个数据库,以及如何手动单独备份表空间,控制文件,spfile文件等.

备份数据库

1.备份内容

备份数据库是指备份数据库的所有数据文件,控制文件,参数文件和口今文件。下面先找到这些内容

数据文件

SQL> select name from v$datafile;

NAME

--------------------------------------------------------------------------------

/u01/oradata/denver/system01.dbf

/u01/oradata/denver/undotbs01.dbf

/u01/oradata/denver/cwmlite01.dbf

/u01/oradata/denver/drsys01.dbf

/u01/oradata/denver/example01.dbf

/u01/oradata/denver/indx01.dbf

/u01/oradata/denver/odm01.dbf

/u01/oradata/denver/tools01.dbf

/u01/oradata/denver/users01.dbf

/u01/oradata/denver/xdb01.dbf

控制文件

SQL> select name from v$controlfile;

NAME

--------------------------------------------------------------------------------

/u01/oradata/denver/control01.ctl

/u01/oradata/denver/control02.ctl

/u01/oradata/denver/control03.ctl

可见数据文件和控制文件都在/u01/oradata/denver/下,但这个目录下还有redo*.log,在归档模式下一般重做日志不需要备份

SQL> ! ls /u01/oradata/denver

archive control03.ctl example01.dbf redo01.log system01.dbf undotbs01.dbf

control01.ctl cwmlite01.dbf indx01.dbf redo02.log temp01.dbf users01.dbf

control02.ctl drsys01.dbf odm01.dbf redo03.log tools01.dbf xdb01.dbf

参数文件和口今文件

SQL> show parameter spfile;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

spfile string ?/dbs/spfile@.ora

SQL> ! ls $ORACLE_HOME/dbs

initdenver.ora init.ora lkDENVER spfiledenver.ora

initdw.ora lkAAA orapwdenver spfiledenver.ora.bak

现在我们找到了要备份的所有内容,即

/u01/oradata/denver/*dbf(数据文件)

/u01/oradata/denver/*.ctl(控制文件)

$ORACLE_HOME/dbs/spfiledenver.ora(参数文件)

$ORACLE_HOME/dbs/orapwdenver(密码文件)

2.备份方法

备份数据库分为冷备和热备,冷备也叫数据一致性备份,是指关闭了数据库之后,把需要备份的内容CP出来,比较简单,只要能找到这些文件就能备份出来,热备也叫数据库非一致性备份,是指在数据库open状态下备份数据文件和控制文件的方法,冷备要关闭数据库会中断业务,也比较简单,在此不做讨论,下面使用热备来备份数据库,注意热备份一定要在归档模式下备份

SQL> archive log list

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u01/oradata/denver/archive

由于在第一步已找到了要备份的文件,现在开始备份

开始备份

SQL> alter database begin backup;

Database altered.

SQL>! cp /u01/oradata/denver/*.dbf /u01/backup/

SQL>alter database backup controlfile to '/u01/backup/backup.ctl'

SQL>! cp $ORACLE_HOME/dbs/spfiledenver.ora /u01/backup/

SQL>! cp $ORACLE_HOME/dbs/orapwdenver /u01/backup/

SQL>! alter database end backup;

SQL>alter system archive log current;

这样整个数据库就备份完了,备份完后应做测试是不是有效备份,只要是有效备份,那么就可以高枕无忧了。下面介绍如何单独备份表空间,控制文件,spfile等

2.备份表空间

表空间在oracle中只是个逻辑概念,备份表空间其实是备份表空间下的数据文件,我们要找到表空间下对应的数据文件,把数据文件备出来

注意表空间备份只适用于archivelog模式,备份表空间分为在表空间online备份和表空间offline备份,

表空间脱机备份

SQL> select file_name from dba_data_files where tablespace_name='TEST1';

FILE_NAME

--------------------------------------------------------------------------------

/u01/test1.dbf

SQL> alter tablespace test1 offline;

Tablespace altered.

SQL> ! cp /u01/test1.dbf /u01/backup

SQL> alter tablespace test1 online;

Tablespace altered.

这样表空间test1就备份完了,因为表空间offline后就不能访问数据文件了,而且system表空间和正在使用的undo表空间不能脱机,所以这种方法很少用。

表空间联机备份

SQL> alter tablespace test1 begin backup;

Tablespace altered.

SQL> ! cp /u01/test1.dbf /u01/backup/

SQL> alter tablespace test1 end backup;

Tablespace altered.

备份完备。别外如果要备份只读表空间直接把数据文件拷贝出来就可以了,不用区分脱机和联机

3.备份控制文件

控制文件用于记录和维护数据库,当恢复数据库时,服务器进程和后台进程需要从控制文件中读取各种与备份相关的信息,如果控制文件损坏,则会导致备份信的丢失,当数据库配置发生改变时,一定要再单独备份控制文件

备份方法:

1.使用多元控制文件

2.备份到跟踪文件

3.建立控制文件副本

其中前两各方法,在以前的文章”控制文件及归档日志管理”已阐述

第3种方法其实我们在上面备份数据库时用过

SQL> alter database begin backup;

Database altered.

SQL>alter database backup controlfile to '/u01/backup/backup.ctl'

#如果第二次使用这个命令,在最后加参数reuse(覆盖前一个)

SQL>alter database backup controlfile to '/u01/backup/backup.ctl' reuse;

SQL>! alter database end backup;

4.备份参数文件,口今文件

#参数文件

SQL>create pfile from spfile

SQL>! cp $ORACLE_HOME/dbs/spfiledenver.ora /u01/backup/

#口今文件

SQL>! cp $ORACLE_HOME/dbs/orapwdenver /u01/backup/

5.备份归档日志

在归档模式下,对数据库的所有操作都存到了归档日志里,因些物理恢复要用到归档日志,为了确保恢复可以顺利进行,还应该备份归档日志.备份归档日志很简单,找到文件CP出来就可以了.

#备份过去一天的归档日志

SQL> select name from v$archived_log where dest_id=1 and first_time>=sysdate-1;

NAME

--------------------------------------------------------------------------------

/u01/oradata/denver/archive/1_12.dbf

/u01/oradata/denver/archive/1_13.dbf

/u01/oradata/denver/archive/1_14.dbf

SQL>! cp /u01/oradata/denver/archive/1_12.dbf /u01/backup/

SQL>! cp /u01/oradata/denver/archive/1_13.dbf /u01/backup/

SQL>! cp /u01/oradata/denver/archive/1_14.dbf /u01/backup/

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙