第十章 【备份】与【恢复】 (二) --物理备份

 

在ORACLE的免费学习版本XE上进行物理备份实验。

 

[root@host5 ~]# su  -  oracle
[oracle@host5 ~]# sqlplus /nolog

SQL> connect / as sysdba
Connected.
如果数据库还没开启,则

SQL> startup

数据库开启。

 

1.创建测试表空间 user_data 和数据文件 userdata1.dbf

SQL> create tablespace user_data datafile 'userdata1.dbf' size 100M ;

Tablespace created.
 

2.创建测试表 userinfo

SQL> create table userinfo
   (
   id number(6,0),
   username varchar2(20) 
   );

Table created.


查看一下表的信息:

SQL> col name for a30
SQL> set line 100
SQL> desc userinfo
 Name                               Null?                      Type
 ----------------------------------------------------- -------- ------------------------------------
 ID                                                                     NUMBER(6)
 USERNAM                                                     VARCHAR2(20)

插入数据:
SQL> insert into userinfo(id,usernam) values (1,'tom');

1 row created.
 

SQL> select * from userinfo  ;

    ID USERNAM
---------- --------------------
     1 tom
 

~~~~~~~~~~~~~~~~~~~~~~~~~~

开始备份。

以下三类文件要备份:

 查询数据库一共有多少个数据文件:

SQL> select * from dba_data_files;

/u01/app/oracle/oradata/XE/users.dbf
/u01/app/oracle/oradata/XE/sysaux.dbf
/u01/app/oracle/oradata/XE/undotbs1.dbf

/u01/app/oracle/oradata/XE/system.dbf

(数据文件在这里)
/u01/app/oracle/product/11.2.0/xe/dbs/userdata1.dbf

日志文件

select * from v$logfile;

/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_fn3zc0sl_.log
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_fn3zbz7v_.log

控制文件

select * From v$controlfile;

/u01/app/oracle/oradata/XE/control.dbf

~~~~~~~~~~

3.

备份之前必须要关闭数据库,这也是第一次关闭数据库:

SQL> shutdown immediate

SQL> quit

4.

文件全部拷贝到一个新的空的文件夹/u01/mybak

[root@host5 ~]# cd /u01/
[root@host5 u01]# ls
app
[root@host5 u01]# 
[root@host5 u01]# mkdir mybak
[root@host5 u01]# 
[root@host5 u01]# cd mybak/

[root@host5 mybak]$ pwd
/u01/mybak
 

把上面查出来的数据文件,日志文件,控制文件用操作系统的复制命令,粘贴到备份目录下。

[root@host5 u01]# cd /u01/mybak/

[root@host5 mybak]# cp /u01/app/oracle/product/11.2.0/xe/dbs/userdata1.dbf   .                     # 注意空格后面有个点. !!!指的是把前面的文件复制到当前这个目录!!!           

[root@host5 mybak]# cp /u01/app/oracle/fast_recovery_area/XE/onlinelog/*   .                    #  *代表onlinelog目录下的所有(两个)文件

[root@host5 mybak]# cp /u01/app/oracle/oradata/XE/control.dbf  .                     #这个是控制文件

[root@host5 mybak]# cp /u01/app/oracle/oradata/XE/users.dbf    .    
[root@host5 mybak]# cp /u01/app/oracle/oradata/XE/sysaux.dbf    .    
[root@host5 mybak]# cp /u01/app/oracle/oradata/XE/undotbs1.dbf   .    

[root@host5 mybak]# cp /u01/app/oracle/oradata/XE/system.dbf   .    

[root@host5 mybak]# ls
control.dbf            o1_mf_2_fn3zc0sl_.log  system.dbf    userdata1.dbf
o1_mf_1_fn3zbz7v_.log  sysaux.dbf             undotbs1.dbf  users.dbf
这八个文件都已经复制好了。其实在/u01/app/oracle/oradata/XE 下面还有一个temp.dbf ,不过既然select * from dba_data_files 只找到5个文件,我就没有管这个临时文件。

5.

拷贝完成之后,我们要模拟数据库故障。怎么模拟呢?删除重要数据,模拟出故障的情况。

先使用oracle用户,启动数据库

 

[root@host5 ~]# su  -  oracle
[oracle@host5 ~]# sqlplus /nolog

SQL> connect / as sysdba
Connected.

SQL> startup

数据库开启。

 

进入数据库删除重要数据,模拟出故障的情况。

SQL> truncate table userinfo

Table truncated.

6.

开始恢复。别忘了关闭数据库!!第二次关闭数据库。

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> 
SQL> quit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

先删除旧的八个文件。
[oracle@host5 ~]$ 
[oracle@host5 ~]$ su - root

[root@host5 ~]# cd /u01/app/oracle/oradata/XE

