Oracle数据库冷备份与热备份操作梳理
Oracle数据库的备份方式有冷备份和热备份两种,针对这两种备份的实施过程记录如下:
一、Oracle冷备份
概念
数据库在关闭状态下完成所有物理系统文件拷贝的过程,也称脱机备份。
适合于非归档模式(即noarchivelog模式,SCN保持一致)下,数据库处于一致性状态。
冷备份,数据库可以处于归档模式也可以处于非归档模式,最好是处于非归档模式。
步骤
- 首先在运行的库中得到数据库运行的所有的物理文件位置,然后在计划内关闭数据库(shutdown)
- 再执行拷贝物理文件到备份路径或备份设备
- 备份完成后立即启动数据库让其提供正常的服务
冷备份脚本的写法
首先应该在相关视图里查出数据库的数据文件,日志文件,控制文件,临时文件所在的位置
注意:不要直接在oradata下进行cp就行了,因为生产库里各个文件通常分布在不同的磁盘,不同的地方,所以在去视图里获得真实路径
冷备份操作
1)查看Oracle数据库的日志模式,如果是归档模式,将需要将数据库设置为noarchivelog模式(非归档模式),从而进行冷备份。
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> 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 noarchivelog Database altered. 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> alter database open; Database altered.
2)查看实例和数据库的相关信息
SQL> select instance_name,version,status,archiver,database_status from v$instance; INSTANCE_NAME VERSION STATUS ARCHIVE DATABASE_STATUS ---------------- ----------------- ------------ ------- ----------------- orcl 10.2.0.1.0 OPEN STOPPED ACTIVE SQL> select dbid,name,log_mode from v$database; DBID NAME LOG_MODE ---------- --------- ------------ 1242732291 ORCL NOARCHIVELOG
3)查看数据文件及状态信息
SQL> select file_name,tablespace_name,status,online_status from dba_data_files; FILE_NAME TABLESPACE STATUS ONLINE_ ------------------------------------------------------- ---------- --------- ------- /u01/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 AVAILABLE ONLINE /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM AVAILABLE SYSTEM /u01/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX AVAILABLE ONLINE /u01/app/oracle/oradata/orcl/users01.dbf USERS AVAILABLE ONLINE /u01/app/oracle/oradata/orcl/example01.dbf EXAMPLE AVAILABLE ONLINE /u01/app/oracle/oradata/orcl/tbs1_1.dbf TBS1 AVAILABLE ONLINE /u01/app/oracle/oradata/orcl/tbs1_2.dbf TBS1 AVAILABLE ONLINE
4)查看数据文件
SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/system01.dbf /u01/app/oracle/oradata/orcl/undotbs01.dbf /u01/app/oracle/oradata/orcl/sysaux01.dbf /u01/app/oracle/oradata/orcl/users01.dbf /u01/app/oracle/oradata/orcl/example01.dbf /u01/app/oracle/oradata/orcl/tbs1_1.dbf /u01/app/oracle/oradata/orcl/tbs1_2.dbf
5)查看临时文件
SQL> select name from v$tempfile; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/temp01.dbf
6)查看日志文件
SQL> select member from v$logfile; MEMBER ------------------------------------------------------------ /u01/app/oracle/oradata/orcl/redo2a.rdo /u01/app/oracle/oradata/orcl/redo2b.rdo /u01/app/oracle/oradata/orcl/redo1a.rdo /u01/app/oracle/oradata/orcl/redo3a.rdo /u01/app/oracle/oradata/orcl/redo3b.rdo /u01/app/oracle/oradata/orcl/redo1b.rdo
7)查看控制文件
SQL> select name from v$controlfile; NAME ------------------------------------------------------------ /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl
8)创建备份目录
SQL> ho mkdir /u01/app/oracle/coolbak
9)使用连接符生成复制文件命令
SQL> select 'ho cp ' || name || ' /u01/app/oracle/coolbak' from v$controlfile; 'HOCP'||NAME||'/U01/APP/ORACLE/COOLBAK' ---------------------------------------------------------------------------------- ho cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/coolbak ho cp /u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/coolbak
将上面的输入保存为tmpbak.sql
SQL> save /tmp/tmpbak.sql; Created file /tmp/tmpbak.sql
10)编辑tmpbak.sql,将下面的内容输入到tmpbak.sql
SQL> ho vim /tmp/tmpbak.sql set feedback off set heading off set verify off set trimspool off set pagesize 0 set linesize 200 define dir = '/u01/app/oracle/coolbak' define script = '/tmp/coolbak.sql' spool &script select 'ho cp ' || name || ' &dir' from v$controlfile union all select 'ho cp ' || name || ' &dir' from v$datafile union all select 'ho cp ' || member || ' &dir' from v$logfile union all select 'ho cp ' || name || ' &dir' from v$tempfile / create pfile = '&dir/initorcl.ora' from spfile; ho cp /u01/app/oracle/10g/dbs/orapworcl &dir spool off shutdown immediate start &script ho rm &script startup
执行tmpbak.sql(执行过程及其中的数据库启动在此略过)
SQL> @/tmp/tmpbak.sql;
启动后查看备份的文件
SQL> ho ls /u01/app/oracle/coolbak control01.ctl orapworcl redo2b.rdo system01.dbf users01.dbf control02.ctl redo1a.rdo redo3a.rdo tbs1_1.dbf example01.dbf redo1b.rdo redo3b.rdo tbs1_2.dbf initorcl.ora redo2a.rdo sysaux01.dbf undotbs01.dbf
冷备份总结
优点
- 冷备模式下概念易于理解,即将需要备份的文件复制到安全的位置
- 操作比较简单,不需要太多的干预
- 容易恢复到某个时间点上(只需将文件再拷贝回去)
- 能与归档方法相结合,作数据库“最新状态”的恢复。
缺点
- 备份时,数据库必须处于一致性关闭状态
- 只能提供到某一时间点的恢复
- 备份时速度比较慢,尤其是数据量大性能影响比较大
- 不能实现基于表和用户级别的数据恢复
二、Oracle热备份
概念
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)要热备份,数据库必须处于归档模式。冷备份,数据库可以处于归档模式也可以处于非归档模式
Oracle数据库冷备份与热备份操作梳理的更多相关文章
- 使用imp命令和exp命令对oracle数据库进行导入导出操作
命令说明 imp命令和exp命令需要在cmd命令窗口下执行,并且需要在系统环境变量中配置imp,exp命令所在目录 导出命令 --全库导出 exp system/systempassword@orcl ...
- Oracle数据库常见的误操作恢复方法(上)
实验环境:Linux6.4 + Oracle 11g 面向读者:Oracle开发维护人员 概要: 1.误操作drop了emp表 2.误操作delete了emp表 3.误操作delete了emp表的部分 ...
- Window8.1下oracle数据库报:ora-12170 操作超时
PLSQL 链接本机:oracle11g 服务名:orcl 一直链接不上,等了大概3分钟, 提示:ora-12170操作超时: 重启了数据库 问题还是无法解决;上网搜了一下,发现报ora-1217 ...
- Oracle 数据库纯dos代码操作
1. 安装成功后进入DOS界面操作 在进行以下操作时,需启动Oracle服务. A.进入sql界面:开始--运行--cmd:输入sqlplus 回车 提示输入正确的用户名和密码 B.开始—>所有 ...
- Linux下oracle数据库启动和关闭操作
第一步:登陆 root登陆之后切换到oracle用户上,输入 su oracle 第二步:连接 在oracle用户下,输入 sqlplus /nolog 第三步:使用管理员权限 输入 connect ...
- 对oracle数据库Blob字段的操作
java实体类 定义类型 byte[] private byte[] str_blob hibernate映射文件类型oracle.sql.BLOB <property name="s ...
- windows环境下Oracle数据库冷备份和恢复
1.点击开始菜单的“运行”,输入sqlplus/nolog 2.在弹出的命令行窗口以sysdba身份登陆,要输入:系统用户名/登陆密码@数据库实例名,如sys/testora@orcl 3.输入 al ...
- Oracle 数据库创建(图形界面操作)
Oracle 创建数据库图文分解: 1. 选择所有程序->Oracle-OraDb11g_home1->Configuration and Migration Tools -> Da ...
- oracle 数据库常用数据表操作
在oracle中创建sequence CREATE SEQUENCE sequence名称 MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCRE ...
随机推荐
- SMP多核启动
在 Linux系统中,对于多核的ARM芯片而言,在Biotron代码中,每个CPU都会识别自身ID,如果ID是0,则引导Bootloader和 Linux内核执行,如果ID不是0,则Biotron一般 ...
- win10怎么查看进程
1.在任务栏右击-任务管理器 2.
- 【PAT】B1066 图像过滤(15 分)
注意输出是占三位,其他的挺水 #include<stdio.h> #include<algorithm> using namespace std; int main(){ in ...
- Azkaban-2.5.0-部署与常见案例
该文章是基于 Hadoop2.7.6_01_部署 . Hive-1.2.1_01_安装部署 进行的 1. 前言 在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核 ...
- <20180923>中秋节日期间的维护日志
(一) 陌生环境下断网是有风险的,提前做好准备. 1.1 某企业的机柜自2017年5月开始就没有作硬件更新和维护了: 趁着这次节日空挡可做一个机柜的重新整理维护: 首先看了下是老款某知名品牌的型号为6 ...
- el-table表格标题换行
在做一些管理后台的项目中,表格时最常见的,当有时数据字段多时往往会用滚动条,但从用户体验角度讲,肯定需要多展示信息,那么可能需要一个单元格放多个字段,这时候表头就需要换行. 具体实现如下: // 注意 ...
- centos7下安装docker(8.3容器的常用操作)
yu我们之前已经学习了如何运行容器docker run,也学习了如何进入容器docker attach和docker exec,下面我们来学习容器的其他操作: stop/start/restart 1 ...
- yii2 对象跟数组输出数据到view视图方法
public function actionJiekou(){ $url = 'http://wap.guoshihui.com/_static/wap/video/startVideo.mp4'; ...
- 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)
一.方案选择 通过Lvs+keepalived+mysql(主主同步)实现数据库层面的高可用方案,需要两台服务器作为数据库提供业务数据的存储,应用服务器通过vip访问数据库,允许同一时间内一台数据库服 ...
- Click to add to Favorites Troubleshooting: High Version Count Issues (Doc ID 296377.1)
Copyright (c) 2018, Oracle. All rights reserved. Oracle Confidential. Click to add to Favorites Trou ...