Oracle数据文件的备份与恢复

数据文件中包含数据库中的用户数据或应用程序数据。是oracle体系结构中非常重要要的一部分。因此对数据文件的备份与恢复时每一位DBA的必修课。

本次测试的思路是分为4个步骤1.通过增加数据文件的大小,向表空间中添加新表新数据来调整数据库结构。2.备份数据文件和控制文件。3.删除数据文件,然后进行恢复。4.确认恢复过来的数据文件中是否完整,先前添加的表和数据是否完整。

第一步:1.增加表空间大小。

首先我们先查看一下每个表空间的大小。

SQL> selecttablespace_name,sum(bytes/1024/1024) as FreeSize

2  from dba_free_space

3  group by tablespace_name;


TABLESPACE_NAME                  FREESIZE

------------------------------ ----------

SYSAUX                            31.1875

UNDOTBS1                            77.75

USERS                               .5625

SYSTEM                             6.5625

EXAMPLE                             21.25


由上可知:目前5个表空间基本空间都不足,因为我们基本不会使用example例子表空间,所以接下来只为其他4个表空间添加数据文件。

我们先查一下每一个表空间和数据文件的对应关系和位置。

SQL> Select tablespace_name, file_namefrom dba_data_files;

TABLESPACE_NAME

------------------------------

FILE_NAME

-------------------------------------------------------------------------------

EXAMPLE

C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF

USERS

C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF

UNDOTBS1

C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF

TABLESPACE_NAME

------------------------------

FILE_NAME

-------------------------------------------------------------------------------

SYSAUX

C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF

SYSTEM

C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF


接下来就开始添加128M数据文件。

SQL> alter tablespace system add datafile'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SY

STEM02.DBF ' size 128M;

altertablespace system add datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM0

2.DBF

*

1 行出现错误:

ORA-01119: 创建数据库文件 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF

' 时出错

ORA-27040: 文件创建错误, 无法创建文件

OSD-04002: 无法打开文件

O/S-Error: (OS 123) 文件名、目录名或卷标语法不正确。

实际操作时容易出现了如上错误,原因是:'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SY

STEM02.DBF ' 两个单引号之间(尤其是头和尾)存在空格,所以在word编辑后再往数据库中执行时一定要格外小心。

接下来就很顺利了

SQL> alter tablespace system add datafile'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF' size 128M;

Tablespace altered.

SQL> alter tablespace sysaux add datafile'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX02.DBF' size 128M;

Tablespace altered.

SQL> alter tablespace undotbs1 add datafile'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS02.DBF' size 128M;

Tablespace altered.

SQL> alter tablespace users add datafile'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS02.DBF' size 128M;

Tablespace altered.

查看一下表空间是否已经变大。

SQL> selecttablespace_name,sum(bytes/1024/1024) as FreeSize

2  from dba_free_space

3  group by tablespace_name;


TABLESPACE_NAME                  FREESIZE

------------------------------ ----------

SYSAUX                             157.75

UNDOTBS1                           205.75

USERS                            127.5625

SYSTEM                           133.5625

EXAMPLE                             21.25


由上结果可知:已经添加数据文件成功,表空间已经变大。


2.接下来我们继续在表空间中创建新的表,并添加数据。

2.1首先是创建一个账户,并赋权。

SQL> create user test identified byszc12345 default tablespace users temporary

tablespace temp;

用户已创建。

SQL> grant connect,resource to test;

授权成功。

2.2 创建一个testtable表,并添加数据

鉴于方便,我们直接复制scott用户的dept表中的数据。

首先是赋权test可以select scott用户的dept表。

SQL> grant select on scott.dept to test;

授权成功。

然后创建testtable表,内容为dept的表内容。

SQL> create table testtable as select *from scott.dept;

表已创建。

SQL> select *  from testtable;


  DEPTNO DNAME          LOC

---------- -------------- -------------

      90 tec                guangzhou

      70 tec                beijing

      10 ACCOUNTING     NEW YORK

       20 RESEARCH       DALLAS

      30 SALES           CHICAGO

      40 OPERATIONS     BOSTON

      60 tec               shanghai


已选择7行。


接下来我们先备份数据文件和控制文件,下面的是一位大牛的原话,我直接粘贴了:

“切记:每次对数据库结构(调整表空间,增减数据文件)后,最好能立即备份一次数据库,并备份一次控制文件!一个好的DBA不是会多少奇怪的花样,弄一些稀奇古怪的参数来显示自己的博学,而是踏踏实实的做好每个简单的细节!细节决定成败!”


第二步:备份数据文件和控制文件。


1.先查看数据文件的位置,为备份做准备

Select tablespace_name, file_name fromdba_data_files order by tablespace_name;  

2.表空间设置为热备份模式。

SQL> alter tablespace SYSAUX beginbackup;

表空间已更改。

SQL> alter tablespace SYSTEM beginbackup;

表空间已更改。

SQL> alter tablespace UNDOTBS1 beginbackup;

表空间已更改。

SQL> alter tablespace USERS beginbackup;

表空间已更改。

3.将数据文件复制一份到备份目录中。

4.关闭表空间的热备份模式。

SQL> alter tablespace SYSAUX end backup;

表空间已更改。

SQL> alter tablespace SYSTEM end backup;

表空间已更改。

SQL> alter tablespace UNDOTBS1 endbackup;

表空间已更改。

SQL> alter tablespace USERS end backup;

表空间已更改。

5.日志切换

SQL> Alter system switch logfile;

系统已更改。

6.备份控制文件

SQL> Alter database backup controlfileto 'c:\oracle\orcl\control02.bak';

数据库已更改。

7.再日志切换

SQL> Alter system switch logfile;

系统已更改。


第三步:删除users表空间的数据文件


Shutdown immediate;然后删除USERS01.DBFUSERS02.DBF,然后startup


第四步:恢复数据文件并测试数据完整性

重启后会提示:

SQL> startup

ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS insta

ORACLE 例程已经启动。


Total System Global Area  778387456 bytes

Fixed Size                  1374808 bytes

Variable Size             260048296 bytes

Database Buffers          511705088 bytes

Redo Buffers                5259264 bytes

数据库装载完毕。

ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件

ORA-01110: 数据文件 4: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF'


这时就先将之前的备份,复制到数据文件指定的目录。

之后执行命令恢复即可。

SQL> recover database;

完成介质恢复。

通过上述结果会看到,恢复的售后不需要手工干预,是以因为这里没有提示手工干预,是因为我提前早已设置到归档目录,并将配置添加到spfile文件中,所以默认情况下就可以找到,否则还是会提示手工输入的。

验证一下数据文件是否完整。

SQL> conn sys/oracle as sysdba;

已连接。

SQL> alter database open;

数据库已更改。

SQL> conn test/szc12345

已连接。

SQL> select * from testtable;


  DEPTNO DNAME          LOC

---------- -------------- -------------

      90 tec               guangzhou

      70 tec               beijing

      10 ACCOUNTING     NEW YORK

      20 RESEARCH       DALLAS

      30 SALES          CHICAGO

      40 OPERATIONS     BOSTON

      60 tec              shanghai

已选择7行。

由上可知:数据很完整。整个的数据文件的备份与恢复就全部做完了,相对比较简单,就是过程感觉麻烦一点。