[root@host5 XE]# rm control.dbf 
rm:是否删除普通文件 "control.dbf"?y
[root@host5 XE]# rm u*
rm:是否删除普通文件 "undotbs1.dbf"?y
rm:是否删除普通文件 "users.dbf"?y
[root@host5 XE]# rm s*
rm:是否删除普通文件 "sysaux.dbf"?y
rm:是否删除普通文件 "system.dbf"?y

[root@host5 XE]# cd /u01/app/oracle/fast_recovery_area/XE/onlinelog
[root@host5 onlinelog]# ls
o1_mf_1_fn3zbz7v_.log  o1_mf_2_fn3zc0sl_.log
[root@host5 onlinelog]# rm *
rm:是否删除普通文件 "o1_mf_1_fn3zbz7v_.log"?y
rm:是否删除普通文件 "o1_mf_2_fn3zc0sl_.log"?y

[root@host5 mybak]# cd /u01/app/oracle/product/11.2.0/xe/dbs/
[root@host5 dbs]# rm userdata1.dbf 
rm:是否删除普通文件 "userdata1.dbf"?y

7.

把备份的文件拷贝到原来目录。

[root@host5 mybak]# cp o1_mf_*    /u01/app/oracle/fast_recovery_area/XE/onlinelog/

[root@host5 mybak]# ls /u01/app/oracle/fast_recovery_area/XE/onlinelog/
o1_mf_1_fn3zbz7v_.log  o1_mf_2_fn3zc0sl_.log

[root@host5 mybak]# cp control.dbf          /u01/app/oracle/oradata/XE/

[root@host5 mybak]# cp users.dbf            /u01/app/oracle/oradata/XE/
[root@host5 mybak]# cp system.dbf         /u01/app/oracle/oradata/XE/
[root@host5 mybak]# cp undotbs1.dbf     /u01/app/oracle/oradata/XE/
[root@host5 mybak]# cp sysaux.dbf         /u01/app/oracle/oradata/XE/

[root@host5 mybak]# cp userdata1.dbf   /u01/app/oracle/product/11.2.0/xe/dbs/

8.

在开启数据库进行验证之前,还有一件事!!要将刚才的所有八个文件的用户和用户组改成oracle 与dba!!!!

具体可以看一下我们一直没有动的temp.dbf 文件的信息,

[root@host5 mybak]# cd  /u01/app/oracle/oradata/XE/

[root@host5 XE]$ ls -ld temp.dbf 
-rw-r-----. 1 oracle dba 20979712 8月  20 22:00 temp.dbf

因此:

[root@host5 ~]# cd /u01/app/oracle/oradata/XE
[root@host5 XE]# chown oracle:dba control.dbf 
[root@host5 XE]# chown oracle:dba sysaux.dbf 
[root@host5 XE]# chown oracle:dba system.dbf 
[root@host5 XE]# chown oracle:dba undotbs1.dbf 
[root@host5 XE]# chown oracle:dba users.dbf 
[root@host5 XE]# 
[root@host5 XE]# cd /u01/app/oracle/product/11.2.0/xe/dbs/
[root@host5 dbs]# ls
hc_XE.dat  init.ora  lkXE  orapwXE  spfileXE.ora  userdata1.dbf
[root@host5 dbs]# chown oracle:dba userdata1.dbf 
[root@host5 dbs]# 
[root@host5 dbs]# ls -ld hc_XE.dat 
-rw-rw----. 1 oracle dba 1544 8月  20 22:53 hc_XE.dat
[root@host5 dbs]# 
[root@host5 dbs]# cd /u01/app/oracle/fast_recovery_area/XE/onlinelog
[root@host5 onlinelog]# chown oracle:dba o1_mf_1_fn3zbz7v_.log 
[root@host5 onlinelog]# chown oracle:dba o1_mf_2_fn3zc0sl_.log 
[root@host5 onlinelog]# 
[root@host5 onlinelog]# exit

9.

开启数据库,验证数据是否还在!!!

[oracle@host5 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on Mon Aug 20 22:56:43 2018

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> 
SQL> connect / as sysdba 
Connected to an idle instance.
SQL> 
SQL> startup
ORACLE instance started.

Total System Global Area  413372416 bytes
Fixed Size            2227040 bytes
Variable Size          301991072 bytes
Database Buffers      104857600 bytes
Redo Buffers            4296704 bytes
Database mounted.
Database opened.
SQL> 
SQL> select * from userinfo;

    ID USERNAM
---------- --------------------
     1 tom

数据已经恢复。

完毕。

 

~~~~~~~~~~~~~~~~~

这里不用看。

没有把文件的root权限改成oracle:dba,开启数据库会出现什么情况??
SQL> startup
ORACLE instance started.

Total System Global Area  413372416 bytes
Fixed Size            2227040 bytes
Variable Size          301991072 bytes
Database Buffers      104857600 bytes
Redo Buffers            4296704 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> 
SQL> select * from userinfo
  2  ;
select * from userinfo
              *
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
SQL> 
SQL> quit


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值