大型数据库技术Oracle10.docx
- 文档编号:6168171
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:22
- 大小:867.12KB
大型数据库技术Oracle10.docx
《大型数据库技术Oracle10.docx》由会员分享,可在线阅读,更多相关《大型数据库技术Oracle10.docx(22页珍藏版)》请在冰豆网上搜索。
大型数据库技术Oracle10
实验10 Oracle数据库备份与恢复
姓名:
计算机科学与技术
学号:
专业:
班级:
同组人:
无
实验日期:
【实验目的与要求】
⏹常见数据备份与恢复的方法
⏹学会Oracle备份方案的制定
【实验内容与步骤】
10.1.Oracle物理备份与恢复
.0.准备工作:
(1)查看数据库是否运行于归档模式下:
请给出查询的结果:
(2)干净的关闭数据库,做一个完全的冷备份。
提示:
a.使用shutdown命令关闭数据库;
b.复制数据文件、日志文件和控制文件到安全地方
(3)把数据库改为归档模式
SQL>startupmount
SQL>alterdatabasearchivelog;
SQL>alterdatabaseopen;
设置成自动归档
SQL>altersystemsetlog_archive_start=truescope=spfile;
注意:
本实验中的很多命令路径参数需根据自己的实现环境作出修改!
!
1.实验1:
数据库系统数据文件和回退段遭破坏的情况下的恢复。
此时数据库的状态是关闭的。
(1)先启动数据库,用scott用户建立test表,并插入两条数据。
SQL>createtablescott.test (idint,namevarchar2(10));
表已创建。
SQL>insertintoscott.testvalues(1001,’zhangfei’);
已创建1行。
SQL>insertintoscott.testvalues(1002,’guanyu’);
已创建1行。
SQL>commit;
提交完成。
(2)模拟数据库遭意外被迫关闭,并且系统数据文件丢失。
SQL>shutdownabort
把oracle服务停掉,移除SYSTEM01.dbf和UNDOTBS01.DBF文件(即将这两个文件移到其他文件夹下)。
(3)启动服务,启动数据库
a.启动服务
b.启动数据库,肯定出错
SQL>startup
请给执行结果:
(4)把备份的SYSTEM01.dbf和UNDOTBS01.DBF文件复制回去
a.执行以下命令:
请给执行结果:
然后就可以打开数据库,查看scott用户的test表。
SQL>alterdatabaseopen;
SQL>select*fromscott.test;
请给执行结果:
2.实验2:
数据库是打开的,这时损坏的文件是用户的数据文件而不是system和undo文件。
(1)用scott用户在users表空间建立test1表
SQL>createtablescott.test1(idint)
2 tablespaceusers;
表已创建。
(2)插入两条数据
SQL>insertintoscott.test1values
(1);
已创建1行。
SQL>insertintoscott.test1values
(2);
已创建1行。
SQL>commit;
提交完成。
(3)当前日志归档
SQL>altersystemarchivelogcurrent;
系统已更改。
(4)现在破坏users表空间,使其离线,然后移除users01.dbf到一个指定文件夹(备份)
SQL>altertablespaceusersoffline;
表空间已更改。
移除users01.dbf到一个指定文件夹(备份)
执行:
SQL>altertablespaceusersonline;
请给执行结果:
此时出现错误,users表空间不能在线了。
这时把备份的users01.DBF还原回去。
然后,执行:
SQL>recovertablespaceusers;
(5)完成介质恢复。
SQL>altertablespaceusersonline;
表空间已更改。
SQL>select*fromscott.test1;
请给执行结果:
3.实验3:
数据文件没有备份(不能使system和undo文件)的恢复。
(1)创建表空间testspace
在SQLPlus中依次执行以下语句,给出最后的执行结果:
SQL>createtablespacetestspacedatafile'C:
\oracle\product\10.1.0\db_1\TestDB\testspace.dbf'size10m;
SQL>createtablescott.test3(idint,namevarchar2(10))
tablespacetestspace;
SQL>commit;
SQL>altersystemswitchlogfile;
SQL>insertintoscott.test3values(1003,’songjian’);
SQL>commit;
SQL>altertablespacetestspaceoffline;
SQL>select*fromscott.test3;
请给执行结果:
(2)由于没有备份数据文件,需重新创建一个
SQL>alterdatabasecreatedatafile
'C:
\oracle\product\10.1.0\db_1\TestDB\testspace.dbf';
SQL>recovertablespacetestspace;
(3)完成恢复
SQL>altertablespacetestspaceonline;
表空间已更改。
SQL>select*fromscott.test3;
请给执行结果:
4.实验4:
完成以下练习
本练习将对数据库进行物理备份,并执行基于更改的不完全恢复,以恢复被用户误删除的数据。
按以下步骤完成实验过程,并给出实验结果:
1)以SYSDBA身份连接数据库。
2)确定数据库运行在归档模式下。
3)切换表空间USER为脱机状态。
4)复制Oracle目录中的USERS01.DBF文件,然后设置表空间USERS为ONLINE状态。
5)删除STUDENT表中存储的学生信息,并归档当前的日志信息。
6)关闭数据库,切换数据库到MOUNT状态。
7)复制备份的文件到数据库目录,并使用RECOVER命令执行基于更改的不完全恢复。
8)打开数据库,并验证是否恢复被误删除的数据。
10.2.逻辑备份:
导入导出实验
实验5:
模式的导入导出
案例:
将scott/tiger用户对应的模式导出,通过导出文件将其导入到Test用户(为一个空用户)对应的模式中,包括该模式中的所有对象的定义和数据。
1.准备工作
(1)创建用户:
Createusertest
Identifiedbytest;
(2)授权:
注:
这儿做了简化处理,实际工作中,尽量不要授DBA权限给一般用户。
2.数据的导出与导入
(1)数据准备
以scott身份登录:
connscott/tiger
创建测试用表:
createtablejobs(
namevarchar2(20),
jobvarchar2(40),
salesnumber);
加入数据:
insertintojobsvalues('IT_Test','softwaretesting',3000);
提交:
commit;
创建测试用表scott_test
createtablescott_test(
namevarchar2(10),
agenumber);
加入数据:
insertintoscott_testvalues('manager','40');
(2)以管理员身份登录:
connassysdba;
altersystemenablerestrictedsession;
(3)导出数据库:
在DOS提示符下执行:
expsystem/testdbfull=yfile=test.dmp
执行时,会要求输入system的口令,请根据实际情况输入。
(4)恢复数据库运行状态
connassysdba;
altersystemdisablerestrictedsession;
(5)进行数据库的导入:
以下是一示例:
impsystem/testdbfromuser=scotttouser=testtables=(scott_test,jobs)file=test.dmpignore=y;
请给执行结果:
3.结果检验
对导入的数据进行查询,以确定导入是否成功,给出结果截图:
(1)以test身份登录到数据库
(2)查询刚才导出(导入)表中的某个表(如Jobs):
请给执行结果:
10.3.RMAN使用基础
10.3.1.RMAN简介
RMAN可以用来备份和还原数据库文件、归档日志和控制文件。
它也可以用来执行完全或不完全的数据库恢复。
注意:
RMAN不能用于备份初始化参数文件和口令文件。
RMAN启动数据库上的Oracle服务器进程来进行备份或还原。
备份、还原、恢复是由这些进程驱动的。
10.3.2.测试目的与环境说明
验证RMAN备份与恢复全过程。
记录整个过程的操作细节。
OS:
WindowsXP
ORACLEVERSION:
OracleDatabase10gEnterpriseEditionRelease10.1.0.2.0–Prod
ORACLE运行模式:
归档模式
ORACLE数据存储:
文件系统,存储于C:
\oracle\product\10.1.0\db_1\TestDB(此路径应根据实验环境确定),包含文件如下:
10.3.3.准备工作
(1)创建测试用表
在Scott用户模式下创建测试用表emp_t,并导入测试数据:
插入一行新测试数据:
(2)查看数据库是否运行于归档模式下:
请给出查询的结果:
(3)如果系统不是运行于归档模式下,则按以下步骤修改运行模式,使其运行于归档模式:
(4)执行以下命令,确认系统运行于归档模式下:
请给出执行结果:
10.3.4.数据备份过程
1.RMAN数据库全备份
(1)启动RMAN
在CMD命令行提示符下,执行如下命令:
(2)在C:
\下创建备份文件存放目录OracleBak
(3)执行全备份操作
在RMAN提示符下执行如下语句:
run
{
allocatechannelc1typedisk;
backupdatabaseformat'C:
\OracleBak\db_full_%U'includecurrentcontrolfile;
sql'altersystemarchivelogcurrent';
#crosscheckarchivelogall;
backupformat'C:
\OracleBak\arch_full_%U'archivelogalldeleteinput;
releasechannelc1;
}
请给出执行结果:
(4)查看执行结果
完成以下命令集后,打开C:
\OracleBak文件夹,查看其中备份文件情况。
请给结果:
【注意】在本实验中:
RMAN采用无恢复目录模式
备份数据库过程包含当前控制文件备份
数据库处于归档模式,备份过程包含所有归档日志的备份
数据库必须处于mount或者open状态,才能进行数据库备份
(5)检查备份结果
备份完成后,在RMAN提示符下分别执行以下命令,检查备份结果
a.Listbackup
请给出执行结果:
b.Listbackupofarchivelogall;
请给出执行结果:
2.模拟系统故障
(1)在RMAN全备份后继续数据库的操作,即在测试表中插入数据。
SQL>connscott/tiger
SQL>insertintoemp_t(empno,ename,sal)
2values(2003,'zhangfei',3031);
(2)正常关闭数据库。
并删除原数据库所有文件,包括:
控制文件、数据文件、日志文件,以模拟更换磁盘阵列或者文件丢失的情况。
SQL>connsys/testdbassysdba
SQL>shutdownimmediate
SQL>hostmoveC:
\oracle\product\10.1.0\db_1\TestDBC:
\oracle\product\10.1.0\db_1\TestDB.bak
(3)查看数据库数据文件等的存在情况
打开数据库目录“C:
\oracle\product\10.1.0\db_1”,查看是否还存在TestDB文件夹。
请给结果:
【注意】删除文件过程,将以更目录名称的方式,用以模拟新盘阵列上的文件存储路径与原系统不同。
(4)数据库启动测试
此时,重新启动数据库过程必然失败。
请给出执行结果:
【注意】
此时由于实例存在,但是database全部丢失,则INSTANCE启动成功,但是database启动失败。
即可,NOMOUNT状态(只启动INSTANCE)成功;进入MOUNT状态时,由于控制文件丢失,MOUNT失败。
数据库启动过程不能继续。
10.3.5.数据库恢复过程
当前情况下,所有的控制文件、数据库文件、联机日志文件均全部丢失。
按照数据库恢复/启动过程,应按照先恢复数据库控制文件,再恢复数据文件的步骤进行。
1.从RMAN备份中恢复控制文件
在本实验中,RMAN备份脚本进行了控制文件的备份。
所以,控制文件的恢复过程可以利用RMAN的备份完成。
由于RMAN未设置控制文件自动备份,则可以利用程序包,从备份集中恢复。
过程如下:
a.将数据库启动到nomount状态
b.执行如下命令:
declare
devtypevarchar2(256);
doneboolean;
begin
devtype:
=dbms_backup_restore.deviceallocate(NULL);
dbms_backup_restore.restoresetdatafile;
dbms_backup_restore.restorecontrolfileto('C:
\oracle\product\10.1.0\db_1\TestDB\CONTROL01.CTL');
dbms_backup_restore.restorebackuppiece('C:
\OracleBak\DB_FULL_03MERUOO_1_1',done=>done);
end;
/
请给出执行结果:
【注意】
(1)若出错,报告无法创建指定的控制文件,可能是由于文件目录并不存在,请先创建之(即创建数据库数据文件夹C:
\oracle\product\10.1.0\db_1\TestDB);(此时是测试时,留下此问题,还记得前面采用修改目录名的方式启动删除所有文件的步骤吗?
)
(2)备份文件“DB_FULL_03MERUOO_1_1”名字应根据具体实际作出修改;
c.查看控制文件恢复状态
完成前述命令的执行后,到文件夹“C:
\oracle\product\10.1.0\db_1\TestDB”,看是否存在一控制文件。
请给出执行结果:
d.此时启动数据库试验一下
SQL>startupnomount
SQL>alterdatabasemount;
请给出执行结果:
【注意】
系统启动不了,缺少控制文件。
e.复制controlfile
检查一下spfile的设置。
SQL>showparametercontrol_files
将C:
\oracle\product\10.1.0\db_1\TestDB下的控制文件Control01.ctl作两个拷贝,并分别改名为Control02.ctl和Control03.ctl。
f.重新启动系统
SQL>startupnomount;
SQL>alterdatabasemount;
请给出执行结果:
【注意】
此时,系统可完成加载,但不能Open.
遗留一个问题。
此时是由RMAN备份的控制文件中恢复。
那么如果RMAN没有备份控制文件,同时RMAN没有设置自动备份控制文件,那么该如何恢复呢?
当然,如果完全没有控制文件的备份,那么就彻底歇菜了!
对于控制文件的手工备份,可以采用
Alterdatabasebackupcontrolfiletotrace;(此恢复有点难度)
Alterdatabasebackupcontrolto‘c:
\control.bak’;(此恢复简单)
恢复数据库数据文件
在控制文件恢复后,可以开始数据库文件的恢复。
a.检查备份情况
C:
\>rmannocatelogtarget/
RMAN>listbackupsetsummary;
请给出执行结果:
RMAN>crosscheckbackup;
请给出执行结果:
b.执行恢复操作
RMAN>startupnomount;
RMAN>alterdatabasemount;
RMAN>restoredatabase;
请给出执行结果:
c.检查物理存储恢复结果
至此数据库恢复存储完成,但是注意并非数据库恢复完成。
打开数据库数据文件夹C:
\oracle\product\10.1.0\db_1\TestDB,查看数据文件等是否得以恢复,若没有,请检查前面操作,看是否有误。
请给出结果:
d.检查恢复结果:
数据库使用测试
SQL>alterdatabaseopen;
请给出执行结果:
【注意】
如果此时强行打开数据库则报告需要介质恢复,属正常现象。
e.继续进行RMAN数据库恢复操作
RMAN>recoverdatabase;
请给出执行结果:
f.数据的不完全恢复
此时日志组不存在,那么只能进行不完全恢复了,执行以下命令
SQL>recoverdatabaseuntilcancel;
请给出执行结果:
SQL>alterdatabaseopenresetlogs;
请给出执行结果:
g.数据恢复结果测试
检查C:
\oracle\product\10.1.0\db_1\TestDB目录,看是否所有文件均得到恢复。
SQL>connscott/tiger
SQL>select*fromemp_t;
请给出执行结果:
【注意】
自此数据库成功打开。
但是,由于在数据库恢复过程中,由于日志文件全部丢失。
那么自上一次数据库全备份后的所有数据必然全部丢失。
由此看到如果需要数据库完全恢复,日志文件是多么的重要。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 数据库技术 Oracle10