ORACLE冷备份与恢复
ORACLE备份和恢复有三种方式:
(1)数据泵(expdp/impdp)
(2)冷备份
(3)RMAN备份
就分类而言,(1)和(2)统有称为“冷”备份,(3)称为“热”备份。
数据泵和冷备份只能将数据库还原到某个时间点上(就是备份的时间点),而RMAN备份在归档模式下,能够实时备份,实时还原,几乎可以做到数据无丢失,但对于数据仓库而言,开归档是很可怕的事情,因为归档日志很大,当然如果有必要也是可以开启的,需要做好ARCHIVELOG的备份和清理工作。
本文只介绍冷备份,RMAN备份暂不介绍,如有需要,可GOOGLE搜索三思笔记《一步一步学RMAN》备份文档。
网址:http://www.itpub.net/thread-810100-1-1.html
一 数据泵
数据泵备份方式是采用ORACLE自带的EXPDP和IMPDP备份的方式。
LINUX和WINDOWS系统:
可通过“expdp -help”命令来查看expdp命令选项
1.1 数据泵备份和还原的先决条件
数据泵备份和还原的先决条件
(1)备份和还原路径
(2)拥有EXPORT FULL DATABASE 和IMPORT FULL DATABASE权限
系统权限和角色:
SELECT *
FROM Dba_Sys_Privs a
WHERE a.Privilege LIKE '%EXP%'
OR a.Privilege LIKE '%IMP%';
SELECT *
FROM Dba_Role_Privs a
WHERE a.Granted_Role LIKE '%IMP%'
OR a.Granted_Role LIKE '%EXP%';
1.2 实施步骤
1.2.1 创建路径
1)检查路径是否存在
SELECT * FROM Dba_Directories;
2)新建备份和还原路径
CREATE OR REPLACE DIRECTORY directory_name AS '具体绝对路径';
例如:CREATE OR REPLACE Directory BACKUP_PATH AS '/home/oracle/dbbackup';
--创建备份路径
GRANT READ,WRITE ON DIRECTORY directory_name TO &user_name;
例如:
Grant READ, WRITE ON Directory BACKUP_PATH TO Test;
--将读写路径的权限给某个用户
1.2.2 授权
授以某个用户的备份和还原的权限:
GRANT EXPORT FULL DATABASE,IMPORT FULL DATABASE TO test;
1.3 执行备份和还原脚本
数据泵备份EXPDP命令,数据库还原IMPDP命令,以下均采用并行的方式,PARALLEL参数取决于CPU与CPU的线程数,但这个值不建议太大。
注意备份脚本应该放到同一行去执行,脚本中间不能有换行。
1.3.1备份TEST用户整库
注意需要补充tns_name参数,当然也可以使用system用户。
另外,使用PARALLEL参数后,建议dumpfile使用%u选项,将一个dumpfile拆分成多个,否则,PARALLEL参数效果不明显。
(1)对应备份脚本:
EXPDP test/oracle@tns_name DIRECTORY=BACKUP_PATH DUMPFILE=EXPDP_TEST_FULL_20140526_%u.DMP SCHEMAS=TEST PARALLEL=8 LOGFILE=EXPDP_TEST_FULL_20140526.LOG
(2)对应还原脚本:
IMPDP test/oracle@tns_name DIRECTORY=BACKUP_PATH DUMPFILE=EXPDP_TEST_FULL_20140526_%u.DMP SCHEMAS=TEST PARALLEL=8 LOGFILE=IMPDP_TEST_FULL_20140526.LOG
1.3.2只备份TEST用户元数据
(1)对应备份脚本
EXPDP test/oracle@tns_name DIRECTORY=BACKUP_PATH DUMPFILE=EXPDP_TEST_METADATA_ONLY_20140526.DMP CONTEXT=METADATA_ONLY PARALLEL=8 LOGFILE=EXPDP_TEST_METADATA_ONLY_20140526.LOG
(2)对应还原脚本
IMPDP test/oracle@tns_name DIRECTORY=BACKUP_PATH DUMPFILE=EXPDP_TEST_METADATA_ONLY_20140526.DMP CONTEXT=METADATA_ONLY PARALLEL=8 LOGFILE=IMPDP_TEST_METADATA_ONLY_20140526.LOG
(3)备份SHELL脚本:
#!/bin/sh
expdp_date=`date +"%Y%m%d"`
expdp test/oracle directory=backup_path dumpfile=expdp_metadata_only_${expdp_date}.dmp schemas=test content=METADATA_ONLY logfile=expdp_metadata_only_${expdp_date}.log
1.3.3只备份TEST用户数据
(1)对应备份脚本
EXPDP test/oracle@tns_name DIRECTORY=BACKUP_PATH DUMPFILE=EXPDP_TEST_DATA_ONLY_20140526_%u.DMP CONTEXT=DATA_ONLY PARALLEL=8 LOGFILE=EXPDP_TEST_DATA_ONLY_20140526.LOG
(2)对应还原脚本
IMPDP test/oracle@tns_name DIRECTORY=BACKUP_PATH DUMPFILE=EXPDP_TEST_DATA_ONLY_20140526_%u.DMP CONTEXT=DATA_ONLY PARALLEL=8 LOGFILE=IMPDP_TEST_DATA_ONLY_20140526.LOG
(3)备份SHELL脚本
#!/bin/sh
expdp_date=`date +"%Y%m%d"`
expdp test/oracle directory=backup_path dumpfile=expdp_DATA_ONLY_${expdp_date}_%u.dmp schemas=test content=DATA_ONLY logfile=expdp_DATA_ONLY_${expdp_date}.log
1.3.4 只备份TEST表
用expdp/impdp备份和还原表数据,可使用tables或者是include命令选项。
UNIX下EXPDP备份是,单引号以及括号需要转义,可以使用PARFILE选项。将命令写在参数文件系统里。
如expdp_parfile.txt
userid=test/oracle@tns_name directory=backup_path dumpfile=test_send_tables_20140526_%u.dmp parallel=8 tables =('TEST_DATA_1,'TEST_DATA_2','TEST_DATA_3'...) logfile=test_send_tables_20140526.log
调用方式:
expdp parfile=expdp_parfile.txt
二 冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外的位置,可以根据重要性文件克隆一份数据库。
冷备份还原注意事项:
两台数据库服务器的操作系统必须是同构的(即:aix->aix或者linux->linux),不能是异构的(linux->aix),否则是没有用的。如果是异构的,那么只能采用数据泵的方式。
冷备份的优点:
(1)冷备模式下概念易于理解,即将需要备份的文件复制到安全的位置
(2)容易恢复到某个时间点上(只需将文件再拷贝回去)
(3)能与归档方法相结合,做数据库“最佳状态”的恢复。
(4)低度维护,高度安全。
冷备份的缺点:
(1)单独使用时,只能提供到“某一时间点上”的恢复。
(2)再实施备份的全过程中,数据库必须处于一致性关闭状态。
(3)若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。另外备份的速度与网络带宽有关。
(4)不能按表或按用户恢复。
2.1 实施步骤
冷备份中必须拷贝的文件包括:
(1)所有数据文件
(2)所有控制文件
(3)所有联机REDO LOG文件
(4)Init.ora文件(可选)
(5).profile或者.bash_profile(可选)
注意:冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
2.1.1备份控制文件
冷备份要关闭数据库,在关闭数据库之前,先要备份控制文件,接着记录数据文件、redo日志文件和控制文件的位置。
(1)备份控制文件:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/tmp/control.txt'
以上操作是将控制文件的内容备份到/tmp/control.txt文本里。目的在于重建控制文件或者RENAME FILE使用。
(2)数据文件位置
SELECT a.File_Name, a.Tablespace_Name, a.Bytes, a.Autoextensible,a.Online_Status
FROM Dba_Data_Files a
UNION
SELECT b.FILE_NAME,b.Tablespace_Name, b.Bytes, b.Autoextensible,b.STATUS
FROM Dba_Temp_Files b;
(3)redo日志文件
SELECT * from v$logfile;
(4)控制文件
SELECT * from v$controlfile;
2.1.2 关闭数据库
(1)停监听
1)ps -ef |grep pmon
2)lsnrctl stop
(2)关闭数据库
SQL>shutdown immediate
2.1.3 复制文件
将控制文件、数据文件、redo日志文件复制到另一块存储上。可以使用SCP命令进行复制。使用SCP命令需要安装SSH软件包,一般来说,LINUX系统默认是安装的;AiX需要安装SSH软件包。如果没有SSH软件包,可以到网上搜索进行下载安装。
LINUX上SCP命令:
usage: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i i dentity_file][-l limit] [-o ssh_option] [-P port] [-S program][[user@]host1:]file1 ... [[user@]host2:]file2
例如:将一台机器上expdp_20140521.log传输到另外一台机器的/home/oracle/backup目录下,命令如下:
scp expdp_20140521.log oracle@192.168.56.88:/home/oracle/backup
SCP命令还可以复制文件夹,-r选项,标识递归的复制子文件夹。
SCP命令支持正则表达式,如:*等模糊查询操作。具体参考:man scp 帮助
SCP复制的速度与网络带宽有关,可以说绝大程度上取决于网络带宽。
建议:
在复制之前最好统计一下数据文件和redo文件的个数,并与数据库中的数据进行比较。
脚本:
(1) ls *.dbf |wc –l
与dba_data_files和dba_temp_files比较
(2) ls *.log |wc –l
与v$logfile比较
(3) ls *.ctl |wc-l
与v$controlfile比较
三 冷备份还原
如果目标库与源库的数据库安装路径都相同的话,相对来说就简单一些,可省略rename file操作,否则,可能需要rename file操作。
当然,如果你手工创建控制文件的话,就不需要rename file操作。因为controlfile里记录了数据文件和redo日志文件的位置。
3.1 数据库安装路径一致
此操作的前提条件是:
(1)数据文件路径一致
(2)数据库的实例名称一致
(3)控制文件的位置一致
操作步骤:
(1)复制完成后,即可拉启数据库
SQL>STARTUP MOUNT;
SQL>ALTER DATABASE OPEN RESETLOGS;
如果以上操作顺利结束,表明数据库还原没有问题,可以启动数据库监听,连接数据库即可。
启动监听:
1)ps -ef |grep pmon
2)lsnrctl start
3.2 数据文件位置不一致
如果数据文件位置不一致,那么就需要手工创建controlfile文件和rename数据文件。
原因:
原控制文件里记录的数据文件的位置与目标库数据文件的位置不同,数据库在mount阶段开始读controlfile里的内容。mount阶段找不到相应的数据文件,在数据库启动过程中就会报错,数据库无法启动。
3.2.1 解决方法
3.2.1.1将数据库开启到nomount状态
SQL>STARTUP NOMOUNT
3.2.1.2重建控制文件
重建控制文件,相对来说比较简单。主要问题在于控制文件的格式不要出错就可以。
手工创建控制文件内容可以从我们之前备份的control.txt里查看具体信息,手工创建控制文件只需要初始化数据库实例名,redo日终和数据文件以及数据库的字符集即可。具体可参考以下样例脚本。
控制文件的主要内容(来自control.txt)大体如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "testdb" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 54288
LOGFILE
GROUP 1 '/home/oracle/app/oradata/testdb/redo01.log' SIZE 128M BLOCKSIZE 512,
GROUP 2 '/home/oracle/app/oradata/testdb/redo02.log' SIZE 128M BLOCKSIZE 512,
GROUP 3 '/home/oracle/app/oradata/testdb/redo03.log' SIZE 128M BLOCKSIZE 512,
GROUP 4 '/home/oracle/app/oradata/testdb/redo04.log' SIZE 128M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/home/oracle/app/oradata/testdb/system01.dbf',
'/home/oracle/app/oradata/testdb/sysaux01.dbf',
'/home/oracle/app/oradata/testdb/undotbs01.dbf',
'/home/oracle/app/oradata/testdb/users01.dbf',
'/home/oracle/app/oradata/testdb/testdb01.dbf',
'/home/oracle/app/oradata/testdb/testdb02.dbf',
'/home/oracle/app/oradata/testdb/testdb03.dbf',
'/home/oracle/app/oradata/testdb/testdbindex.dbf',
'/home/oracle/app/oradata/testdb/undotbs02.dbf',
'/home/oracle/app/oradata/testdb/testdb04.dbf',
'/home/oracle/app/oradata/testdb/testdb05.dbf',
'/home/oracle/app/oradata/testdb/testdb06.dbf',
'/home/oracle/app/oradata/testdb/testdb07.dbf',
'/home/oracle/app/oradata/testdb/testdb08.dbf',
'/home/oracle/app/oradata/testdb/testdb09.dbf',
'/home/oracle/app/oradata/testdb/testdb10.dbf',
'/home/oracle/app/oradata/testdb/testdb11.dbf',
'/home/oracle/app/oradata/testdb/testdb12.dbf',
'/home/oracle/app/oradata/testdb/testdb13.dbf',
'/home/oracle/app/oradata/testdb/testdb14.dbf',
'/home/oracle/app/oradata/testdb/testdb15.dbf'
CHARACTER SET AL32UTF8;
注意手工创建控制文件常见问题就是文件格式问题。
(1)去掉-- STANDBY LOGFILE
(2)DATAFILE与LOGFILE之间不要有空行
(3)另外,控制文件里是不包含临时表空间的数据文件的。
3.2.1.3 rename file操作
rename file操作是为了在数据库MOUNT时能够找到具体数据文件。rename操作是数据库处于mount状态时的操作命令。
SQL>ALTER DATABASE MOUNT;
SQL>@renamefile.sql
执行renamefile.sql脚本,脚本内容参考如下:
ALTER DATABASE RENAME FILE '/home/oracle/app/oradata/testdb/test01.dbf' TO '/u01/app/oradata/test01.dbf';
将原数据库test01.dbf文件指定到目标数据库的新的位置上。可以将源数据库controlfile里的数据文件,形成一个rename脚本,然后调度执行即可。
3.2.1.4打开数据库
如果重建控制文件成功并且renamefile操作也没有问题,那么就可以拉启数据库了。
SQL>ALTER DATABASE RESETLOGS;
如果数据库正常启动,表明数据库还原没有问题,接下来启动监听即可。
1)ps -ef|grep pmon
2)lsnrctl start
3.2.1.5 初始化临时表空间
原因:
控制文件里是不包含临时表空间的,因此,在数据库启动之后,有可能需要重新重建一下临时表空间。
create temporary tablespace TESTTEMP tempfile '/home/oracle/app/oradata/test/testtemp.dbf' size 20G autoextend off;
ORACLE冷备份与恢复的更多相关文章
- Oracle冷备迁移脚本(文件系统)
Oracle冷备迁移脚本(文件系统) 两个脚本: 配置文件生成脚本dbinfo.sh 网络拷贝到目标服务器的脚本cpdb16.sh 1. 配置文件生成脚本 #!/bin/bash #Usage: cr ...
- Oracle数据库备份与恢复的三种方法
转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...
- Oracle冷备和热备脚本
Oracle冷备和热备脚本 冷备脚本: set feedback off set heading off set verify off set trimspool off set echo off ...
- ORACLE数据库备份与恢复详解
ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻 ...
- oracle 数据库备份与恢复
oracle 数据库备份与恢复 包含四个部分: 1.数据泵备份与恢复 2.rman备份与恢复 3.CSV增量备份恢复 4.截库操作 1.数据泵备份与恢复 expdp/ / impdp 时的 CONTE ...
- Oracle数据库冷备份与恢复(救命稻草)
说明,只要是同样系统,同样数据库版本,是可以做冷备恢复.冷备份数据必须是数据库不在open状态下.以oracle11gR2为例. 一.冷备份与冷恢复 具体步骤如下. 1. 复制旧的数据库文件 (1) ...
- 转://Oracle 数据备份与恢复微实践
1.模拟控制文件丢失后的数据库恢复(完全恢复) 今天的主题是备份与恢复,目的就是保护数据的安全性,众所周知Oracle之所以在市场上占据了50%的份额,与它提供了强大的数据保护措施是分不开的,下面我们 ...
- Oracle逻辑备份与恢复
1. 备份的类型 按照备份方式的不同,可以把备份分为两类: 1.1 逻辑备份:指通过逻辑导出对数据进行备份.将数据库中的用户对象导出到一个二进制文件中,逻辑备份使用导入导出工具:EXPDP/IMP ...
- Oracle数据库备份与恢复
第一章. 理解什么是数据库恢复 当 我们使用一个数据库时,总希望数据库的内容是可靠的.正确的,但由于计算机系统的故障(硬件故障.软件故障.网络故障.进程故障和系统故障)影响数据库系 统的操作,影响数据 ...
随机推荐
- Storm Windowing storm滑动窗口简介
Storm Windowing 简介 Storm可同时处理窗口内的所有tuple.窗口可以从时间或数量上来划分,由如下两个因素决定: 窗口的长度,可以是时间间隔或Tuple数量: 滑动间隔(slidi ...
- Delphi的分配及释放---New/Dispose, GetMem/FreeMem及其它函数的区别与相同
转载自:http://www.cnblogs.com/qiusl/p/4028437.html?utm_source=tuicool 我估摸着内存分配+释放是个基础的函数,有些人可能没注意此类函数或细 ...
- Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备一)
上节中提到在遍历创建控件树后,执行了以下操作: 1. CDialogBuilder构建各控件对象并形成控件树,并返回第一个控件对象pRoot: 2. m_pm.AttachDialo ...
- My year of 2016
2016, year of excellence. Year of happiness. In Beijing we can also find some happiness which is s ...
- 《Python数据分析》环境搭建之安装Jupyter工具(一)
(免责声明:本文档是针对Python有经验的用户,如果您对Python了解很少,或者从未使用,建议官方教程用Anaconda安装) 前期准备:Python环境 虽然Jupyter可以运行多种编程语言, ...
- 用python读写excel(xlrd、xlwt)
最近需要从多个excel表里面用各种方式整理一些数据,虽然说原来用过java做这类事情,但是由于最近在学python,所以当然就决定用python尝试一下了.发现python果然简洁很多.这里简单记录 ...
- 【leetcode】Palindrome Number
题目简述: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could n ...
- 友盟推送 .NET (C#) 服务端 SDK rest api 调用库
友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...
- jquery中的ajax方法参数总是记不住,这里记录一下。
1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如 ...
- XVI Open Cup named after E.V. Pankratiev. GP of Ukraine
A. Associated Vertices 首先求出SCC然后缩点,第一次求出每个点能到的点集,第二次收集这些点集即可,用bitset加速,时间复杂度$O(\frac{nm}{64})$. #inc ...