1.冷备份介绍
冷备份是备份操作中最简单的一种类型。由于冷备份是在数据库完全关闭的情况下进行的,因此数据文件是一致的,在备份时没有任何访问和修改。非归档模式下数据库只能进行冷备份。
为了进行冷备份,必须以一致的方式关闭数据库,应该以下面的某个命令关闭数据库:
lshutdown normal
lshutdown immediate
lshutdown transactionsal
在shutdown abort之后,不要立即进行数据库冷备份。如果必须以这种方式关闭数据库,那么就要接着执行startup restrict(使用户不能访问数据库)启动数据库,是非正常关闭之前正在进行的事务恢复过程能完成。然后执行shutdown [immediate,transactionsal、normal]。这样就可以确信,对于现在的数据库,所有事务或会滚段都已经完成,数据库处于一致状态。在数据库关闭时,可以将文件复制到磁盘或磁带上。
应该备份的文件包括:
l所有数据库数据文件及表空间,包括系统表空间、临时表空间和回滚/撤销表空间 l控制文件、备份的二进制控制文件和文本控制文件 l如果有正在使用的归档日志,还应该包括归档日志 l警告日志 l如果存在oracle密码文件,还应包括oracle密码文件 l参数文件init<SID>.ora及spfile l重做日志---但是在任何还原重做日志的时候,都应该特别小心,因为还原重做日志会覆盖当前存在的重做日志,而当前重做日志包含重做流中的最后入口信息,这些信息是完成恢复所需的。正因为如此,oracle建议不要对重做日志今次那个备份。 |
2.利用SQL*Plus进行数据库冷备份的操作步骤如下
1)用数据库管理员帐号登录Oracle
SQL> conn sys/oracle as sysdba;
2)查看Oracle数据库的物理结构
Oracle数据库物理结构由控制文件、数据文件、联机重做日志文件组成,通过查询数据字典,可以获取控制文件、数据文件、联机重做日志文件的信息。
控制文件的信息:SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctl
数据文件的信息:SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/example01.dbf
/u01/app/oracle/oradata/orcl/my_undo01.dbf
/u01/app/oracle/oradata/orcl/test01.dbf
联机重做日志文件信息
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
3 /u01/app/oracle/oradata/orcl/redo03.log
2 /u01/app/oracle/oradata/orcl/redo02.log
1 /u01/app/oracle/oradata/orcl/redo01.log
参数文件的信息:SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/db_1/dbs/spfil
eorcl.ora
临时表空间的信息:SQL> select file_name from dba_temp_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf
3)关闭Oracle数据库
SQL> shutdown immediate
4)创建备份目录
[oracle@myCentOS03 oracle]$ mkdir my_cold_backup
[oracle@myCentOS03 oracle]$ pwd
/u01/app/oracle
3)将需要备份的文件拷贝到备份目录
备份数据文件、控制文件和日志文件,如下:
[oracle@myCentOS03 orcl]$ ls
control01.ctl example01.dbf redo02.log system01.dbf undotbs01.dbf
control02.ctl my_undo01.dbf redo03.log temp01.dbf users01.dbf
control03.ctl redo01.log sysaux01.dbf test01.dbf
[oracle@myCentOS03 orcl]$ cp * /u01/app/oracle/my_cold_backup/
[oracle@myCentOS03 orcl]$ pwd
/u01/app/oracle/oradata/orcl
备份参数文件,如下:
[oracle@myCentOS03 oracle]$ cp /u01/app/oracle/db_1/dbs/spfileorcl.ora /u01/app/oracle/my_cold_backup/
备份临时表空间,如下:
[oracle@myCentOS03 oracle]$ cp /u01/app/oracle/oradata/orcl/temp01.dbf /u01/app/oracle/my_cold_backup/
备份USERS表空间,如下:
SQL> select file_name from dba_data_files where tablespace_name='USERS';
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
将USERS表空间设置为脱机状态,如下:
SQL> alter tablespace users offline normal;
[oracle@myCentOS03 oracle]$ cp /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/my_arch_backup/USERS
备份完成之后,将USERS表空间设置为联机状态,如下:
SQL> alter tablespace users online;
4.对备份文件进行恢复
1)模拟数据库一些重要的文件的文件丢失,此处演示数据库文件、控制文件、日志文件丢失,如下:
[oracle@myCentOS03 orcl]$ ls
control01.ctl example01.dbf redo02.log system01.dbf undotbs01.dbf
control02.ctl my_undo01.dbf redo03.log temp01.dbf users01.dbf
control03.ctl redo01.log sysaux01.dbf test01.dbf
[oracle@myCentOS03 orcl]$ rm -rf *
2)启动数据库,查看提示信息,如下:
SQL> startup
ORA-00205: error in identifying control file, check alert log for more info
SQL> select status from v$instance;
STATUS
------------
STARTED
将之前备份的控制文件拷贝到指定目录,如下:
[oracle@myCentOS03 orcl]$ cp /u01/app/oracle/my_cold_backup/*.ctl ./
SQL> startup
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
将之前备份的数据文件拷贝到指定目录,如下:
[oracle@myCentOS03 orcl]$ cp /u01/app/oracle/my_cold_backup/*.dbf ./
SQL> startup
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/orcl/redo01.log'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
将之前备份的日志文件拷贝到指定目录,如下:
[oracle@myCentOS03 orcl]$ cp /u01/app/oracle/my_cold_backup/*.log ./
SQL> startup
ORACLE instance started.
Total System Global Area 524288000 bytes
Fixed Size 2022016 bytes
Variable Size 176162176 bytes
Database Buffers 339738624 bytes
Redo Buffers 6365184 bytes
Database mounted.
Database opened.