Oracle学习笔记十四:备份与恢复案例

时间:2020-10-17 01:51:00 来源:互联网 作者: 神秘的大神 字体:

获取命令帮助

exp -help
imp -help
expdp -help
impdp -help
rman target /
?

测试数据准备

CREATE TABLESPACE test01 datafile 'C:\APP\ADMINISTRATOR\ORADATA\TEST\test01.dbf' SIZE 10M autoextend off;
CREATE USER hello IDENTIFIED BY world DEFAULT TABLESPACE test01;
grant dba to hello;
conn hello/world;

create table emp01 (id number(3),name varchar2(10));
insert into emp01 values(1,'hello01');
insert into emp01 values(2,'hello02');
insert into emp01 values(3,'hello03');

案例一

1.1、案例说明:在Oracle生产环境中,如何使用exp备份的整个数据库?

1)查看数据库字符集:

select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
--或者
select userenv('language') from dual;

本机数据库的字符集是:ZHS16GBK,若数据库与环境字符集不一样的话,请先设置字符集,如:

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

2)使用exp备份的整个数据库:

exp system/oracle buffer=65536 feedback=10000 full=y file=exp.dmp log=exp.log

案例二

2.1、案例说明:在Oracle生产环境中,如果某员工删库跑路,把hello整个用户全误删,请使用imp进行恢复。

1)模拟删除hello整个用户:

drop user hello cascade;
DROP TABLESPACE test01 INCLUDING CONTENTS AND DATAFILES;

 

2)先创建表空间,再创建用户授权:

CREATE TABLESPACE test01 datafile 'C:\APP\ADMINISTRATOR\ORADATA\TEST\test01.dbf' SIZE 10M autoextend off;
CREATE USER hello IDENTIFIED BY world DEFAULT TABLESPACE test01;
grant dba to hello;

3)恢复hello整个用户:

imp system/oracle fromuser=hello touser=hello commit=y buffer=65536 feedback=10000 ignore=y file=exp.dmp log=imp.log

案例三

3.1、案例说明:在Oracle生产环境中,如何使用expdp备份的整个数据库?

1)先建一个备份的文件夹:

cd c:\users\administrator
mkdir dump

2)创建一个Oralce内部用来识别OS文件系统路径目录并授权:

create directory dump_dir as 'C:\Users\Administrator\dump';
grant read,write on directory dump_dir to system;

3)使用expdp备份的整个数据库:

expdp system/oracle directory=dump_dir dumpfile=full_expdp.dmp full=y logfile=expdp.log parallel=2

案例四

4.1、案例说明:在Oracle生产环境中,如果某员工删库跑路,把整个数据库误删,请使用impdp进行恢复。

1)这里就不删数据库了,只模拟删除hello整个用户来搞破坏:

drop user hello cascade;
DROP TABLESPACE test01 INCLUDING CONTENTS AND DATAFILES;

2)创建数据库(此处略去),再创建表空间:

CREATE TABLESPACE test01 datafile 'C:\APP\ADMINISTRATOR\ORADATA\TEST\test01.dbf' SIZE 10M autoextend off;

3)配置directory(案例三2)已授权,此步可以省略):

create directory dump_dir as 'C:\Users\Administrator\dump';
grant read,write on directory dump_dir to system;

4)使用impdp进行恢复:

impdp system/oracle directory=dump_dir dumpfile=full_expdp.dmp full=y logfile=impdb.log

5)编译无效对象:

@?:@是sqlplus调用脚本的标识,?是指Oracle的安装路径(ORACLE_HOME)。

@?/rdbms/admin/utlrp.sql

6)结果验证:

案例五

5.1、案例说明:在Oracle中,机房需停电维修UPS,请备份整个Oracle环境。

1)停止监听:

lsnrctl stop

2)关闭数据库:

shutdown immediate;

3)创建备份目录:

cd c:\users\administrator
mkdir backup

4)使用WinRar备份整个Oracle环境:

cd C:\Program Files\WinRAR
Rar a C:\Users\Administrator\backup\oraclebak20201016.rar C:\app

案例六

6.1、案例说明:在Oracle中,机房完成UPS维护后,启动系统,发现Oracle启动失败,数据文件损坏,为了快速恢复业务,你应该怎么处理?

1)删除数据库安装目录(仅为测试,请慎重):

rd /s /q c:\app

2)目录恢复:

cd C:\Program Files\WinRAR
Rar x -o+ C:\Users\Administrator\backup\oraclebak20201016.rar C:\

案例七

7.1、案例说明:在Oracle生产环境中,如何使用rman备份整个数据库?

1)创建备份目录:

cd c:\users\administrator
mkdir backup1

2)进入rman:

rman target /

3)使用rman备份整个数据库:

CONFIGURE CONTROLFILE AUTOBACKUP ON;
run{
allocate channel d1 type disk;
sql 'alter system archive log current';
backup format 'C:\Users\Administrator\backup1\testfull_%U' database include current controlfile plus archivelog;
release channel d1;
}

案例八

8.1、案例说明:在Oracle生产环境中,如果某员工删库跑路,把Oracle数据目录误删,请使用RMAN进行恢复。

1)模拟把数据文件删除:

关闭数据库:

shutdown immediate;

删除数据文件:

DEL /S /Q C:\app\Administrator\oradata\test\*.*

2)把数据库启动到nomount状态:

startup nomount;

3)进入rman:

rman target /

4)恢复控制文件:

 restore controlfile from 'C:\Users\Administrator\backup1\TESTFULL_04VCQ4PG_1_1';

5)将数据库启动到mount状态:

alter database mount;

6)恢复数据库:

restore database;
recover database;
alter database open resetlogs;

7)结果验证: