实训 17 配置数据库的备份与恢复
一、实验项目
配置数据库的备份与恢复
二、实验要求
1.掌握如何查看检查点在后台运行的状态
2.掌握如何手动执行检查点
3.掌握如何使用命令方式创建日志文件成员
4.掌握如何使日志文件生效
5.了解使用 EM 创建日志文件成员的方法
三、实验过程(说明+截图):
任务 1 检查点和日志文件
1、实训前准备
a.登录 sqlplus 打开命令行窗口,输入 sqlplus "/as sysdba"回车执行。
b.查看参数 系统默认检查点的参数是禁用的,在命令行输入命令:show parameters mttr,回车,会看到参数 Fast_start_mttr_target 的值是“0”,代表检查点是禁用状态。不需要修改。
2、查看后台检查点状态 查看后台检查点状态的操作过程
a.创建表 t3 登录 PL/SQL,打开命令执行窗口,输入:create table t3 as select * from dba_ objects where 1=2;,回车执行,创建一个空表。
b.查询表 t3 在命令执行窗口中输入:select * from t3;,回车执行,会看到里面没有数据,说明创建表成功。
c.给表 t3 插入数据 在命令执行窗口中输入:insert into t3 select * from dba_objects;,回车执行。 会看到有几万条数据被插入到表 t3 中。如下图所示。
d. 实例恢复在SQL语句执行窗口中输入:
select s.RECOVERY_ESTIMATED_IOS,s.ACTUAL_REDO_BLKS,s.ESTIMATED_MTTR from v$instance_recovery s,执行,结果如下图所示。ESTIMATED_MTTR代表秒,恢复的时间;在实例恢复期间,需要在文件上进行读写操作,RECOVERY_ESTIMATED_IOS 和 ACTUAL_REDO _BLKS的值代表有多少个块。
e.再执行插入语句
在命令执行窗口中输入:insert into t3 select * from dba_objects;,回车执行。
f.再次观察实例恢复
再执行一次 SQL 语句:
select s.RECOVERY_ESTIMATED_IOS,s.ACTUAL_REDO_BLKS,s.ESTIMATED_MTTR from
v$instance_recovery s,回车执行,结果如下图所示。块的值发生了变化。
g.提交事务
在命令窗口中输入:commit;,回车执行。 h.再次观察实例恢复 再执行一次 SQL 语句: select s.RECOVERY_ESTIMATED_IOS,s.ACTUAL_REDO_BLKS,s.ESTIMATED_MTTR from v$instance_recovery s,回车执行。
3、检查点的执行 如何手动执行检查点呢?跟随以下步骤进行学些吧。
a.打开 SQL 语句执行窗口
在 sqlplus 环境下输入:alter system checkpoint;,回车执行。结果提示系统已更改。说明执行检查点成功。这时候后台的 DBW 进程就会把需要变化的数据块直接写入磁盘
b.再次观察实例恢复再执行一次 SQL 语句:
select s.RECOVERY_ESTIMATED_IOS,s.ACTUAL_REDO_BLKS,s.ESTIMATED_MTTR from v$instance_recovery s,执行。会看到结果如下图所示。如果表中数据未清空,可能系统 后台还有事务在执行,需要快速执行步骤 a 和步骤 b。
c.删除表 t3 在命令窗口输入:drop table t3;,删除表 t3。
5、使用命令创建日志文件成员
a.创建日志文件文件成员 在命令窗口输入:
alter database add logfile member'C:app\oradate\ORCL\REDC01_2.LOG' to gro up 1;,给第一个日志组添加日志文件成员。没有指定日志文件的大小,默认是与原来系统 的一样的。
b.查看 v$logfile 在 SQL 语句执行窗口输入:select * from v$logfile;,执行,可以看到刚才创建的REDC01_2.LOG,状态是 INVALID,说明它还没有用呢。如下图所示。
c.创建日志文件文件成员 在命令窗口输入:
alter database add logfile member'C:app\oradate\ORCL\REDC02_2.LOG' to gro up 2;,给第二个日志组添加日志文件成员。
d.查看 到目录 C:app\oradate\ORCL 下查看上一步骤创建的日志文件 REDC02_2.LOG,可以看 到该文件,说明创建成功。
e.创建日志文件文件成员 在命令窗口输入:
alter database add logfile member'C:app\oradate\ORCL\REDC03_2.LOG' to gro up 3;,给第二个日志组添加日志文件成员。
f.查看
通过以上步骤,查看 v$log 视图,我们会看到每个组都有两个成员,并且第三组的归 档日志为 NO 的状态,查看 v$logfile 视图,新创建的文件状态都是没被用的。
g.使日志文件生效 打开命令行窗口,用 system 登录 sqlplus,输入 alter system switch logfile;, 回车,这时候查看 v$log 视图中第三组的归档日志为 YES 的状态,第一组的归档日志为 NO 状态,如下图所示。也就是说系统已经把第三组日志归档,然后循环跳转到第一组。如果 再进行一次日志生效,则会切换到第二个。
h.使日志文件生效 打开命令行窗口,再次输入 alter system switch logfile;,回车执行。查看 v$log file 视图,会发现第二组添加的日志文件已经生效了。查看 v$log 视图,会发现第一组日 志已经归档,跳转到第二组了。
i.使日志文件生效 打开命令行窗口,再次输入 alter system switch logfile;,回车执行。查看 v$log file 视图,会发现第三组添加的日志文件已经生效了。查看 v$log 视图,会发现第二组日 志已经归档,跳转到第三组了。
任务 2 管理归档日志
1、实训前准备
a.登录 sqlplus 打开命令行窗口,输入 sqlplus "/as sysdba",回车执行。
b.查看参数
在命令行输入命令:archive log list;,回车执行,会看到当前数据库的模式是归 档模式,并且已经启动自动存档模式。以及一些其他信息,如下图所示。
c.查看视图 v$log 用 system 用户登录 PL/SQL,在 SQL 语句执行窗口输入:select * from v$log;,执 行。在表的 SEQUENCE 列里也可以看到查看参数时得到的信息。如下图所示。
2、由归档模式转换为非归档模式
a.关闭数据库
在命令行输入命令:shutdown immediate,回车执行,在转换非归档模式之前需要先 关闭数据库。
b.将数据库转换到 mount 状态 在命令行输入命令:startup mount,回车执行,将数据库转换到 mount 状态。
c.由归档模式转换为非归档模式 在命令行输入命令:alter database noarchivelog;,回车执行,
结果如下图所示。
d.打开数据库 在命令行输入命令:alter database open;,回车执行,打开数据库。
e.查看数据库状态 在命令行输入命令:archive log list;,回车执行,会看到当前数据库的模式是非 归档模式,并且已经禁用自动存档模式。以及一些其他信息,如下图所示。
3、由非归档模式转换为归档模式
a.创建归档目录 根据步骤 2 我们可以看到归档日志的目录,我们在 C:\app\oradate 目录下创建一个 a rchlog1 和 archlog2 的文件夹。
b.查看目前的归档日志
在命令行输入命令:show parameters log_arch,回车执行,会看到很多,查看 log _archive_dest_1 和 log_archive_dest_2。
c.修改归档位置
在命令行输入命令:
alter system set log_archive_dest_1='LOCATION=C:\app\oradate\archive1' sc ope=both;,回车执行。 再输入: alter system set log_archive_dest_2='LOCATION=C:\app\oradate\archive2' sc ope=both;,回车执行,结果如下图所示。
d.查看目前的归档日志 在命令行输入命令:show parameters log_archive_dest_,回车执行,这时候我们 会看到 log_archive_dest_2 与 log_archive_dest_1 都有了,但是目录是不一样的。如下图所示。
e.查看格式 在命令行输入命令:show parameters log_archive_for,回车执行,会看到系统默 认的格式,可以继续使用,不需要修改。
f.关闭数据库 在命令行输入命令:shutdown immediate,回车执行,关闭数据库。 g.将数据库转换到 mount 状态 在命令行输入命令:startup mount,回车执行,将数据库转换到 mount 状态。
h.由非归档模式转换为归档模式 在命令行输入命令:alter database archivelog;,回车执行,结果如下图所示。
i.打开数据库 在命令行输入命令:alter database open;,回车执行,打开数据库。
j.查看数据库状态 在命令行输入命令:archive log list;,回车执行,会看到当前数据库的模式是归 档模式,并且已经为自动存档模式。存档的终点是 archlog2,实际上 archlog1 和 archlo g2 都是可用状态。如下图所示。
k.日志的切换 在命令行输入命令:alter system switch logfile;,这时候 archlog2 里已经有一 个 18 了,到本地目录查看,如下图所示。
这时候 archlog1 里也有一个 18,到本地目录查看,如下图所示。并且两个文件的大小一样。这样做就是得到两个副本。
l.查看管理视图 登录 PL/SQL,在 SQL 语句执行窗口中输入:select * from v$database;,执行,通 过查看管理视图,可以看到当前状态的一些基本信息。
m.查看实例 在 SQL 语句执行窗口中输入:select * from v$instance;,执行,通过查看实例, 可以看到主机名、实例名以及状态的一些信息。
n.查看日志
在 SQL 语句执行窗口中输入:select * from v$archived_log;,执行,我们已经在不同的目录创建了两个一样的日志,通过查看日志,可以看到检索出两个一样的文件。也就是一个归档日志做了两个副本。
在实际的生产环境,如果选择了两个归档目录,也建议在物理盘上把他们区分开,不 要放在一个盘上,否则,做两个跟做一个是没有区别的,做两个的目的就是怕某一个坏了。
实训 18 备份 Oracle 数据库
一、实验项目
配置数据库的备份与恢复
二、实验要求
1.掌握如何启动 RMAN
2.熟练掌握如何备份数据库
3.掌握如何备份控制文件
4.理解如何跟踪查询生成的文件
三、实验过程(说明+截图):
任务 1 备份 Oracle 数据库
1、实训前准备
a.启动 RMAN 打开命令行执行窗口,输入命令:rman nocatalog target /,回车执行。这个是在 没有恢复目录的情况下,使用控制文件做恢复目录,然后在本机进行操作的标准的输入方 法,不需要操作用户的口令。结果如下图所示,说明进入 RMAN 了。
2、数据库备份
a.备份数据库 在 RMAN 状态下,输入 backup full database;,回车执行,结果如下图所示。说明 R MAN 备份全部数据库成功。通过段句柄可以看出备份的位置。
b.查看备份文件 进入目录:C:\app\flash_recovery_area\ORCL\BACKUPSET\2014_12_25,看到两个文 件,这两个文件就是备份的文件。
3、备份控制文件
a.打开命令行窗口,在命令行窗口进入 sqlplus。
b.备份控制文件 在 sqlplus 环境里,输入:alter database backup controlfile to trace;,回车 执行,结果如下图所示。实际上已经把控制文件里产生的脚本放到了后台的 dump 文件里。
c.查看 dump 文件位置(跟踪查询) 在 sqlplus 环境里,输入:show parameters user_dump_dest,回车执行,在 VALUE 里可以看见当前 dump 的位置。如下图所示,打开 alert_orcl 文件,在倒数第二行就可以 看到产生的文件地址及名称了,找到文件,打开,可以看见生成的创建控制文件的脚本。
d.再次备份控制文件 在 sqlplus 环境里,输入:alter database backup controlfile to trace;,回车 执行。
实训 19 恢复 Oracle 数据库
一、实验项目
配置数据库的备份与恢复
二、实验要求
1.掌握如何恢复受损的控制文件
2.掌握如何恢复受损的复用联机日志文件
3.掌握如何恢复受损的非重要的数据文件
三、实验过程(说明+截图):
任务 1 恢复受损的控制文件
根据【任务描述】我们了解到此实训的任务是:学习如何恢复受损的控制文件,接下 来大家通过以下实训步骤完成任务吧! 1、人为模拟控制文件的损坏并恢复 人为模拟控制文件的损坏并恢复的操作过程,可以观看实训视频或跟随实训步骤 1 完 成。
- 用 PL/SQL 查看控制文件 用 system 用户登录 PL/SQL,打开 SQL 语句执行窗口,输入:select * from v$cont rolfile;,执行,可看到控制文件的路径等基本信息。
b.用 sqlplus 查看控制文件 用 sysdba 用户连接到 sqlplus,输入:show parameters contr,回车执行,结果如 下图所示,也可以看见步骤 a 中查看到的控制文件。
c.关闭数据库 输入:shutdown immediate,回车执行,关闭数据库。
d.删除控制文件(损坏) 根据步骤 a 中查看到的控制文件路径找到一个控制文件,将该文件改名为 CONTROL01. CTL-del,这也就是模拟删掉了控制文件。
e.复制控制文件(恢复) 找到步骤 a 中另外一个控制文件,将该控制文件复制,粘贴到步骤 d 的控制文件夹中, 并改名为步骤 d 中控制文件的原来的名字(CONTROL01.CTL)。
f.启动数据库
输入:startup,回车执行,启动数据库。
g.查看两个控制文件 在步骤 d 的目录中,刷新,从时间上看,CONTROL01.CTL-del 控制文件与之前改名时 的时间一致,没有变化,而 CONTROL01.CTL 控制文件变成新的了,所以 CONTROL01.CTL-de l 文件是可以随时删掉的。 以上情况就模拟了控制文件丢失的情况,损坏跟丢失的情况是一样的,控制文件没有 了再复制一个就可以了。也就是用复制文件的方法恢复控制文件。
任务 2 恢复受损的复用联机日志文件
1、损坏其中一个联机日志文件 每个日志组有两个成员,也就是说丢失一个,另一个仍然存在,两个文件的内容是完全一致的,删掉其中的一个,不会影响日志的使用的,接下来证实一下这个说法。 损坏其中一个联机日志文件的操作过程,可以观看实训视频或跟随实训步骤 1 完成。
a.关闭数据库 用 sysdba 用户连接到 sqlplus,输入:shutdown immediate,回车执行,关闭数据库。
b.删除日志文件
进入 C:\app\oradate\ORCL,这个目录下放的是日志文件,找到 REDO01_2.LOG、REDO 02_2.LOG、REDO03.LOG 文件,将其删除。如果没有以上日志文件,请参考配置数据库的备 份与恢复中的任务一进行创建日志文件,如下图所示。
c.启动数据库 输入:startup,回车执行,成功启动数据库。说明删除日志没有影响日志的正常使 用。
d.登录 PL/SQL 我们用 system 用户登录 PL/SQL。
e.查看 v$log 和 v$logfile 在 SQL 语句执行窗口输入查看 v$log 和 v$logfile 视图的语句,执行。我们会看到三 组日志组中都有一个文件是失效的,如下图所示。
2、激活日志文件成员 激活日志文件成员的操作过程,可以观看实训视频或跟随实训步骤 2 完成。
a.激活第二组日志文件成员 用 sysdba 用户连接到 sqlplus,输入:alter database clear unarchived logfile group 2;,回车执行,这时候在本地 C:\app\oradate\ORCL 中第二组 log 已经生成了,如 下图所示。
b.激活第三组日志文件成员 输入:alter database clear unarchived logfile group 3;,回车执行,这时候在 本地 C:\app\oradate\ORCL 中第三组 log 已经生成了,如下图所示。
c.激活第一组日志文件成员 为什么第一次没有激活第一组日志文件呢?因为第一组日志的 ARCHIVED 字段为 NO 状 态。如果直接激活它会报错。输入命令:alter system switch logfile;,回车执行,进 行一次切换。这时候通过 v$log 视图可以看见,第二组日志的 ARCHIVED 字段为 NO 状态了,已经切换成功。
d.激活第一组日志文件成员 输入:alter database clear unarchived logfile group 1;,回车执行,这时候在 本地 C:\app\oradate\ORCL 中第一组 log 已经生成了。如下图所示。
3、删除所有联机日志并恢复 以上步骤讲的是删除联机日志中的一个,并使它恢复的操作过程。那么删除所有联机 日志如何恢复呢?跟随以下步骤进行学习吧。 删除所有联机日志并恢复的操作过程,可以观看实训视频或跟随实训步骤 3 完成。
a.关闭数据库 用 sysdba 用户连接到 sqlplus,输入:shutdown immediate,回车执行,关闭数据库。
b.删除所有日志文件 进入 C:\app\oradate\ORCL 目录,删除所有“.LOG”文件。
c.启动数据库 输入:startup,回车执行,报错,如下图所示。
d.启动数据库到 mount 状态
exit 退出 sqlplus,再使用 sysdba 用户连接到 sqlplus,输入:startup mount,回 车执行。
e.恢复删除的日志 输入命令:recover database until cancel;,回车执行,结果如下图所示。这时候 还没有生成文件。
f.启动数据库 输入命令:alter database open resetlogs;,回车执行,数据库已经打开了,到本 地刷新,会看见所有日志文件都已经恢复了。
4、删除所有联机日志并恢复 以上讲的例子都是基于归档日志在打开的状态下做的。由于执行了 resetlogs,使序 列号归零了,所以这个时候需要用 RMAN 建立一次 full database backup,保证数据不会 再出现问题。一旦有问题,也会有最新的 RMNA 的备份。 删除所有联机日志并恢复的操作过程,可以观看实训视频或跟随实训步骤 4 完成。
a.删除归档日志文件
删除 C:\app\oradate\archlog1 和 C:\app\oradate\archlog2 的路径下的所有文件。 如果没有以上日志文件,请参考配置数据库的备份与恢复中的任务二进行创建日志文件。
b.归档日志 在 sqlplus 环境里,输入:alter system switch logfile;,回车执行,这时候到本 地 C:\app\oradate\archlog1 刷新,会看到新生成的归档日志从 001 开始的。如下图所示。
archlog2 文件夹里也是一样的。
c.再次归档日志 在 sqlplus 环境里,输入:alter system switch logfile;,回车执行,文件夹 arc
hlog1 和 archlog2 里又生成了新的。
d.归档日志文件名格式 在 sqlplus 环境里,输入:show parameters arch,会看到如下图所示的参数,此参 数的值规定了归档日志文件名的格式。所以即使我们在步骤 a 中不删除归档文件也是可以 的,因为后面会根据时间戳生成文件名,不会出现重复的。
任务 3 恢复受损非重要数据文件
a.登录 PL/SQL 我们用 system 用户登录 PL/SQL。
b.查看数据库有多少表空间
在 SQL 语句执行窗口,输入:select * from dba_data_files;,执行。结果如下图 所示。
c.创建表空间 在命令执行窗口,输入:CREATE TABLESPACE ts_data LOGGING DATAFILE'C:\app\or adate\ORCL\ts_data01.dbf' SIZE 2M;,回车执行,如下图所示。
d.是否创建成功 在本地 C:\app\oradate\ORCL 目录下,如果找到 TS_DATA01.DBF 文件。说明创建成功。
e.创建用户 在项目中找到 Users,右键,选择 New,名字为:db_1;密码为 oracle,不要忘记; 表空间选择 TS_DATA,选择 Role privileges,赋予用户 dba 权限,如下图所示。创建用户 的目的就是让用户默认使用创建的表空间。将生成的 SQL 命令在命令行中执行即可。
f.新打开 PL/SQL 重新打开一个 PL/SQL,用创建的用户 db_1 登录。
g.创建表 t3 用户 db_1 创建表 t3,在 SQL 语句执行窗口输入:create table t3 as select * fr om dba_tables s where rownum<10;执行。创建9条数据。
h.查询
查询表 t3,证明是否创建成功。
2、使用 RMAN 备份
a.进入 RMAN 在命令行窗口 A 中输入:rman nocatalog target sys/oracle,回车执行,进行 RMA N。
b.备份数据库 在命令行窗口 A 中输入:backup full database;,回车执行,进行数据库备份。
c.关闭数据库
再打开一个命令行窗口 B,进入 sqlplus 环境,关闭数据库。
d.删除 TS_DATA01.DBF 文件 在本地找到这个文件,将其删除。
e.启动数据库 在命令行窗口 B,输入 startup,启动数据库。这时候会报错,如下图所示。报错信 息是没有找到 TS_DATA01.DBF 文件。
f.退出 RMAN 在命令行窗口 A 中输入:exit,回车执行。
g.进入 RMAN 在命令行窗口 A 中输入:rman nocatalog target sys/oracle,回车执行,进行 RMA N。
h.恢复备份文件 在命令行窗口 A 中输入:restore datafile 9;,“9”是在步骤 e 中提示信息中的数字,同学可根据你的提示信息修改,结果如下图所示。说明恢复成功。
i.查看 TS_DATA01.DBF 文件 到本地目录 C:\app\oradate\ORCL 下,查看 TS_DATA01.DBF 文件是否存在,如果存在 说明恢复成功。
j.恢复备份文件 在命令行窗口 A 中输入:recover datafile 9;,回车执行。restore 和 recover 是成 对出现的。结果如下图所示。
k.启动数据库 在命令行窗口 B,输入 alter database open;,回车执行,启动数据库。
l.打开 SQL/PL 重新登录 SQL/PL,用创建的用户 db_1 登录。查询表 t3,如果表中数据没有发生变化, 说明恢复成功。
四、实验总结和心得
【遇到的问题】:
1.ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
2.连接Oracle数据库失败(ORA-12514)
3.Oracle "ORA-00942: 表或视图不存在 "
【解决方法】:
1.网上搜索相关资料得已解决;
2.询问同学寻求帮助。
实验心得:
通过本次实验我基本掌握如何查看检查点在后台运行的状态、掌握如何手动执行检查点、掌握如何使用命令方式创建日志文件成员、掌握如何使日志文件生效、了解使用 EM 创建日志文件成员的方法。