首页  >  文章  >  数据库  >  Oracle教程:基于用户管理的备份与恢复-控制文件的备份与恢复

Oracle教程:基于用户管理的备份与恢复-控制文件的备份与恢复

WBOY
WBOY原创
2016-06-07 17:02:59857浏览

控制文件用于记录和维护数据库。当恢复数据库时,服务器进程和后台进程需要从控制文件中读取各种备份相关的信息。如果控制文件损

控制文件用于记录和维护数据库。当恢复数据库时,服务器进程和后台进程需要从控制文件中读取各种备份相关的信息。如果控制文件损坏,则会导致这些备份信息的丢失。尽管使用多元化控制文件可以防止控制文件损坏,但因为控制文件的重要性,应该定期备份控制文件。当数据库配置发生改变时,一定要备份控制文件。涉及到数据库配置改变的命令:
alter database [add|drop] logfile
alter database [add|drop] logfile member
alter database [add|drop] logfile group
alter database [noarchivelog|archivelog]
alter database rename file
create tablespace
alter tablespace [add|rename] datafile
alter tablespace [read write|read only]
drop tablespace

控制文件的备份,三种方式
1)使用OS命令进行拷贝
1)open状态下,使用alter database命令生成控制文件副本
2)open状态下,使用alter database backup controlfile to trace命令将控制文件备份到跟踪文件
控制文件的恢复,两种方式
1)mount状态下,使用RECOVER DATABASE USING BACKUP CONTROLFILE
2)mount状态下,生成跟踪文件并进行恢复

2--2示例:

[Oracle@localhost ~]$ rlsqlplus / as sysdba

SQL*Plus:版本 10.2.0.1.0 - 2011 年 8 月 1 日星期一 21:40:03 生产

版权所有 (c )1982 年,2005 年,甲骨文。  保留所有权利。

已连接到空闲实例。

SQL>启动
ORACLE 实例已启动。

系统全局区域总计 528482304 字节
固定大小                  1220360 字节
可变大小             176161016 字节
数据库缓冲区         343932928 字节
重做缓冲区                7168000 字节
数据库已挂载。
数据库已打开。
--open状态下生成控制文件副本
SQL>将数据库备份控制文件更改为
  2  '/oracle/10g/oracle/bakup/database/oralife.ctl';
将数据库备份控制文件更改为
*
第 1 行出现错误:
ORA -01580:创建控制备份文件时出错
/oracle/10g/oracle/bakup/database/oralife.ctl
ORA-27038:创建的文件已存在
附加信息:1

SQL> ;将数据库备份控制文件更改为
  2  '/oracle/10g/oracle/bakup/database/oralife.ctl' 重用; --重用用于覆盖原有控制文件副本

数据库已更改。

--手动删除所有控制文件模拟文件丢失
SQL> rm /oracle/10g/oracle/product/10.2.0/oradata/oralife/*.ctl;

--使用evan登录,并添加数据
SQL> conn evan/evan
已连接。
SQL>从 t_evan 中选择 *;

TEXT
------------------------------------ ----------------------------------------------------------
甲骨文
java
spring
hibernate
hibernate

SQL>;插入 t_evan 值('added');

已创建 1 行。

SQL> commit;

提交完成。

SQL> conn / as sysdba
已连接。
SQL>立即关闭
ORA-00210: 无法打开指定的控制文件
ORA-00202: 控制文件: '/oracle/10g/oracle/product/10.2.0/oradata/oralife/control01.ctl'
ORA-27041: 无法打开文件
Linux 错误: 2: 没有这样的文件或目录
其他信息: 3
SQL> shutdown abort
ORACLE 实例关闭。

--alter_oralife.log 出现这样的信息:
Mon Aug  1 23:13:51 2011
ORA-00202: control file: '/ oracle/10g/oracle/product/10.2.0/oradata/oralife/control01.ctl'
ORA-27037: 无法获取文件状态
Linux 错误: 2: 没有这样的文件或目录
其他信息: 3

--复制控制文件到目标路径
SQL>ho cp /oracle/10g/oracle/bakup/database/oralife.ctl /oracle/10g/oracle/产品/10.2.0/oradata/oralife/control01.ctl

SQL>更改系统设置 control_files='/oracle/10g/oracle/product/10.2.0/oradata/oralife/control01.ctl' 范围 = spfile; --control_files参数,指定可用的控制文件

系统已更改。
SQL>启动强制挂载
ORACLE 实例已启动。

系统全局区域总计 528482304 字节
固定大小                  1220360 字节
可变大小             138412280 字节
数据库缓冲区s          381681664 字节
重做缓冲区                7168000 字节
数据库已安装。
--生成trace文件
SQL>更改数据库备份控制文件以跟踪 noresetlogs;

数据库已更改。

SELECT c.VALUE || '/' || d.实例名称 || '_ora_'|| a.spid || '.trc' TRACE
 来自 v$process a、v$session b、v$parameter c、v$instance d
 其中 a.addr = b.paddr
   AND b.audsid = USERENV (' sessionid')
       AND c.NAME = 'user_dump_dest';

TRACE
------------------------ -------------------------------------------------- -----
/oracle/10g/oracle/product/10.2.0/db_1/admin/oralife/udump/oralife_ora_4558.trc

SQL>立即关闭
ORA-01109: 数据库未打开


数据库已卸载。
ORACLE 实例关闭。

--打开trace 文件,删除注释,在shutdown状态下执行脚本,创建控制文件

--使用evan登录验证数据
SQL>; conn evan/evan
已连接。
SQL>从 t_evan 中选择 *;
TEXT
---------------------------------------------------- ------------------------------------------
oracle
java
spring
hibernate
hibernate
已添加

已选择 6 行。
可见数据没有丢失。

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/oracle/10g/oracle/product/10.2.0/oradata/oralife/control01.ctl
这时应该重建多个控制文件
如何做?

Oracle教程:基于用户管理的备份与恢复-控制文件的备份与恢复

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn