Oracle数据库体系结构与备份恢复

  • ORACLE

Oracle数据库体系结构与备份恢复

2年 ago mqzi

实验9  Oracle数据库体系结构与备份恢复

姓名:

郭佳堃  

学号:

1507112106

专业:

商务智能  

班级:

商务智能

同组人:

 

实验日期:

2017/07/07
         

【实验目的与要求】

  • 了解Oracle体系结构

  • 熟悉数据库各类文件的基本操作

  • 常见数据备份与恢复的方法

  • 学会Oracle备份方案的制定

    【实验内容与步骤】

  1. 预备与说明

本实验中,需用到Oracle数据库自身的参数、体系结构等主面的信息,这些信息可以查看帮助手册或从数据字典相关表或视图中获取。

数据字典是oracle数据库用来存贮数据库结构信息的地方,用来描述数据库数据的组织方式的,由表和视图组成。

Oracle中有一个关于数据字典的元数据表,其名称为DICTIONARY(也可写为DICT),该表中存在所有数据字典名称和相关说明。

若在具体使用中,不知某一数据字典的具体名称,可通过该表查询得到。

例如:查找控制文件相关数据字典

注意:

(1) 本实验中的很多命令路径参数需根据自己的实现环境作出修改!!

(2) 操作不慎,本实验可能破坏数据库本身,请在进行有关删除的操作前,作好文件(数据)的备份。

(3)本实验中与文件相关路径(类似C:oracleproduct10.1.0db_1TestDB),请根据实验环境作出修改。

  1. Oracle物理备份与恢复

在完成物理备份之前,需作一些准备工作,以判断是否能正常进行物理备份。

  1. 准备工作

  1. 查看数据库是否运行于归档模式下:

请给出查询的结果:

  1. 干净的关闭数据库,做一个完全的冷备份。

提示:a. 使用shutdown命令关闭数据库;

b. 复制数据文件、日志文件和控制文件到安全地方

  1. 把数据库改为归档模式

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

设置成自动归档

SQL> alter system set log_archive_start = true scope=spfile;

  1. 实验1:数据文件和回退段遭破坏的情况下的恢复

本实验模拟数据库系统数据文件和回退段遭破坏的情况下的恢复。

(1) 创建测试用表和添加测试数据

先启动数据库,用scott用户建立test表,并插入两条数据。

–创建测试用表

SQL> create table scott.test (id int,name varchar2(10));

–添加数据

SQL> insert into scott.test values(1001,’张飞’);

SQL> insert into scott.test values(1002,’秦松’);

–提交数据

SQL> commit;

–添加数据

SQL> insert into scott.test values(1002,’大佑’);

(2)模拟数据库遭意外被迫关闭。

SQL> shutdown abort

(3) 删除数据文件,模拟系统数据文件丢失

把oracle服务停掉,移除SYSTEM01.dbf和UNDOTBS01.DBF文件(即将这两个文件移到其他文件夹下),模似数据文件丢失。

(4)启动服务,启动数据库

a. 启动服务

b. 启动数据库,肯定出错

SQL> startup

请给执行结果:

(5)把备份的SYSTEM01.dbf和UNDOTBS01.DBF文件复制回去

a. 执行以下命令:

请给执行结果:

然后就可以打开数据库,查看scott用户的test表中数据。

SQL> alter database open;

SQL> select * from scott.test;

   请给执行结果:

2.实验2:损坏用户的数据文件情况下的恢复

数据库是打开的,这时损坏的文件是用户的数据文件而不是system和undo文件。

(1)用scott用户在users表空间建立testTab表

SQL> create table scott. testTab (No char(6),Ename varchar2(10));

2  tablespace users;

表已创建。

(2) 插入两条数据

SQL> insert into scott. testTab values(‘s1003′,’新天地’);;

已创建 1 行。

SQL> insert into scott. testTab values(‘s1003′,’郑成功’);;

已创建 1 行。

SQL> commit;

提交完成。

(3)将当前日志归档

SQL> alter system archive log current;

系统已更改。

(4)现在破坏users表空间,使其离线,然后移除users01.dbf到一个指定文件夹(备份)

SQL> alter tablespace users offline;

表空间已更改。

移除users01.dbf到一个指定文件夹(备份)

执行:SQL> alter tablespace users online;

 请给执行结果:

此时出现错误,users表空间不能在线了。这时把备份的users01.DBF还原回去。

然后,执行:SQL> recover tablespace users;

(5)完成介质恢复。

SQL> alter tablespace users online;

表空间已更改。

SQL> select * from scott. testTab;

      请给执行结果:

3. 实验3:数据文件没有备份(不能使system和undo文件)的恢复。

(1)创建测试用表空间testspace

在SQL Plus中依次执行以下语句,给出最后的执行结果:

SQL> create tablespace testspace datafile ‘C:oracleproduct10.1.0db_1TestDBtestspace.dbf’ size 10m;

SQL> create table scott.test3(id int,name varchar2(10))

tablespace testspace;

SQL> commit;

SQL> alter system switch logfile;

SQL> insert into scott.test3 values(1003,’宋江’);

SQL> commit;

SQL> alter tablespace testspace offline;

完成操作后,移除数据文件testspace.dbf’,模拟数据文件丢失且没有备份。

SQL> select * from scott.test3;

 请给执行结果:

(2)由于没有备份数据文件,需重新创建一个

SQL>

‘ alter database create datafile

C:oracleproduct10.1.0db_1TestDBtestspace.dbf’;testspace.dbf’;

SQL> recover tablespace testspace;

(3) 完成恢复

SQL> alter tablespace testspace online;

表空间已更改。

SQL> select * from scott.test3;

请给执行结果:

  1. RMAN使用基础

    1. RMAN简介

RMAN可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。

注意:RMAN不能用于备份初始化参数文件和口令文件。

RMAN启动数据库上的Oracle服务器进程来进行备份或还原。备份、还原、恢复是由这些进程驱动的。

  1. 测试目的与环境说明

验证RMAN备份与恢复全过程。记录整个过程的操作细节。

OS:Windows XP

ORACLE VERSION: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Prod

ORACLE运行模式:归档模式

ORACLE数据存储:文件系统,存储于C:oracleproduct10.1.0db_1TestDB(此路径应根据实验环境确定),包含文件如下:

  1. 准备工作

  1. 创建测试用表

在Scott用户模式下创建测试用表emp_t,并导入测试数据:

插入一行新测试数据:

SQL> commit;

  1. 查看数据库是否运行于归档模式下:

请给出查询的结果:

 

  1. 如果系统不是运行于归档模式下,则按以下步骤修改运行模式,使其运行于归档模式:

  1. 执行以下命令,确认系统运行于归档模式下:

请给出执行结果:

    

  1. 数据备份过程

1. RMAN 数据库全备份

  1. 启动RMAN

在CMD命令行提示符下,执行如下命令:

  1. 在C:下创建备份文件存放目录OracleBak

  1. 执行全备份操作

在RMAN提示符下执行如下语句:

run

{

    allocate channel c1 type disk;

    backup database format ‘C:OracleBakdb_full_%U’ include current controlfile;

    sql ‘alter system archive log current’;

    #crosscheck archivelog all;

    backup format ‘C:OracleBakarch_full_%U’ archivelog all delete input;

    release channel c1;

}

请给出执行结果:

    

  1. 查看执行结果

完成以下命令集后,打开C:OracleBak文件夹,查看其中备份文件情况。

请给结果:

 

【注意】在本实验中:

RMAN采用无恢复目录模式

备份数据库过程包含当前控制文件备份

数据库处于归档模式,备份过程包含所有归档日志的备份

数据库必须处于mount或者open状态,才能进行数据库备份

  1. 检查备份结果

备份完成后,在RMAN提示符下分别执行以下命令,检查备份结果

  1. List backup

请给出执行结果:

    

  1. List backup of archivelog all;

请给出执行结果:

    

2. 模拟系统故障

  1. 在RMAN全备份后继续数据库的操作,即在测试表中插入数据。

SQL> conn scott/tiger

SQL> insert into emp_t(empno,ename,sal)

2 values(2003,’张洋‘,3031);

  1. 正常关闭数据库(shutdwonn immediate)。并删除原数据库所有文件,包括:控制文件、数据文件、日志文件,以模拟更换磁盘阵列或者文件丢失的情况。

SQL> conn sys/testdb as sysdba

SQL> shutdown immediate

SQL> host move C:oracleproduct10.1.0db_1TestDB
C:oracleproduct10.1.0db_1TestDB.bak

  1. 查看数据库数据文件等的存在情况

打开数据库目录”C:oracleproduct10.1.0db_1“,查看是否还存在TestDB文件夹。

请给结果:不存在

 

【注意】删除文件过程,将以更目录名称的方式,用以模拟新盘阵列上的文件存储路径与原系统不同。

  1. 数据库启动测试

此时,重新启动数据库过程必然失败。

请给出执行结果:

 

【注意】

此时由于实例存在,但是database全部丢失,则INSTANCE启动成功,但是database启动失败。即可,NOMOUNT状态(只启动INSTANCE)成功;进入MOUNT状态时,由于控制文件丢失,MOUNT 失败。数据库启动过程不能继续。

  1. 数据库恢复过程

