重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1476|回复: 0
打印 上一主题 下一主题

[Oracle] Oracle热备份操作步骤

[复制链接]
跳转到指定楼层
楼主
发表于 2023-2-26 17:32:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
概念
Oracle 热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。
热备份是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式。
热备份时,Oracle数据库必须处于归档模式(即archivelog模式,SCN不一致)下。

热备的过程

冻结块头:控制SCN在备份时不发生变化
进行物理拷贝
解冻块头:让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态)
基于数据库的热备
alter database begin backup;
拷贝所有的datafile到备份目录
alter database end backup;

基于表空间的热备
alter tablespace tablespace_name begin backup;
拷贝tablespace_name表空间的数据文件到备份目录
alter tablespace tablespace_name end backup;

当alter tablespace tablespace_name begin backup时完成的任务
检查点事件发生,检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘
在数据文件头部冻结当前检查点事件发生时的SCN号
所有发生变化数据块的完整镜像(修改前后)被写入到redo log中
允许该表空间内数据的正常读写

建议使用基于表空间的热备,这样将尽可能的减少对系统性能的影响

控制文件的热备
alter database backup controlfile to '<dir>' [reuse];               //控制文件的完整备份
alter database backup controlfile to trace as '<dir>';            //用于创建控制文件的语句,丢失了部分信息
控制文件发生变化情况
alter database [add |drop] logfile;
alter database [add |drop] logfile member;
alter database [add |drop] logfile group;
alter database [archivelog |noarchivelog];
alter database rename file;
create tablespace;
alter tablespace [add | rename] datafile;
alter tablespace [read write | read only];
drop tablespace;

参数文件的热备
create pfile from spfile ;
create pfile = '<dir>' from spfile;

热备份操作

1)查看Oracle数据库的日志模式,一定要确保是归档模式!

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled                   //Disabled表示为非归档模式
Archive destination            /u01/admin/denver/archdest
Oldest online log sequence     1
Current log sequence           1

现在需要设置为归档模式
SQL> shutdown immediate
Database cloesd.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.
Total System Global Area  422670336 bytes
Fixed Size                  1336960 bytes
Variable Size             314575232 bytes
Database Buffers          100663296 bytes
Redo Buffers                6094848 bytes
Database mounted.

SQL>  alter database archivelog
Database altered.

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Enabled                     //Enabled表示为归档模式
Archive destination            /u01/admin/denver/archdest
Oldest online log sequence     1
Current log sequence           1

SQL> alter database open;
Database altered.

2)临时表空间的数据文件、日志文件不需要备份,如果设置为 备份模式,会收到报错。

查看临时表空间

SQL> select tablespace_name from dba_temp_files;

TABLESPACE_NAME
------------------------------
TEMP

查看临时表空间的数据文件

SQL> select name from v$tempfile;

NAME
------------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf

将临时表空间置为备份模式,收到了错误的提示

SQL> alter tablespace temp begin backup;
alter tablespace temp begin backup
*
ERROR at line 1:
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE

将临时表空间置为备份模式,收到了错误的提示

SQL> alter temporary tablespace temp begin backup;
alter temporary tablespace temp begin backup
*
ERROR at line 1:
ORA-00940: invalid ALTER command

3)  Oracle热备份脚本

基于数据库热备的脚本

SQL> ho vim /tmp/tmphotbak.sql;      //将下面的内容输入到/tmp/tmphotbak.sql脚本文件中
    set feedback off
    set heading off
    set verify off
    set trimspool off
    set pagesize 0
    set linesize 200
    define dir = '/u01/app/oracle/hotbak'
    define script = '/tmp/hotbak.sql'
    spool &script
    select 'ho cp ' ||name|| ' &dir'  from v$datafile;
    spool off
    alter database begin backup;
    start &script
    alter database end backup;
    alter database backup controlfile to '&dir/controlbak.ctl';
    create pfile = '&dir/initorcl.ora' from spfile;

执行该脚本即可对数据库进行热备

SQL> start /tmp/tmphotbak.sql;  

基于表空间热备的脚本

SQL> ho vim /tmp/tmphotbak_tb.sql            //将下面的内容输入到/tmp/tmphotbak.sql脚本文件中
    set feedback off
    set heading off
    set verify off
    set trimspool off
    set pagesize 0
    set linesize 200
    define dir = '/u01/app/oracle/hotbak'
    define script = '/tmp/hotbak_tb.sql'
    ho rm &script
    ho rm &dir/*
    spool &script
    select 'alter tablespace '|| tablespace_name ||' begin backup ;' ||
    chr(10)||'ho cp ' || file_name || ' &dir ' ||
    chr(10)||'alter tablespace '|| tablespace_name || ' end backup;'
    from dba_data_files order by tablespace_name;
    spool off
    start &script
    alter database backup controlfile to '&dir/controlbak.ctl';
    create pfile = '&dir/initorcl.ora' from spfile;

执行该脚本即可对数据库基于表空间进行热备

SQL> start /tmp/tmphotbak.sql;

4)备份的相关视图

SQL> desc v$backup;
Name                                      Null?    Type
----------------------------------------- -------- ---------------------
FILE#                                              NUMBER
STATUS                                             VARCHAR2(18)
CHANGE#                                            NUMBER                        //记录备份时的SCN号
TIME                                               DATE

状态为NOT ACTIVE ,此时没有任何数据处于备份状态
SQL> select * from v$backup;   

FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE            1006747 16-AUG-10
2 NOT ACTIVE            1006793 16-AUG-10
3 NOT ACTIVE            1006729 16-AUG-10
4 NOT ACTIVE            1006807 16-AUG-10
5 NOT ACTIVE            1006717 16-AUG-10

对表空间users进行热备
SQL> alter tablespace users begin backup;  
Tablespace altered.

对应的file# 为的处于ACTIVE状态
SQL> select * from v$backup;   

FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE            1006747 16-AUG-10
2 NOT ACTIVE            1006793 16-AUG-10
3 NOT ACTIVE            1006729 16-AUG-10
4 ACTIVE                1006852 16-AUG-10
5 NOT ACTIVE            1006717 16-AUG-10


备份时发生断电或意外故障的恢复
假定users表空间目前置于begin bakup模式,系统断电     
SQL> alter tablespace users begin backup;
Tablespace altered.

在另一个会话中强制关闭数据库
SQL> shutdown abort;
ORACLE instance shut down.

启动后收到错误提示
SQL> startup
ORACLE instance started.
Total System Global Area  469762048 bytes
Fixed Size                  1220048 bytes
Variable Size              92275248 bytes
Database Buffers          373293056 bytes
Redo Buffers                2973696 bytes
Database mounted.
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

查看备份视图,文件此时处于活动状态
SQL> select * from v$backup;

FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
1 NOT ACTIVE            1006958 16-AUG-10
2 NOT ACTIVE            1006983 16-AUG-10
3 NOT ACTIVE            1006943 16-AUG-10
4 ACTIVE                1007072 16-AUG-10
5 NOT ACTIVE            1006931 16-AUG-10

使用end backup来终止备份
SQL> alter database datafile 4 end backup;   --此处也可以使用recover datafile 4来完成恢复
Database altered.

SQL> alter database open;
Database altered.

SQL> select * from dual;
D
-
X

-----------------------------------oracle非归档模式与归档模式备份-----------------------------------
1)不一致性备份(archivelog归档模式)
因为备份操作不可能瞬时完成,而数据文件时刻都在写,SCN时刻都在变,备份完第n个数据文件时,第n+1个数据文件的SCN有可能已经与之前的都不同了。
不一致性的备份在恢复后必须借助归档日志文件和联机重做日志,将数据库修复到一致性的状态才能打开。因此,创建不一致性备份除了备份数据库启动时必须的数据文件和控制文件之外,还需要备份归档日志文件。

2)一致性备份(noarchivelog非归档模式)
备份的数据文件和控制文件拥有相同的SCN,即一致性备份。只有数据库以shutdown immediate方式关闭。并且数据库未被置于打开状态时创建的备份才是一致性备份。

3)热备份一定是不一致性备份,即归档模式的备份
利用要创建的热备份做恢复时,有可能需要应用归档日志或联机重做日志,才能将数据库修复到一个一致性状态,因此要创建有效的热备份,要求数据库必须处于归档模式。
数据库是否处于归档模式不影响一致性备份的创建,但是对于非归档数据库而言,只有一致性备份才算是有效备份。
只有归档模式下创建的不一致性备份才能被视为有效备份,非归档模式下创建的不一致备份极有可能无法恢复,或者恢复后丢失部分数据。

4)要热备份,数据库必须处于归档模式。冷备份,数据库可以处于归档模式也可以处于非归档模式

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-25 17:46 , Processed in 0.085479 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表