一、备份简介

1.备份策略

  • 完全备份:一个或多个数据文件的完整副本,包括从备份开始的所有级的数据块
  • 增量备份:有两种,差异增量和累积增量。包含从最近一次备份以来被修改过或增加过的数据块。增量备份又分为0级增量备份、1级差异增量备份、1级累积增量备份。增量备份支持归档和非归档模式,而且只能使用rman的时候才能实现增量备份
  • 差异增量:是备份上级及同级备份以来所有变化的数据块,差异增量是默认的增量备份。备份新增加的数据。
  • 累积增量:是备份上级备份以来所有变化的数据块,备份之前所有的数据(使用这个,安全)

2. 备份分类

  • 全备:包括所有的数据文件、控制文件、密码文件、在线重做日志文件、归档日志文件
  • 非全备:比如备份一个或多个数据文件,一个表空间等,只在归档模式下有效
  • 冷备:在数据库关闭时发生的备份,是在一致性关闭数据库后,控制文件scn与数据库文件头部的scn一致。又称为脱机备份
  • 热备:在数据库使用时发生的备份,联机备份一个数据文件的scn与控制文件不一致。可以是全备,也可以是部分备份,在归档模式下才能完成。又称作联机备份、非一致性备份。

3. 备份方式

  • 物理备份:所有物理文件的一个副本,如数据文件、日志文件等,这些文件都存在本地磁盘或相应的存储上面,包括冷备(非归档模式)、热备(归档模式)
  • 逻辑备份:将表、索引、存储过程等,可以使用oracle exp/expdp导出来的二进制文件,后面在通过oracle的imp/impdp可以导入数据库。一般用于数据迁移

4. 备份中涉及的文件

  • 数据文件
  • 控制文件
  • 重做日志文件
  • 参数文件
  • 归档日志文件

5. 备份恢复的工具

1、imp/impdp、exp/expdp:进行逻辑备份恢复,可以跨平台迁移,支持全库、用户、表级的备份与恢复
2、rman:物理备份恢复,支持命令行及图形接口可以通过第三方软件(nbu/legato/tsm)及磁盘带机进行备份。支持备份整个数据库、表空间、数据文件等,可以通过rman脚本来实现快捷的备份操作。支持增量备份,跳过部分块设备,可以调整备份速度
3、第三方工具:可以使用操作系统命令,其他工具来实现一些特殊情况下的备份恢复
4、dataguard、goldengate:可以实现数据库的容灾备份恢复

二、备份还原实例

测试数据准备

SQL> create tablespace cat datafile '/u01/app/oracle/oradata/orcl/cat01.dbf' size 10M autoextend off;		#创建一个表空间,关闭自动扩展
SQL> create user c##cat identified by cat default tablespace cat;	#创建一个用户
SQL> grant dba to c##cat;	#授权
SQL> conn c##cat/cat;
SQL> create table test(id number(3),name varchar2(10));
SQL> insert into test values(1,'test1');
SQL> insert into test values(2,'test2');
SQL> insert into test values(3,'test3');
SQL> commit;
SQL> select * from test;
	ID 		NAME
---------- ----------
	 1 	  	 test1
	 2  	 test2
	 3		 test3

1. exp-imp

1.1 使用exp备份整个数据库

SQL> select * from props$;	#查看数据库字符集
[oracle@localhost ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8	#查看字符集并设定
[oracle@localhost ~]$ exp system/oracle buffer=65536 feedback=100000  full=y file=exp.dmp log=imp.log

1.2 使用imp恢复

删除用户

SQL> drop user c##cat cascade;	#删除用户
SQL> drop tablespace c##cat including contents and datafiles;	#删除表空间

先创建表空间,在创建用户授权

SQL> create tablespace cat datafile '/u01/app/oracle/oradata/orcl/cat01.dbf' size 10M autoextend off;		#创建一个表空间,关闭自动扩展
SQL> create user c##cat identified by cat default tablespace cat;	#创建一个用户
SQL> grant dba to c##cat;	#授权

恢复数据

[oracle@localhost ~]$ imp system/oracle fromuser=c##cat touser=c##cat commit=y buffer=65536 feedback=100000 ignore=y file=exp.dmp log=imp2.log;
SQL> select * from cat.test;

编译无效对象

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

2. expdp/impdp

2.1使用expdp备份数据库

[oracle@localhost ~]$ mkdir /u01/app/oracle/dump
SQL> create directory dump_dir as '/u01/app/oracle/dump';
SQL> grant read,write on directory dump_dir to system;
[oracle@localhost ~]$ expdp system/oracle directory=dump_dir dumpfile=full_expdp.dmp full=y logfile=expdp.lpg parallel=2

2.2 使用impdp恢复数据库

删除用户及表空间

SQL> drop user c##cat cascade;	#删除用户
SQL> drop tablespace c##cat including contents and datafiles;	#删除表空间

创建数据库(dbca),在创建表空间,无需创建用户

SQL> create tablespace cat datafile '/u01/app/oracle/oradata/orcl/cat01.dbf' size 10M autoextend off;		#创建一个表空间,关闭自动扩展

配置目录

SQL> create directory dump_dir as '/u01/app/oracle/dump';
SQL> grant read,write on directory dump_dir to system;

恢复

[oracle@localhost ~]$ impdp system/oracle directory=dump_dir dumpfile=full_expdp.dmp full=y logfile=imp2.log

编译无效对象

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

3. tar/cp

一般停机检测时,使用这种备份方式

3.1 使用tar备份

停止监听,关闭数据库

[oracle@localhost ~]$ lsnrctl stop
SQL> shutdown immediate;

备份

[root@localhost ~]$ mkdir /u01/app/backup
[root@localhost ~]$ cd /u01/app/ backup
[root@localhost ~]$ tar cvf oraclebak190510.tar /u01/app/oracle

3.2 恢复

[root@localhost ~]$ rm -rf /u01/app/oracle/*
[root@localhost ~]$ cd /
[root@localhost ~]$ tar xvf /u01/app/backup/
[root@localhost ~]$ su - oracle
[oracle@localhost ~]$ lsnrctl start
SQL> startup;

4. rman

4.1 使用rman备份数据库

注意:使用rman备份一定要保证数据库处于归档模式

[root@localhost ~]$ mkdir /u01/app/backup	#新建一个备份目录
[oracle@localhost ~]$ rman target /		#登录rman
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;	#把自动备份打开
RMAN> run{
	  	allocate channel d1 type disk;		#分配命名一个d1的磁盘通道
		sql 'alter system archive log current';	#做一次数据归档
		backup format '/u01/app/backup/catpdbfull_%U' database include current controlfile
		plus archivelog;	#备份的数据库包含控制文件,包含当前归档日志
		release channel d1;		#释放磁盘通道
		 }

4.2 rman恢复

[root@localhost ~]$ rm -rf /u01/app/oracle/oradata/orcl/*
SQL> shutdown abort;
startup pfile='/u01/app/backup/catpdbfull_03u6tot2_1_1 ';	#写一个pfile文件去启动这里的路径写之前备份时参数文件(03)下piece handle后的路径
[oracle@localhost ~]$ rman target /
RMAN> restore controlfile from '/u01/app/backup/catpdbfull_05u6tovb_1_1';	#恢复控制文件之前备份时控制文件下piece handle后的路径
RMAN> alter database mount;
RMAN> restore database;
RMAN> recover database;
SQL> alter database open resetlogs;
SQL> select * from cat.test;

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

只有把抱怨环境的情绪,化为上进的力量,才是成功的保证!