当前情况下,所有的控制文件、数据库文件、联机日志文件均全部丢失。按照数据库恢复/启动过程,应按照先恢复数据库控制文件,再恢复数据文件的步骤进行。

1. 从RMAN备份中恢复控制文件

在本实验中,RMAN备份脚本进行了控制文件的备份。所以,控制文件的恢复过程可以利用RMAN的备份完成。

由于RMAN未设置控制文件自动备份,则可以利用程序包,从备份集中恢复。过程如下:

  1. 将数据库启动到nomount状态

  1. 执行如下命令:

declare

    devtype varchar2(256);

    done boolean;

begin

    devtype := dbms_backup_restore.deviceallocate(NULL);

    dbms_backup_restore.restoresetdatafile;

    dbms_backup_restore.restorecontrolfileto(‘C:oracleproduct10.1.0db_1TestDBCONTROL01.CTL’);

    dbms_backup_restore.restorebackuppiece(‘C:OracleBakDB_FULL_03MERUOO_1_1‘,done => done);

end;

/

请给出执行结果:

 

【注意】

(1) 若出错,报告无法创建指定的控制文件,可能是由于文件目录并不存在,请先创建之(即创建数据库数据文件夹C:oracleproduct10.1.0db_1TestDB);(此时是测试时,留下此问题,还记得前面采用修改目录名的方式启动删除所有文件的步骤吗?)

(2)备份文件”DB_FULL_03MERUOO_1_1“名字应根据具体实际作出修改;

  1. 查看控制文件恢复状态

完成前述命令的执行后,到文件夹”C:oracleproduct10.1.0db_1TestDB“,看是否存在一控制文件。

请给出执行结果:

    

  1. 此时启动数据库试验一下

SQL> startup nomount

SQL> alter database mount;

请给出执行结果:

    

【注意】

系统启动不了,缺少控制文件。

  1. 复制controlfile

检查一下spfile的设置。

SQL> show parameter control_files

C:oracleproduct10.1.0db_1TestDB下的控制文件Control01.ctl作两个拷贝,并分别改名为Control02.ctl和Control03.ctl。

  1. 重新启动系统

SQL> startup nomount;

SQL> alter database mount;

请给出执行结果:

    

【注意】

此时,系统可完成加载,但不能Open.

遗留一个问题。此时是由RMAN备份的控制文件中恢复。那么如果RMAN没有备份控制文件,同时RMAN没有设置自动备份控制文件,那么该如何恢复呢?当然,如果完全没有控制文件的备份,那么就彻底歇菜了!

对于控制文件的手工备份,可以采用

Alter database backup controlfile to trace;(此恢复有点难度)

Alter database backup control to ‘c:control.bak‘;(此恢复简单)

2.恢复数据库数据文件

在控制文件恢复后,可以开始数据库文件的恢复。
 

  1. 检查备份情况

C:> rman nocatelog target /

RMAN> list backupset summary;

请给出执行结果:

    

RMAN> crosscheck backup;

请给出执行结果:

    

  1. 执行恢复操作

RMAN> startup nomount;

RMAN> alter database mount;

RMAN> restore database;

请给出执行结果:

    

  1. 检查物理存储恢复结果

至此数据库恢复存储完成,但是注意并非数据库恢复完成。

打开数据库数据文件夹C:oracleproduct10.1.0db_1TestDB,查看数据文件等是否得以恢复,若没有,请检查前面操作,看是否有误。

请给出结果:

 

  1. 检查恢复结果:数据库使用测试

SQL> alter database open;

请给出执行结果:

 

【注意】

如果此时强行打开数据库则报告需要介质恢复,属正常现象。

  1. 继续进行RMAN数据库恢复操作

RMAN> recover database;

请给出执行结果:

 

  1. 数据的不完全恢复

此时日志组不存在,那么只能进行不完全恢复了,执行以下命令

SQL> recover database until cancel;

请给出执行结果:

SQL> alter database open resetlogs;

请给出执行结果:

  1. 数据恢复结果测试

检查C:oracleproduct10.1.0db_1TestDB目录,看是否所有文件均得到恢复。

SQL> conn scott/tiger

SQL> select * from emp_t;

请给出执行结果:

【注意】

自此数据库成功打开。但是,在数据库恢复过程中,由于日志文件全部丢失。那么自上一次数据库全备份后的所有数据必然全部丢失。由此看到如果需要数据库完全恢复,日志文件是多么的重要。

 

Continue Reading

Previous 用户管理、权限与数据安全

Next 编程实现Oracle数据库操作

你可能感兴趣的:(Oracle数据库体系结构与备份恢复)