ORACLE冷备份与恢复

原文: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;

时间: 2024-09-10 17:35:19

ORACLE冷备份与恢复的相关文章

ORACLE用户自定义备份与恢复笔记

oracle|备份|笔记|恢复  用户自定义的数据库备份  备份类型 备份方法 示例 数据文件 操作系统命令或工具 C:\COPY datafile1.ora datafile.bak 归档重做日志文件 操作系统命令或工具 C:\COPY log_01_23.arc log_01_23.bak 控制文件 SQL命令 SQL>ALTER DATABASE BACKUP CONTROLFILE  TO confile.bak; 初始化参数文件 SQL命令 SQL>CREATE  PFILE=SID

oracle 数据库备份与恢复

问题描述 备注:数据库名:test 密码:test 表空间:test_data 创建用户test授权为dba1.怎样完全备份数据库2.怎样把备份的数据库还原到本机,并且以前的数据删除,以现在数据库的数据为准已经使用过的语句,但是一下语句必须数据库没有表的情况才能导入,如果有表及数据,导入后数据不会覆盖以前的,相当于导入前的数据+刚导入的数据=导入后的数据.1.用户方式,将指定用户的所有对象及数据导出/导入.导出:$ exp test/test file=d:test.dmp log=d:test

我的MYSQL学习心得(十四) 备份和恢复

原文:我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义存储过程

Oracle备份与恢复入门

整理自<Oracle database 11g RMAN备份与恢复> 001 逻辑备份与恢复     Oracle database 11g使用Oracle data pump体系结构来支持逻辑备份和恢复.这些实用程序包括数据泵导出程序(expdp)和数据泵导入程序(impdp).对于逻辑备份来说,时间点恢复是不可能的.RMAN不进行逻辑备份和恢复. 002 Oracle物理备份与恢复     RMAN实际上是物理备份.     在archivelog模式和noarchivelog模式下,Or

Oracle认证 OCP DBA考证轻松过关详解

终于把 OCP DBA 的课程都考完了,累啊!总的来说ORACLE的认证值得考.本人有CCNP.MCSE证书,但通过DBA的考试,觉得不仅加深了对现代数据库的了解,还丰富了计算机科学的知识结构.我觉得,从某种角度来说,ORACLE数据库甚至具备一些操作系统的功能. ORACLE的考试,要记住的东西相当多,考试要求基本上是以原始的命令行方式,而不是图形界面操作,因此表的名字,以及相应的scripts相当多是要求记住的,整个DBA考试,光书中提到的table就有数百个之多,我想这主要是因为过去ORA

Oracle中TIMESTAMP的几种类型介绍与实例_oracle

TIMESTAMP的几种类型比较 TIMESTAMP 时间戳类型,与date的区别在于,date不能精确到毫秒,而timestamp可以精确到毫秒,毫秒的位数为0-9位,默认为6位. SQL> select tp from timestamp_test; TP -------------------------------------------------------------------------------- 01-3月 -16 09.22.33.000000 上午 TIMESTAMP

oracle的导入导出注意事项及心得分享_oracle

导入导出oracle方案是备份和恢复的主旋律,不是dba,对于数据的导入导出没有太多的研究,仅有一点点在使用过程中的体会,在此简单说明. 导入 复制代码 代码如下: imp xzfy_master/xzfy@orcl file=d:\master0312.dmp full=y; 这里full=y一定要写上,就是要导入整个方案来着.还有分号一定要有否则不执行. 导出 复制代码 代码如下: exp xzfy_efmweb/xzfy@orcl file=d:\xzfy_efmweb0312.dmp 导

Oralce 数据库的灾难恢复

随着办公自动化和电子商务的飞速发展,企业对信息系统的依赖性越来越高,数据库作为信息系统的核心担当着重要的角色.尤其在一些对数据可靠性要求很高的行业如银行.证券.电信等,如果发生意外停机或数据丢失其损失会十分惨重.为此数据库管理员应针对具体的业务要求制定详细的数据库备份与灾难恢复策略,并通过模拟故障对每种可能的情况进行严格测试,只有这样才能保证数据的高可用性.数据库的备份是一个长期的过程,而恢复只在发生事故后进行,恢复可以看作是备份的逆过程,恢复的程度的好坏很大程度上依赖于备份的情况.此外,数据库

Oralce数据库的灾难恢复

随着办公自动化和电子商务的飞速发展,企业对信息系统的依赖性越来越高,数据库作为信息系统的核心担当着重要的角色.尤其在一些对数据可靠性要求很高的行业如银行.证券.电信等,如果发生意外停机或数据丢失其损失会十分惨重.为此数据库管理员应针对具体的业务要求制定详细的数据库备份与灾难恢复策略,并通过模拟故障对每种可能的情况进行严格测试,只有这样才能保证数据的高可用性.数据库的备份是一个长期的过程,而恢复只在发生事故后进行,恢复可以看作是备份的逆过程,恢复的程度的好坏很大程度上依赖于备份的情况.此外,数据库