数据库备份与恢复
实验目的
掌握oracle数据库常用的备份方法。
实验内容
(1)数据备份的方法
实验步骤
1、数据库备份
1)Oracle物理备份与恢复
.0.准备工作:
(1) 查看数据库是否运行于归档模式下:
请给出查询的结果:
干净的关闭数据库,做一个完全的冷备份。
提示:a.使用showdown命令; b.复制数据文件、日志文件和控制文件到安全地方
(2) 把数据库改为归档模式
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
设置成自动归档
SQL> alter system set log_archive_start = true scope=spfile;
1.数据库系统数据文件和回退段遭破坏的情况下的恢复。此时数据库的状态是关闭的。
(1) 先启动数据库,用scott用户建立test表,并插入两条数据。
SQL> create table scott.test (id int);
表已创建。
SQL> insert into scott.test values(1);
已创建 1 行。
SQL> insert into scott.test values(2);
已创建 1 行。
SQL> commit;
提交完成。
(2)模拟数据库遭意外被迫关闭,并且系统数据文件丢失。
SQL> shutdown abort
把oracle服务停掉,移除SYSTEM01.dbf和UNDOTBS01.DBF文件(即将这两个文件移到其他文件夹下)。
(3)启动服务,启动数据库, 提示如下错误
a. 启动服务
b. 启动数据库
SQL> startup
请给执行结果:
(4)把备份的SYSTEM01.dbf和UNDOTBS01.DBF文件复制回去
a. 执行以下命令:
请给执行结果:
然后就可以打开数据库,查看scott用户的test表。
SQL> alter database open;
SQL> select * from scott.test;
请给执行结果:
实2:
数据库是打开的,这时损坏的文件是用户的数据文件而不是system和undo文件。
(1)用scott用户在users表空间建立test1表
SQL> create table scott.test1(id int)
2 tablespace users;
表已创建。
(2) 插入两条数据
SQL> insert into scott.test1 values(1);
已创建 1 行。
SQL> insert into scott.test1 values(2);
已创建 1 行。
SQL> commit;
提交完成。
(3)当前日志归档
SQL> alter system archive log current;
系统已更改。
(4)现在破坏users表空间,使其离线,然后移除users01.dbf到一个指定文件夹(备份)
SQL> alter tablespace users offline;
表空间已更改。
执行:SQL> alter tablespace users online;
请给执行结果:
此时出现错误,users表空间不能在线了。这时把备份的users01.DBF还原回去。
然后,执行:SQL> recover tablespace users;
(5)完成介质恢复。
SQL> alter tablespace users online;
表空间已更改。
SQL> select * from scott.test1;
请给执行结果:
实3:数据文件没有备份(不能使system和undo文件)的恢复。
(1)创建表空间testspace
在SQL Plus中依次执行以下语句,给出最后的执行结果:
SQL> create tablespace testspace datafile ‘C:\oracle\product\10.1.0\db_1\TestDB\testspace.dbf‘ size 10m;
SQL> create table scott.test3(id int)
tablespace testspace;
SQL> commit;
SQL> alter system switch logfile;
SQL> insert into scott.test3 values(1);
SQL> commit;
SQL> alter tablespace testspace offline;
SQL> select * from scott.test3;
请给执行结果:
(2)由于没有备份数据文件,需重新创建一个
SQL> alter database create datafile
‘C:\oracle\product\10.1.0\db_1\TestDB\testspace.dbf‘;
SQL> recover tablespace testspace;
(3) 完成恢复
SQL> alter tablespace testspace online;
表空间已更改。
SQL> select * from scott.test3;
请给执行结果:
2)逻辑备份:导入导出实验
实4:模式的导入导出
案例:将scott/tiger用户对应的模式导出,通过导出文件将其导入到Test用户(为一个空用户)对应的模式中,包括该模式中的所有对象的定义和数据。
1.准备工作
(1)创建用户:
Create user test
Identified by test;
(2)授权:
注:这儿做了简化处理,实际工作中,尽量不要授DBA权限给一般用户。
2.数据的导出与导入
(1)数据准备
以scott身份登录: conn scott/tiger
①创建测试用表:
create table jobs(
name varchar2(20),
job varchar2(40),
sales number);
加入数据:
insert into jobs values(‘IT_Test‘,‘software testing‘,3000);
提交:
commit;
②创建测试用表scott_test
create table scott_test(
name varchar2(10),
age number);
加入数据:
insert into scott_test values(‘manager‘,‘40‘);
(2)以管理员身份登录:
conn as sysdba;
alter system enable restricted session;
(3)导出数据库:
在DOS提示符下执行:
exp system/ testdb full=y file=test.dmp
执行时,会要求输入system的口令,请根据实际情况输入。
(4)恢复数据库运行状态
conn as sysdba;
alter system disable restricted session;
(5)进行数据库的导入:
以下是一示例:
imp system/testdb fromuser=scott touser=test tables=(scott_test,jobs) file=test.dmp ignore=y;
请给执行结果:
3.结果检验
对导入的数据进行查询,以确定导入是否成功,给出结果截图:
(1)以test身份登录到数据库
(2)查询刚才导出(导入)表中的某个表(如Jobs):
请给执行结果:
实验小结:
1. 备份原则与策略:在刚建立数据库时,应该立即进行数据库的完全备份;
将所有的数据库备份保存在一个独立磁盘上(必须是与当前数据库系统正在使用的文件不同的磁盘);
应该保持控制文件的多路复用,且控制文件的副本应该存放在不同磁盘控制器下的不同磁盘设备上;
应该保持多个联机日志文件组,每个组中至少应该保持两个日志成员,同一日志组的多个成员应该分散存放在不同磁盘上;
至少保证两个归档重做日志文件的归档目标,不同归档目标应该分散于不同磁盘;
如果条件允许,尽量保证数据库运行于归档模式;
根据数据库数据变化的频率情况确定数据库备份规律;
在归档模式下,当数据库结构发生变化时,如创建或删除表空间、添加数据文件、重做日志文件等,应该备份数据库的控制文件;
在非归档模式下,当数据库结构发生变化时,应该进行数据库的完全备份;
在归档模式下,对于经常使用的表空间,可以采用表空间备份方法提高备份效率;
在归档模式下,通常不需要对联机重做日志文件进行备份;
使用RESETLOGS方式打开数据库后,应该进行一个数据库的完全备份;
对于重要的表中的数据,可以采用逻辑备份方式进行备份。
2.根据数据备份方式的不同,数据库备份分为:
物理备份:将组成数据库的数据文件、重做日志文件、控制文件、初始化参数文件等操作系统文件进行复制,将形成的副本保存到与当前系统独立的磁盘或磁带上。
逻辑备份是指利用Oracle提供的导出工具(如Expdp,Export)将数据库中的数据抽取出来存放到一个二进制文件中。
3. 根据数据库备份时是否关闭数据库服务器,物理备份分为:
冷备份又称停机备份,是指在关闭数据库的情况下将所有的数据库文件复制到另一个磁盘或磁带上去。
热备份又称联机备份,是指在数据库运行的情况下对数据库进行的备份。要进行热备份,数据库必须运行在归档日志模式下。
4. 根据数据库备份的规模不同,物理备份可分为:
完全备份:指对整个数据库进行备份,包括所有的物理文件。
部分备份 :对部分数据文件、表空间、控制文件、归档重做日志文件等进行备份。
5. 根据数据库是否运行在归档模式,物理备份可分为:归档备份,非归档备份
6. 如果没有启用归档模式,数据库不能恢复到备份完成后的任意时刻。如果启用归档模式,从冷备份结束后到出现故障这段时间的数据库恢复,可以利用联机日志文件和归档日志文件实现。