Oracle 数据库备份实战
最近公司的客户希望使用oracle数据库,所以我们只好将数据从mysql数据库迁移到oracle数据库,并对oracle数据库制定了一个备份策略,之前虽然对oracle很熟悉,但做备份策略还是第一次,所以详细记录下来并分享,欢迎大家指教。我们使用rman进行热备份,并启用了闪回表。平时在操作重要数据前,还会通过数据泵(expdp/impdp)进行一次逻辑备份。
备份模式
物理备份与逻辑备份
物理备份: 物理备份是磁盘块为基本单位将数据从主机复制到备机。
逻辑备份: 逻辑备份是以文件为基本单位将数据从主机复制到备机,通过sql或者flatfile文件为中转进行迁移。
高效性:
物理备份是位于文件系统之下和硬件磁盘驱动之上。增加了一个软驱动,它忽略了文件和结构,处理过程简洁,因此在执行过程中所花费在搜索操作上的开销较少,备份的性能很高。
逻辑备份是基于文件级别的备份,由于每个文件都是由不同的逻辑块组成。每一个逻辑的文件块存储在连续的物理磁盘块上,但组成一个文件的不同逻辑块极有可能存储在分散的磁盘块上。逻辑备份在对非连续存储磁盘上的文件进行备份时需要额外的查找操作。这些额外的操作增加了磁盘的开销,降低了磁盘的吞吐率。所以,跟物理备份相比较,备份性能较差。
物理备份避免了当文件出现一个小的改动的时候,就需要对整个文件做备份,只是会去做改动部分的备份,有效的提高了备份效率,节省了备份时间。
逻辑备份模式下,文件即使一个很小的改变,也需将整个文件备份。这样如果一个文件很大的情况下,就会大幅度的降低备份效率,增加磁盘开销和备份时间。
实时性:
物理备份可以做到高效的实时备份,因为在每次主机往磁盘写数据的时候,都需要同时将数据写入到备机,这种写入操作都是基于磁盘扇区的,所以,很快就能被识别。只有在备机完成之后,才会返回给上层的应用系统来继续下一步工作。
逻辑备份是很难做到实时备份的,因为它的每次修改都是基于文件的,而文件的哪部分被修改,系统很难实时捕获到,所以备份的时候需要把整个文件读一遍再发到备机 ,实时的效率不是很高。
支持度:
物理备份是在文件系统之下对数据进行复制,所以它不受文件系统限制,可以支持各种文件系统包括RAW分区。
逻辑备份是以单个文件为单位对数据进行复制,所以它受文件系统限制,仅能对部分支持的文件系统做备份,不支持RAW分区。
(原文摘自:https://yq.aliyun.com/articles/167057?utm_content=m_28176)
备份方式
数据泵备份、热备份和冷备份
数据泵备份
属于逻辑备份,以文件为备份单位,expdb的导出模式有:
1、表模式:导出用户所有表或者指定的表。
2、用户模式:导出用户所有对象以及对象中的数据。
3、导出表空间:导出数据库中特定的表空间。
4、整个数据库:导出数据库中所有对象。
我们以用户模式为例:
1、创建逻辑目录,该命令不会在操作系统创建真正的目录(要先创建真正的目录),最好以system等管理员创建逻辑目录。
SQL> sqlplus root/root@orcl
SQL> conn as sysdba;(输入sys用户名、密码)
SQL> create directory dump_dir as '/data/exp+imp';
2、查看管理员目录(操作系统下该目录必须存在,假如不存在,则出错)
SQL>select * from dba_directories;
3、给root用户赋予在指定目录的操作权限,最好以system等管理员赋予。
SQL>grant read,write on directory dump_dir to root;
4、导出数据
expdp root/root@orcl schemas=root dumpfile=expdp201810291556.dmp log=expdp201810291556.log directory=dump_dir;
5、导入数据
在另一台主机需要建相同的文件夹dump_dir,从用户root导入到用户root,不同用户使用REMAP_SCHEMA=orcldev:orcltwo。
impdp root/root@orcl directory=dump_dir dumpfile=expdp201810291556.dmp schemas=root table_exists_action=replace
实际在使用expdb/impdb时有很多参数可以选择,这里不多讲述,大家自行参考oracle相关资料。
(参考博客:http://lizhiyu.iteye.com/blog/2203081)
热备份和冷备份
冷备份指在数据库系统shutdown之后,使用操作系统的命令对表空间进行拷贝进行备份。冷备份只能恢复到之前的某一备份点,而该备份点到出现问题之间这段时间的数据是无法恢复的。
热备份指在数据库系统不停机的情况下进行备份。热备份只能在归档模式下进行。热备份可以在数据库系统崩溃时根据归档日志恢复到之前的任一时间点。热备份通常用于数据的重要性较高、数据库系统为7 X 24不间歇工作模式时。
我们使用RMAN来实现热备份。RMAN可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。但RMAN不能用于备份初始化参数文件和口令文件。RMAN备份和还原的实质是去启动oracle中的进程,使用驱动进程去备份和还原数据。
在进行热备份时我们会同时备份控制文件、数据文件、重做日志。
数据文件:
每一个Oracle数据库都要有一个或者多个物理的数据文件,这些数据文件里存储的就是Oracle数据库里的数据。就好比你有一个文件夹,里面有几个txt的文本文件,文本文件里记录的你这个月的每一笔花销。如果把文件夹看做是数据库,那么txt文件就是数据文件,而txt文件里面记录的每一笔花销就是数据了。
然而表、索引等等其实都是数据库的逻辑结构,这些表、索引都被物理的存储在了数据文件里面。
数据文件有三个特性:
1、一个数据文件只能属于一个数据库。
2、数据库中的数据文件可以被设置成自动的增长。
3、一个或者多个数据文件就组成了数据库的一个逻辑单元叫做---表空间。
数据文件里的数据,在需要的时候就会被读取到内容Oracle的缓冲区中,比如当我们想查看一天数据时,而这条数据恰好又不在Oracle的缓冲区中,那么Oracle就会把这条数据从数据文件中读取到Oracle的缓冲区中来。
当更改或者新增一天数据时,也不是马上就写到数据文件里面,这么做是为了减少对磁盘的访问,提高效率,数据先存储在缓冲区,然后在一次都写入数据文件,这个过程有一个dbwn后台进程来控制。
控制文件:
每一个数据库都拥有控制文件,它和数据文件一样重要。控制文件里记录的是对数据库物理结构的详细信息,例如它包括如下三个信息:
1、数据库的名称
2、数据文件的名字和存在位置,重做日志文件的名字和存储位置
3、数据库创建的时间标识
Oracle可以使用多重的控制文件,也就是说它可以同时维护多个完全一样的控制文件,这么做就是为了防止数据文件损坏而造成的数据库故障。比如Oracle同时维护3个控制文件,当其中有1个控制文件出问题了,就比较好解决,把出问题的删了,在复制一份没有问题的就可以了。
每当Oracle数据库的实例启动的时候,它就会通过控制文件来识别,要想执行数据库的一些操作,必须需要哪些数据文件和重做日志文件,以及这些数据文件和重做日志文件都存在在什么位置。当数据库的物理构成发生改变的时候,比如新增加了一个数据文件或者重做日志文件,那么控制文件就会自动的更新来记录这些变化。另外在数据库恢复的时候也会用到控制文件。
重做日志文件:
每个Oracle数据库都拥有一组文件,其中包括2个或者多个重做日志文件(其实也可以拥有多组,用途跟多个控制文件一样)。这组文件整体被称为数据库的重做日志,而重做日志又是由一条一条的重做记录组成的,所有也被称为重做记录。
重做日志的主要作用就是记录所有的数据变化,当一个故障导致被修改过的数据没有从内存中永久的写到数据文件里,那么数据的变化是可以从重做日志中获得的,从而保证了对数据修改的不丢失。
为了防止重做日志自身的问题导致故障,所以Oracle拥有多重重做日志功能,也就是可以同时保存多组完全相同的重做日志在不同的磁盘上。
重做日志里的信息只是用于恢复由于系统或者介质故障所引起的数据没法写入数据文件的数据。比如突然断电导致数据库的关闭,那么内存中的数据就不能写入到数据文件中,内存中的数据就会丢失。但当数据库重新启动时丢失的数据是可以被恢复的,可以从最近的重做日志中读取丢失信息然后应用到数据文件中,这样就把数据库恢复到断电前的状态。
在恢复操作中恢复重做日志信息的过程叫做回滚。
热备步骤
--show parameter db_name;
--sqlplus以sysdba身份连接orcl
conn /@orcl as sysdba;
--重启监听:lsnrctl stop/lsnrctl start --1、开启归档模式(sqlplus工具,sys用户)
--查看闪回恢复区的信息。
show parameter db_recover
--增大闪回恢复区
alter system set db_recovery_file_dest_size=3G;
--修改归档日志的存放路径
alter system set log_archive_dest_1='location=/data/oracleArchive'; --查看当前日志操作模式
SELECT log_mode from v$database;
--启用归档日志前要先停止数据库
shutdown immediate;
--数据库以mount方式启动
startup mount;
--启用数据库归档
alter database archivelog;
--打开数据库
alter database open;
--查看归档日志信息
archive log list; --2、开启补充日志
--查看当前数据库中补充日志状态
select SUPPLEMENTAL_LOG_DATA_MIN min,
SUPPLEMENTAL_LOG_DATA_PK pk,
SUPPLEMENTAL_LOG_DATA_UI ui,
SUPPLEMENTAL_LOG_DATA_FK fk,
SUPPLEMENTAL_LOG_DATA_ALL "all"
from v$database;
--最小补充日志是最基本的一种数据库级补充日志,
--启用最小补充日志
alter database add supplemental log data ;
--关闭最小补充日志
--alter database drop supplemental log data ;
--主键补充日志
alter database add supplemental log data (primary key) columns ;
--唯一索引补充日志
alter database add supplemental log data (unique) columns ;
--外键补充日志
alter database add supplemental log data (foreign key) columns ;
--全体字段补充日志
alter database add supplemental log data (all) columns; --3、数据库备份,方式为全库方式
--文件结构:
/data/oracleArchive
/data/rmanbak/rman_ts
/data/rmanbak/log
/data/oracleBackup
/data/oracleBackup/backup1
/data/oracleBackup/backup2
--a.开启归档模式
--b.创建恢复目录的表空间rman_ts(sys用户):
create tablespace rman_ts datafile '/data/rmanbak/rman_ts.dbf' size 20G;
--c.创建rman用户并授权
create user rman identified by root default tablespace rman_ts temporary tablespace temp;
grant connect, recovery_catalog_owner, resource to rman;
--d.创建恢复目录
rman catalog rman/root target orcl
create catalog tablespace rman_ts
--e.注册目标数据库
register database;
--f.使用rman进行完全数据库备份:
--自动备份需要写脚本且定时执行,参见文件oracle_rman_backup.sh:
--g.使用rman进行恢复
--归档日志:
run{
allocate channel dev1 type disk;
restore archivelog all;
release channel dev1;
}
--恢复数据库,需要将数据库mount或将数据文件offline
--rman target sys/root@orcl
--rman> shutdown immediate
--rman> startup mount
--RMAN> restore database; --恢复到某一备份
--RMAN> recover database; --从某一备份根据重做日志恢复到指定时间点
--RMAN> alter database open;
run{
allocate channel dev1 type disk;
set until time "to_date('2018-09-21 14:45:50','yyyy-mm-dd hh24:mi:ss')";--可以设置恢复到某一时间点
restore database;
recover database;
release channel dev1;
} --select * from equ as of timestamp to_timestamp('2018-09-21 14:45:50','yyyy-mm-dd hh24:mi:ss');
--flashback table equ to timestamp(to_date('2018-09-26 14:45:50','yyyy-mm-dd hh24:mi:ss')); --根据闪回表恢复指定表的数据到指定时间点
oracle_rman_backup.sh
#在node1每晚进行全量备份,同时删除过期备份和归档日志文件
#!/bin/bash
ORACLE_SID=ORCL
ORACLE_HOME=/data/oracle/product/11.2.0/db_1
ORACLE_BASE=/data/oracle
export ORACLE_SID
export ORACLE_HOME
export ORACLE_BASE
backtime=`date +%Y%m%d`
echo $backtime
$ORACLE_HOME/bin/rman target sys/root@orcl log=/data/rmanbak/log/node1_backupall_$backtime.log<<EOF
run{
configure default device type to disk;
configure device type disk parallelism 2;
configure channel 1 device type disk format '/data/oracleBackup/back1/backup_%U';
configure channel 2 device type disk format '/data/oracleBackup/back2/backup_%U';
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/data/oracleBackup/back1/ctl_%F';
configure retention policy to recovery window of 7 days;
}
run{
backup database ;
backup archivelog all delete input;
report obsolete;
delete noprompt obsolete;
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
}
EOF
echo "backup complete!"
#当有多个节点进行备份时相互copy日志
#scp /oracle/rmanbak/log/node1_backupall_$backtime.log oracle@OracleNode2:/oracle/rmanbak/log/
exit #RAC rman backup scripts
#每晚1点开始备份
##crontab -e
##0 1 * * * /data/rmanbak/oracle_rman_backup.sh >> /data/rmanbak/log/oracle_rman_backup.log
参考:
博客:http://lizhiyu.iteye.com/blog/2203081
https://yq.aliyun.com/articles/167057?utm_content=m_28176
Oracle 数据库备份实战的更多相关文章
- Java实现Oracle数据库备份
今天将很早就实现的一个Oracle数据库备份功能粘贴出来,这个功能是在大学做阶段设计时写的: import java.io.File; import java.io.IOException; /** ...
- Oracle数据库备份及还原
Oracle数据库备份 1:找到Oracle安装路径我的就是默认C盘 C:\app\wdjqc\admin\orcl\adump 2:执行文件:back.bat 文件内容如下: @echo off ...
- Oracle数据库备份/导出(exp/expd)、导入(imp/impd)
常用的oracle数据库备份(导入/导出)有两种,分别是exp/imp和expd/impd,前者是Orace早期版本带有的导入导出工具,后者是Oracle10g后出现的,下面进行分别介绍! 1.e ...
- Oracle数据库备份还原笔记
Oracle数据库备份还原笔记 通过查阅资料知道Oracle备份还原的方式有三种.分别的是导出/导入.热备份和冷备份.导出/导入是一种逻辑备份.而热备份和冷备份是物理备份.[参考资料(https:// ...
- Oracle数据库备份、灾备的23个常见问题
为了最大限度保障数据的安全性,同时能在不可预计灾难的情况下保证数据的快速恢复,需要根据数据的类型和重要程度制定相应的备份和恢复方案.在这个过程中,DBA的职责就是要保证数据库(其它数据由其它岗位负责) ...
- oracle数据库备份还原命令
oracle数据库备份命令exp 用户名/密码@orcl file=d:\xxxxxx.dmp owner=用户名 oracle数据库还原命令sqlplus conn / as sysdba drop ...
- oracle数据库备份 -九五小庞
oracle数据库备份
- Oracle数据库备份、恢复及常见问题
通常我们都是使用PL/SQL Developer来对Oracle中的数据对象和数据进行管理.如果我们想方便快速还原或者部署Oracle到新机器上,怎么进行数据库的备份.导入恢复呢? 这里我们必须要考虑 ...
- oracle数据库备份
--数据库备份--导出 exp userid=shoppingsys/shoppingsys@orcl file=/home/oracle/shoppingsys.dmp log=/home/orac ...
随机推荐
- 报表软件测评来啦!Smartbi电子表格使用感受
最近因为工作需求,需要用到一些报表工具软件,看到Smartbi比较方便,可以直接在excel中进行配置,所以安装体验了一下. 下载 Smartbi有多个版本,我主要是在excel中使用,所以下载了一个 ...
- 知识增广的预训练语言模型K-BERT:将知识图谱作为训练语料
原创作者 | 杨健 论文标题: K-BERT: Enabling Language Representation with Knowledge Graph 收录会议: AAAI 论文链接: https ...
- 小白学python第1问: int 占几个字节?
windows 64位机器,python3.7:后面的文章中,没有特别说明的话,都是在该环境下运行 int 占几个字节? C语言中(GCC编译器),int 占据4个字节,python呢? 我们用pyt ...
- Java课程设计---安装解压版mysyql
1.解压 将mysql-5.7.13-winx64.rar解压到C盘根目录.(将原有data文件夹清空,注意是清空,不是删除data文件夹) 2. 配置环境变量MYSQL_HOME (参照java打开 ...
- Qt:打印输出到控制台,类似C++的cout
1. #include<qDebug> 2. qDebug<<"Hello,world!"; 补充,如果不是控制台文件,比如是窗口应用程序,需要在pro文件 ...
- pandas模块篇(终章)及初识mataplotlib
今日内容概要 时间序列 针对表格数据的分组与聚合操作 其他函数补充(apply) 练习题(为了加深对DataFrame操作的印象) mataplotlib画图模块 今日内容详细 时间序列处理 时间序列 ...
- python中max使用key参数
arr = [1,2,2,2,2,3,3,3] arr = collections.Counter(arr) b = max(arr.keys(),key = arr.get) 这个时候b为arr中元 ...
- 8.Flink实时项目之CEP计算访客跳出
1.访客跳出明细介绍 首先要识别哪些是跳出行为,要把这些跳出的访客最后一个访问的页面识别出来.那么就要抓住几个特征: 该页面是用户近期访问的第一个页面,这个可以通过该页面是否有上一个页面(last_p ...
- 面试官:Redis中集合数据类型的内部实现方式是什么?
虽然已经是阳春三月,但骑着共享单车骑了这么远,还有有点冷的.我搓了搓的被冻的麻木的手,对着前台的小姐姐说:"您好,我是来面试的."小姐姐问:"您好,您叫什么名字?&quo ...
- linux文本编辑工具
文本编辑工具VIM vim 主要有三种工作模式,分别是命令模式.插入模式和编辑模式,输入 vim 文件名 我们可以进入命令模式,输入字符 i或者a或者o我们可以进入插入模式,进入插入模式之后我们可以进 ...