概述
数据丢失
1、可以丢失的数据
未提交的事务所修改的数据块可以丢失
2、不能丢失的
已提交事务的数据块不能丢失
丢失的脏块可以通过日志找回来,current日志的最后一条为终点,起点为检查点队列的LRBA地址,已提交事务对应的脏块一定可以构造出来,而同时也可能构造出未提交的脏块,而oracle会回滚这些未提交事务。
数据库安全
语句错误
插入错误的数据
解决办法:确定数据类型,确定约束,通过应用层来检查
用户进程错误
连接和会话非正常关闭
解决办法:无需过多关心,pmon和server process会自动处理
网络错误
网络或监听出现问题
解决办法:网络冗余/链路冗余
用户错误
用户错误操作
解决办法:10g往后可以使用闪回查询/删除/数据库和不完全恢复技术,但是ddl内嵌commit无法回滚
实例崩溃
电源故障
解决办法:UPS/多路市电
硬件故障
解决办法:冗余/检测
介质错误
磁盘错误
解决办法:9i
其他建议:
根据用户需求来定制方案 99.99999999999% 99.999% 99.9999%
合理的方案一定要落实
该花的钱要花
管理员的责任
控制文件
解决办法:复用/备份
备份时机:
物理结构改变时备份
改变前和改变后各一份
RMAN备份时打开控制文件自动备份功能
open resetlogs后必须对控制文件进行备份
相关视图
V$CONTROLFILE
V$CONTROLFILE_RECORD_SECTION
V$PARAMETER
show parameter control
查看当前的控制文件
SQL> show parameter control_files;
查看控制文件中各个记录段
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
关闭实例
SQL> shutdown immediate;
创建异地目录并复制控制文件
[oracle@localhost ~] mkdir/u01/app/data/controlfile−p[oracle@localhost ] m k d i r / u 01 / a p p / d a t a / c o n t r o l f i l e − p [ o r a c l e @ l o c a l h o s t ] cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/data/controlfile/control03.ctl
生成静态参数文件并修改
SQL> create pfile from spfile;
添加新增的控制文件信息到参数文件
[oracle@localhost dbs]$ vim initorcl.ora
最终内容为:
*.control_files=’/u01/app/oracle/oradata/orcl/control01.ctl’,’/u01/app/oracle/oradata/orcl/control02.ctl’,’/u01/app/data/controlfile/control03.ctl’
由静态参数文件生成动态参数文件
SQL> create spfile from pfile;
启动实例,并查看控制文件情况
SQL> show parameter control_files;
SQL> select value from v$parameter where name=’control_files’;
备份二进制的控制文件
SQL> alter database backup controlfile to ‘/u01/app/controlfile.bkp’;
备份文本文件的控制文件
SQL> alter database backup controlfile to trace;
控制文件实验
案例一:使用追踪文件来恢复控制文件
使用两个会话,会话一在SQL状态,会话二使用oracle用户登录系统
会话二:
我们进入trace目录
[oracle@ocp orcl]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
执行tail命令进行跟踪
[oracle@ocp trace]$ tail -f alert_orcl.log
会话一:
备份控制文件到追踪日志
SQL> alter database backup controlfile to trace;
会话二:
我们可以在会话二窗口中看到如下信息:
Sun Jul 17 08:45:23 2016
alter database backup controlfile to trace
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3781.trc
Completed: alter database backup controlfile to trace
查看该追踪日志
[oracle@ocp trace]$ cat /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3781.trc
通过该文件可以查看有创建控制文件的相关信息
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE “ORCL” RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘/u01/app/oracle/oradata/orcl/redo01.log’ SIZE 200M BLOCKSIZE 512,
GROUP 2 ‘/u01/app/oracle/oradata/orcl/redo02.log’ SIZE 200M BLOCKSIZE 512,
GROUP 3 ‘/u01/app/oracle/oradata/orcl/redo03.log’ SIZE 200M BLOCKSIZE 512
– STANDBY LOGFILE
DATAFILE
‘/u01/app/oracle/oradata/orcl/system01.dbf’,
‘/u01/app/oracle/oradata/orcl/sysaux01.dbf’,
‘/u01/app/oracle/oradata/orcl/undotbs01.dbf’,
‘/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf’,
‘/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf’,
‘/u01/app/oracle/oradata/orcl/users01.dbf’,
‘/u01/app/oracle/oradata/orcl/pdbseed/undotbs01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/system01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/sysaux01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/undotbs01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/users01.dbf’
CHARACTER SET AL32UTF8
;
会话一:
关闭数据库
SQL> shutdown immediate;
会话二:
保存控制文件到其他地方
删除两个控制文件
[oracle@ocp trace] rm−rf/u01/app/oracle/oradata/orcl/control01.ctl[oracle@ocptrace] r m − r f / u 01 / a p p / o r a c l e / o r a d a t a / o r c l / c o n t r o l 01. c t l [ o r a c l e @ o c p t r a c e ] rm -rf /u01/app/oracle/oradata/orcl/control02.ctl
会话一:
如果之前没有正常关闭数据库的话,执行以下语句关闭数据库:
SQL> shutdown abort
启动数据库会报错,
SQL> startup;
返回如下错误:
ORA-00205: error in identifying control file, check alert log for more info
重新创建控制文件
根据追踪文件中的控制文件创建信息来创建控制文件,注意语句后面要加上分号。
创建完成后使用以下命令来改变数据库的状态
SQL> alter database open;
返回如下错误提示:
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
按照提示进行启动数据库
SQL> alter database open resetlogs;
如果提示以下错误,进行介质回复即可
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
执行以下命令
SQL> recover database using backup controlfile;
输入redo log的文件名,有redo01.log,redo02.log,redo03.log 直到OK为止。
按照提示进行启动数据库
SQL> alter database open resetlogs;
检查数据库状态
SQL> select instance_name,status from v$instance;
查看数据库开启状态
SQL> select open_mode from v$database;
查看控制文件情况
SQL> show parameters control_files;
至此数据库控制文件恢复正常
案例二:重新创建控制文件
重新创建控制文件
如果丢失了所有的控制文件并且没有任何的备份,我们可以通过重建控制文件来打开数据库。其中,重建控制文件至少需要以下信息:
1.数据库名
2.字符集
3.数据文件名称
4.初始化参数,包括MAXLOGFILES、MAXLOGMEMBERS、MAXDATAFILES、MAXINSTANCES、MAXLOGHISTORY等;
1、模拟环境
查看控制文件路径:
SQL> show parameters control_files;
删除控制文件
[oracle@ocp orcl]
rm−rf/u01/app/oracle/oradata/orcl/control01.ctl[oracle@ocporcl]
r
m
−
r
f
/
u
01
/
a
p
p
/
o
r
a
c
l
e
/
o
r
a
d
a
t
a
/
o
r
c
l
/
c
o
n
t
r
o
l
01.
c
t
l
[
o
r
a
c
l
e
@
o
c
p
o
r
c
l
]
rm -rf /u01/app/oracle/oradata/orcl/control02.ctl
[oracle@ocp orcl]$ rm -rf /data/controlfile/control03.ctl
关闭数据库
强制关闭数据库,然后重启数据库,报ORA-00205错误。需要注意的是,此时执行shutdown immediate命令,数据库无法正常关闭,只能关闭到mounted状态;需要使用shutdown abort命令强制关闭数据库。
SQL> shutdown abort;
启动数据库会报错
SQL> startup;
2、获取数据库名
生成文本格式的参数文件
SQL> create pfile from spfile;
打开参数文件查看db_name参数值,即为数据库名称
cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs
cat initorcl.ora
查看到该参数值
*.db_name=’orcl’
数据库名称为orcl
3、获取字符集
启动数据库到nomount状态
SQL> startup nomount;
获取字符集
SQL> select userenv(‘language’) from dual;
返回如下提示:
USERENV(‘LANGUAGE’)
AMERICAN_AMERICA.US7ASCII
4、获取数据文件名称
进入目录
cd /u01/app/oracle/oradata/orcl/
查看数据文件名称
ls -l
5、生成创建控制文件脚本
根据之前收集的相关信息保存如下内容到目录下,命名为creat.sql
注意:临时数据文件不属于数据文件,不要再脚本中体现该文件,否则会报错。
注意:脚本内容后面需要有分号,英文的分号。
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE “ORCL” RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘/u01/app/oracle/oradata/orcl/redo01.log’ SIZE 200M BLOCKSIZE 512,
GROUP 2 ‘/u01/app/oracle/oradata/orcl/redo02.log’ SIZE 200M BLOCKSIZE 512,
GROUP 3 ‘/u01/app/oracle/oradata/orcl/redo03.log’ SIZE 200M BLOCKSIZE 512
DATAFILE
‘/u01/app/oracle/oradata/orcl/system01.dbf’,
‘/u01/app/oracle/oradata/orcl/sysaux01.dbf’,
‘/u01/app/oracle/oradata/orcl/undotbs01.dbf’,
‘/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf’,
‘/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf’,
‘/u01/app/oracle/oradata/orcl/users01.dbf’,
‘/u01/app/oracle/oradata/orcl/pdbseed/undotbs01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/system01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/sysaux01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/undotbs01.dbf’,
‘/u01/app/oracle/oradata/orcl/orclpdb/users01.dbf’
CHARACTER SET US7ASCII
;
6、在sql中执行该脚本。
SQL> @/u01/app/oracle/oradata/orcl/create.sql
如果正常会有以下提示:
Control file created.
7、打开数据库
SQL> alter database open;
返回以下提示:
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
按照提示打开数据库
SQL> alter database open resetlogs;
在打开数据库时,如果报错,提示system01数据文件需要执行介质恢复,我们执行recover database即可
如果提示以下错误,进行介质回复即可
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
执行以下命令
SQL> recover database using backup controlfile;
输入redo log的文件名,有redo01.log,redo02.log,redo03.log 直到OK为止。
/u01/app/oracle/oradata/orcl/redo01.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo03.log
按照提示进行启动数据库
SQL> alter database open resetlogs;
8、检查状态
检查数据库状态
SQL> select instance_name,status from v$instance;
查看数据库开启状态
SQL> select open_mode from v$database;
查看控制文件情况
SQL> show parameters control_files;
查看数据库版本
SQL> select * from v$version;
查看表空间
SQL> select tablespace_name from dba_tablespaces;
至此数据库控制文件恢复正常
重做日志
解决办法:复用
查看当前日志组的情况
SQL> select group#,sequence#,members,status from v$log;
查看重做日志文件的情况
SQL> select group#,status,member from v$logfile;
添加重做日志的异地目录
[oracle@localhost dbs]$ mkdir /data/logfile/
为每组添加一个重做日志组成员
alter database add logfile member ‘/data/logfile/redo01_02.log’ to group 1;
alter database add logfile member ‘/data/logfile/redo02_02.log’ to group 2;
alter database add logfile member ‘/data/logfile/redo03_02.log’ to group 3;
查看重做日志文件的情况
SQL> select group#,status,member from v$logfile;
切换日志组
SQL> alter system switch logfile;
归档日志
归档的优点:
发生磁盘介质损坏时,可通过备份和归档恢复数据库
通过持续应用归档日志,可以建立备份数据库
解决办法:复用/备份
注意:不要和数据文件放在一起,建议nfs,但是必须有一个是本地磁盘
为了不让归档日志因为文件名重名被覆盖,在名称中使用变量,如下:
%d
唯一的数据库标识符,如果将多个数据库归档到同一目录,这是必须的
%t
线程号,显示为v$instance视图的THREAD#列,rac中使用
%r
场景号(incarnation),如果进行了不完全恢复,这是必须的
%s
日志切换序列号,这个变量能够保证任何一个数据库中的归档日志都不会彼此重写
归档的相关视图
V$DATABASE
查询数据库是否处于归档模式
V$ARCHIVED_LOG
包含控制文件中所有已经归档的日志信息
V$ARCHIVE_DEST
包含所有归档目标信息
V$ARCHIVE_PROCESSES
已经启动的ARCn进程相关信息
V$BACKUP_RELOG
包含所有已经备份的归档日志信息
启用数据库归档模式
完整关闭数据库
SQL> shutdown immediate;
启动到mount阶段
SQL> startup mount;
更改数据库到归档模式
SQL> alter database archivelog;
打开数据库
SQL> alter database open;
进行确认
SQL> select log_mode from v database;SQL>selectarchiverfromv d a t a b a s e ; S Q L > s e l e c t a r c h i v e r f r o m v instance;
创建两个归档的目标目录
[oracle@localhost dbs]$ mkdir /data/archive/{1,2} -p
查看当前归档配置
SQL> show parameter log_archive;
配置本地归档目标
SQL> alter system set log_archive_dest_1=’location=/data/archive/1’ scope=spfile;
SQL> alter system set log_archive_dest_2=’location=/data/archive/2’ scope=spfile;
强制切换日志
SQL> alter system switch logfile;
查看归档日志文件
SQL> select name from v$archived_log;
通过操作系统查看
[oracle@localhost dbs]$ ll /data/archive/{1,2}
配置归档进程个数
SQL> alter system set log_archive_max_processes=3;
禁止某个归档目标
SQL> alter system set log_archive_dest_2=defer scope=pfile;
启用某个归档目标
SQL> alter system set log_archive_dest_2=enable;
闪回恢复区 快速闪回区
闪回恢复区是所有与闪回恢复相关的文件的默认位置
flashback
恢复文件
存储在恢复区当中的文件可以是永久的或者临时的。
永久文件包括:
控制文件多路复用副本
联机重做日志文件多路复用副本
临时文件包括:
归档重做日志文件
RMAN备份
RMAN副本
控制文件自动备份
闪回日志文件
除闪回日志外,其他的文件都可以重定向到任何地方,如果启用闪回数据库,则必须定义闪回恢复区,空间则可由RMAN自动删除临时文件。
相关参数
DB_RECOVERY_FILE_DEST
DB_RECOVERY_DEST_SIZE
查看快速闪回区的相关参数
SQL> show parameter db_recovery
查看是否启用了快速闪回
SQL> select flashback_on from v$database;
在归档情况下,关闭并启动到mount模式
SQL> shutdown immediate;
SQL> startup mount;
设置快闪区大小
SQL> alter system set db_recovery_file_dest_size=4G;
设置快闪区目标
SQL> alter system set db_recovery_file_dest=’/data/kuaishanqu’;
启用快闪
SQL> alter database flashback on;
设置希望闪回的时间范围
SQL> alter system set db_flashback_retention_target=10080; ##单位是分钟,我们改成7天。
打开数据库
SQL> alter database open;
查看是否启用了快速闪回
SQL> select flashback_on from v$database;
查看空间使用情况
SQL> select * from v$flash_recovery_area_usage;
关闭快闪使用以下语句
SQL> alter database flashback off;
闪回数据库
查询闪回区中最早的SCN号
SQL> select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
查询当前数据库的SCN号码
SQL> select current_scn from v$database;
复制一个表
SQL> create table hahadddddtab as select * from tab;
关闭数据库
SQL> shutdown immediate;
启动到mount模式
SQL> startup mount;
闪回到某个SCN
SQL> flashback database to scn 1877740;
1877740
启动数据库
SQL> alter database open resetlogs;
#####33
创建一个hahatab 表
SQL> create table hahadddtab as select * from tab;
select current_scn from v$database;
数据库备份
物理备份
CP以操作系统块复制,而RMAN以ORACLE块复制
冷备
正常关闭
备份数据文件
备份控制文件
备份参数文件
不要备份REDO LOG
非正常关闭/保护现场
备份数据文件
备份控制文件
备份参数文件
备份REDO LOG
热备
手工热备:
RMAN:备份的数据是不一致的
逻辑备份
数据库一定要OPEN
以DDL导出对象
以SELECT导出数据
不能跑日志
物理备份是数据库安全的最底限。
nbu
数据库恢复
还原
还原备份的相关文件
恢复
跑日志
跑归档日志
跑重做日志
控制文件中必须提供以下三类信息:
RMAN的元数据,如果控制文件的日志信息不是最新的,可以手工指定日志文件。
数据库物理结构
归档日志信息
步骤:
1、还原数据文件
2、应用日志
3、数据文件有提交和未提交的事务
4、undo未提交事务
5、恢复数据文件
完全恢复
不完全恢复:
原因:
归档日志丢失
重做日志丢失
为了恢复数据
物理备份
RMAN RECOVERY MANAGER
RMAN可备份的文件:
数据文件
控制文件
归档日志
SPfile
备份集片
RMAN不能备份的文件
临时文件
重做日志
口令文件
静态参数文件
网络配置文件
可生成两类备份
备份集/backup set 是专用格式,可包含多个文件,但不包括当前不是备份段一部分的数据文件的块。
还可以使用压缩算法进行压缩,
映像副本 是与输入文件相同的备份文件,从备份集提取文件需要执行RMAN还原操作
备份集可以是完整的或者增量的,但是映像副本只能是完整的。
备份和还原操作由通道服务器进程执行,有两种:磁盘类型或者SBT_TAPE
存储库(repository)是有关备份的元数据,包括构成备份集的片的名称和位置,包含在其中的文件以及映像副本的名称和位置,存储库是自动化还原和恢复的关键。
存储库存储在目标数据库的控制文件中,也可以存储在目录数据库中创建的一组表中。
RMAN操作由RMAN可执行程序启动,监视和控制
RMAN组件分为命令执行器和目标数据库
RMAN的使用
连接数据库
RMAN TARGET /
查看当前配置
RMAN> SHOW ALL;
以下为各个配置的说明
配置冗余策略,有两种,一种是几份,一种是几天
几份:CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
几天:CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
配置备份优化,如果为on的状态,RMAN会优化备份,如只读的数据文件只备份一次,不建议使用
CONFIGURE BACKUP OPTIMIZATION OFF; # default
配置备份到什么介质,磁盘为DISK,磁带为SBT
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
配置控制文件自动备份,必须打开,如果有恢复目录,RMAN元数据会复制到恢复目录,不管有没有恢复目录,控制文件中都有一份RMAN元数据
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
自动备份控制文件到快速闪回区
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default
备份集的并行度,并行度为数据库产生的服务器进程,如果为磁盘,并行度可随意,如果为带库,并行度为带机的数量
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
配置数据库每次备份的副本数量,每一次备份可有多份完全相同的副本
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
配置归档日志的目标设备和类型
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
配置备份集最大大小
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
配置备份文件加密功能
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
配置备份文件加密算法
CONFIGURE ENCRYPTION ALGORITHM ‘AES128’; # default
配置备份压缩相关功能,这里默认使用基本压缩算法
CONFIGURE COMPRESSION ALGORITHM ‘BASIC’ AS OF RELEASE ‘DEFAULT’ OPTIMIZE FOR LOAD TRUE ; # default
配置归档日志的保留策略
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
配置控制文件的快照文件的目标路径和文件名,备份期间产生
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f’; # default
备份数据库
BAKUP命令
语法:
BACKUP [FULL|INCREMENTAL LEVEL[=]n](backup_type option);
FULL: 完全备份
INCREMENTAL表示增量备份;
LEVEL是增量备份的级别,取值为0-4,0级相当于完全备份
backup_type是备份对象,有以下内容:
DATABASE: 表示备份全部数据库包括数据文件和控制文件
TABLESPACE: 表示备份表空间,可以备份一个或者多个指定的表空间
ARCHIVELOG[ALL] 表示备份归档日志文件
CURRENT CONTROLFILE 表示备份控制文件
DATAFILECOPY[TAG] 表示使用COPY命令备份数据文件
CONTROLFILECOPY 表示使用COPY命令备份的控制文件
BACKUPSET[ALL] 表示使用BACKUP命令备份的所有文件
option:为可选项,主要有以下参数
TAG 指定一个标记
FORMAT 表示文件存储格式
%c 表示备份段的多个copy的序号
%D 以DD显示日期
%Y 以YYYY格式显示年份
%n 8位长度的数据库名称,不足的用“x”填充
%s 备份集号,此数字是控制文件中随备份集增加的一个计数器,从1开始
%T 指定年、月、日格式为YYYYMMDD
%U 指定一个便于使用的、由%u_%p_%c构成的、确保不会重复的备份文件名称,RMAN默认使用%U格式
%d 指定数据库名
%M 以MM格式显示月份
%F 结合数据库表示DBID、日、月、年及序列,构成唯一的自动产生的字符串名字
%p 文件备份序号,在备份集中的备份文件片编码,从1开始每次增加1
%t 指定备份集的时间戳,是一个4字节值得秒数值,和%s构成唯一的备份集名称
%u 指定备份集编码,以及备份集创建的时间构成的8个字符的文件名称
INCLUDE CURRENT CONTROLFILE 表示备份控制文件
FILESPRESET 表示每个备份集所包含的文件
CHANNEL 指定备份通道
DELETE[ALL]INPUT 备份结束后删除归档日志
MAXSETSIZE 指定备份集的最大大小
SKIP[OFFLINE|READONLY|INACCESSIBLE] 可选的备份条件
自定义备份位置
使用root用户创建并配置如下目录
[root@localhost ~] mkdir /data/backup/ -p
[root@localhost ~] chown oracle:oinstall /data -R
[root@localhost ~] chmod 770 /data -R
简单命令:
1、备份数据库
RMAN> BACKUP DATABASE;
查看表空间信息
SQL> SELECT * FROM V$TABLESPACE;
2、备份表空间
RMAN> BACKUP TABLESPACE SYSTEM;
3、备份多个表空间
RMAN> BACKUP TABLESPACE USERS,EXAMPLE;
查看数据文件
SQL> COL NAME FOR A60
SQL> SELECT FILE#,NAME FROM V$DATAFILE;
4、备份数据文件
RMAN> BACKUP DATAFILE 3,4,5;
5、备份控制文件
RMAN> BACKUP CURRENT CONTROLFILE;
6、备份参数文件
RMAN> BACKUP SPFILE;
7、备份归档日志
RMAN> BACKUP ARCHIVELOG ALL;
8、备份并删除已经备份的归档日志
RMAN>BACKUP ARCHIVELOG ALL DELETE INPUT;
控制文件备份
查看控制文件自动备份设置
RMAN> SHOW CONTROLFILE AUTOBACKUP;
修改控制文件自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
修改控制文件备份目标路径
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/data/rman_ctl_%F.bk’;
清除自定义配置,还原到默认配置
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR;
查看控制文件的快照
RMAN> SHOW SNAPSHOT CONTROLFILE NAME;
归档日志备份
备份归档日志
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
一致性备份
这是一个执行一个脱机全部完整备份的RMAN脚本
run{
shutdown immediate;
startup mount;
allocate channel d1 type disk;
backup as backupset database format ‘/u01/app/backup/rman_%U.bkp’;
alter database open;
}
也可以将内容写成脚本,然后使用以下语句进行执行
rman target sys/oracle@orcl @offline_full_quanbu.rman
打开状态的备份
这是一个包含归档日志的数据库完全备份
run{
allocate channel d1 type disk;
allocate channel d2 type disk;
backup as compressed backupset files per set 4 database;
backup as compressed backupset archivelog all delete all input;
}
查看备份集
RMAN> LIST BACKUP;
查看备份过的控制文件
RMAN> LIST BACKUP OF CONTROLFILE;
清除一个通道
RMAN> CONFIGURE CHANNEL 3 DEVICE TYPE DISK CLEAR;
清除所有通道
RMAN> CONFIGURE DEVICE TYPE DISK CLEAR;
备份到指定位置
RMAN> BACKUP DATABASE FORMAT ‘/u01/app/backup/rman_%U.bkp’;
执行备份的时候出现以下错误:
ORA-19502: write error on file “/data/backup/rman_0jrcbht5_1_1.bkp”, block number 60800 (block size=8192)
ORA-27072: File I/O error
Additional information: 4
Additional information: 60800
Additional information: 106496
出现这种错误提示,一般说明磁盘空间不足,解决空间问题后即可解决,练习时可通过以下命令清空备份集
删除所有备份集
RMAN> DELETE BACKUP;
删除指定的备份
RMAN> DELETE BACKUPPIECE ‘/u01/app/backup/rman_ctl_c-1463721894-20170225-14.bkp’
删除指定的备份集
RMAN> DELETE BACKUP TAG TAG20170225T135934;
查看备份集
RMAN> LIST BACKUP;
增量备份
增量备份依赖于包含所有块的起点,这称作增量级别(incremental level)0 备份。
增量级别1备份将提取自上一个级别1备份以来更改的所有块,如果没有则提取上一个0备份以来更改的所有块。
累积备份将提取上一个级别0备份以来更改的所有块,不考虑级别1的备份。
执行级别0的备份
RMAN> backup as backupset incremental level 0 database;
执行级别1的备份
RMAN> backup as backupset incremental level 1 database;
执行累积增量备份,将提取级别0以来的所有块
RMAN> backup as backupset incremental level 1 cumulative database;
映像副本
映像副本是以文件为单位创建的,RMAN允许用一个命令复制多个文件
备份整个数据库
RMAN> backup as copy database;
将归档日志移入快闪区并删除输入文件
RMAN> backup as copy archivelog all delete all input;
管理备份
list 列出已创建的备份
list backup;
list copy;
list backup of database;
list backup of datafile 1;
list backup of tablespace users;
list backup of archivelog all;
list copy of archivelog from time=’sysdate-7’;
list backup of archivelog from sequence 1000 until sequence 1050;
report 显示需要备份什么
#列出构成数据库的数据文件
report schema;
#应用配置的保留策略,列出至少需要一个备份来满足策略的所有数据文件和归档日志
report need backup;
#列出三天备份的所有对象,忽略保留策略
report need backup days 3;
#列出没有三个备份的所有文件
report need backup redundancy 3;
#获取备份和保留策略校验后可删除的备份
report obsolete;
#上个命令列出后,删除
delete obsolete;
#列出备份数目为三个或者更多的所有备份,删除多余的
delete obsolete redundancy 2;
#可根据编号进行删除
delete backupset 4;
RMAN备份相关的视图;
v
backupfiles已备份的每个文件v
b
a
c
k
u
p
f
i
l
e
s
已
备
份
的
每
个
文
件
v
backup_set 每个备份集
v
backuppiece每个备份片v
b
a
c
k
u
p
p
i
e
c
e
每
个
备
份
片
v
backup_redolog 已备份的每个归档日志
v
backupspfile每个spfilev
b
a
c
k
u
p
s
p
f
i
l
e
每
个
s
p
f
i
l
e
v
backup_datafile 每个数据文件
v
backupdevice已链接到RMAN的SBTv
b
a
c
k
u
p
d
e
v
i
c
e
已
链
接
到
R
M
A
N
的
S
B
T
v
rman_configuration 每个配置设置,不包含默认设置
备份策略:
expired:失效的
当直接从操作系统去删除数据库的备份文件的时候,控制文件还保留着这些备份信息,当运行CROSSCHECK命令的时候,就会把这些备份标记成expired。
相关命令:
检查备份是否有效;
RMAN> CROSSCHECK BACKUP OF DATABASE;
删除失效的备份
RMAN> DELETE EXPIRED BACKUP;
OBSOLETE: 过时的
OBSOLETE的参数跟数据库的备份策略相关
RETENTION POLICY:
设置备份保存策略,即设置备份文件保留多长时间。RMAN会将超出时间的备份文件标识为废弃(OBSOLETE)。RMAN跟踪备份的数据文件、控制文件、归档日志文件,并确定哪些需要保存,哪些需要标记为废弃,但RMAN不自动删除废弃的备份文件。
显示当前哪些备份集已经过时
RMAN> REPORT OBSOLETE;
删除已过时的备份集
RMAN> DELETE OBSOLETE;
使用以下选项不提示
RMAN> DELETE NOPROMPT OBSOLETE;
设置备份永远不过期
RMAN> CONFIGURE RETENTION POLICY TO NONE;
还原和恢复
还原就是从之前的备份中提取文件
恢复是指应用从重做日志中提取的变更向量,使其保持最新。恢复可以是完整的或者不完整的。
数据恢复顾问
是一个诊断和修复数据库问题的工具,使用RMAN或者OEM。DRA能够生成脚本来修复数据文件和控制文件受到的破坏,但不提供有关参数文件或重做日志问题的建议。DRA依赖自动诊断知识库(ADR)和Health Monitor。
HealthMonitor是一组检查,会在特定错误条件出现时自动运行,也可以根据DBA手动运行。检查结果不存储在数据库当中,而是保存在文件系统中。原因在于,一些数据库错误会导致数据库不可用,因此需要一个外部知识库来存储HealthMonitor的结果,该知识库就是自动诊断知识库(ADR),用DIGNOSTIC_DEST实例参数指定目标。
不同的阶段只能运行不同的检查
在nomount模式中,仅运行DB Structure Integrity检查,只检查控制文件完整性。
在mount模式,检查控制文件/联机重做日志文件和数据文件头的完整性,还将运行redo integrity check检查联机和归档日志完整性。
在open模式中,可运行扫描每个数据库是否受损检查,并检查数据字典和撤销段的完整性。
只有数据库处于打开状态才能手动运行该检查。
DRA
只有实例处于nomount或者更高的模式时,DRA才能奏效,因为如果初始化参数文件存在问题,就起不到作用。
在nomount模式中,可以诊断控制文件的问题,并使用有效副本生成用来还原的脚本。
一旦数据库进入mount模式,DRA就可以诊断有关数据文件缺失或者损坏,以及联机日志组丢失的问题,并生成修复脚本。
确认存在SYSAUX表空间的全部完整备份
RMAN> list backup of tablespace sysaux;
如果没有,就用以下语句创建一个
RMAN> backup as backupset tablespace sysaux;
关闭实例并退出RMAN
RMAN> shutdown immediate;
RMAN> exit;
删除对应表空间的数据文件
[oracle@localhost ~]$ rm -rf /u01/app/oracle/oradata/orcl/sysaux01.dbf
启动数据库
SQL> startup;
系统会提示以下错误:
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: ‘/u01/app/oracle/oradata/orcl/sysaux01.dbf’
进入RMAN环境
[oracle@localhost ~]$ rman target /
执行以下命令列出故障
RMAN> list failure;
生成建议的修复脚本
RMAN> advise failure;
使用以下命令进行还原
RMAN> repair failure;
关键文件损坏意味着数据库实例将终止,且在修复之前不能打开,如果损坏的文件是非关键的,数据库可以保持打开或者可以打开数据库。
丢失了当前联机日志文件的所有副本是例外情况。
关键文件有:
控制文件的任何副本
SYSTEM表空间的一部分数据文件
当前撤销表空间的一部分数据文件
非关键文件包括
多重联机日志文件
临时文件
非SYSTEM或者撤销表空间的一部分数据文件
完整恢复分成以下步骤:
使损坏的数据文件脱机
还原受损的文件
恢复受损的文件
使恢复的文件联机
非归档模式下的数据恢复
因为恢复所需的归档日志文件并不存在,所以只能进行还原,但如果通过应用归档重做日志文件,还原的数据文件与数据库的其他部分不 能同步,无法打开它,唯一选择为还原整个数据库,包括所有的数据文件和控制文件,但是会丢失备份创建后的所有工作。
#
备份数据库
RMAN> BACKUP DATABASE;
使用SCOTT用户删除一个表
强行关闭实例
SQL> shutdown abort;
启动数据库到mount模式
SQL> startup mount;
还原数据库
RMAN> restore database;
如果使用了增量备份,还需要执行以下命令
RMAN> recover database noredo;
介质还原
RMAN> RECOVER DATABASE;
然后打开数据库
SQL> alter database open NORESETLOGS;
#
不要让数据库运行在非归档模式
归档模式下的非关键文件恢复
非关键文件的损坏通常不会导致实例终止。
如果备份是使用RMAN完成的,那么受损文件的还原和恢复操作将完全自动,使用最有效的方式执行还原,智能地使用完整和增量备份,然后应用必要的归档日志。
数据文件的还原和恢复只有在自数据文件上一次备份后生成的所有归档日志可用的情况下才能成功。如果归档文件受损,则只能执行完整还原,不完全恢复至缺失的归档文件,会丢失之后的所有工作。
创建一个表空间
SQL> create tablespace hahaha datafile ‘/u01/app/oracle/oradata/orcl/hahaha.dbf’ size 2m;
创建新的表
SQL> create table test (c1 date) tablespace hahaha;
插入一条数据
SQL> insert into test values(sysdate);
提交
SQL> commit;
备份haha表空间
RMAN> backup tablespace hahaha;
备份完成之后使用vim编辑该表空间对应的数据文件
[oracle@localhost ~]$ vim /u01/app/oracle/oradata/orcl/haha.dbf
刷新缓存
SQL> alter system flush buffer_cache;
查询该表,然后出现错误提示
SQL> select * from test;
ORA-01578: ORACLE data block corrupted (file # 7, block # 130)
ORA-01110: data file 7: ‘/u01/app/oracle/oradata/orcl/haha.dbf’
执行OEM/可用性/执行恢复/用户控制的恢复/数据文件/恢复—
恢复完成后,查询该表
SQL> select * from test;
丢失关键数据文件时恢复
组成SYSTEM和当前活动撤销表空间被认为是关键的,如果受损,则不可能使数据库处于打开状态。
如果SYSTEM表空间的任一部分不可用,部分数据目录将缺失,在没有完整的数据目录的情况下,oracle不能起作用。
如果部分撤销表空间不可用,则维护事务完整性和隔离性所需的撤销数据也不可用,oracle同样不能起作用。
因此,这些关键文件受损将会导致实例立即终止。
如果数据库因为关键文件受损,那么第一行动就是尝试进行启动,这将在加载模式下停止,同时将错误消息写入告警日志,表明受损程度。
备份数据库
RMAN> backup database;
删除SYSTEM表空间的数据文件
[oracle@localhost ~]$ rm -rf /u01/app/oracle/oradata/orcl/system01.dbf
在linux系统下,有文件标识符的原因,实例不会立即崩溃
但是告警日志中已经有记录
[oracle@localhost ~]$ tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
查看DBW进程的PID
[oracle@localhost ~]$ ps -ef | grep dbw| grep -v grep
进入该目录
[oracle@localhost fd]$ cd /proc/3392/fd
查看文件标识符
[oracle@localhost fd]$ ll
设置需要跟踪的pid
SQL> oradebug setospid 3392;
发送强制关闭文件描述符的命令
SQL> oradebug call close 259;
查看文件标识符已经不在
[oracle@localhost fd]$ ll
检查点
SQL> alter system checkpoint;
再次执行查询,发现已经失败
SQL> select * from tab;
启动数据库,但是因为错误会停止到mount状态
SQL> startup;
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf’
通过OEM进行恢复,执行对象恢复即可完成。
不完全恢复
不完全恢复意味着丢失数据。通过还原所有数据文件将整个数据库回退,然后执行不完全恢复,不是应用所有的重做,而是停止到指定的某个点,生成一个不是最新的数据库版本,自该点之后的所有工作将会丢失。
执行不完全恢复只有两个原因:一个是完全恢复不成功,一个是故意要丢失数据。
跳过坏的事务而恢复其他事务是不可能的。
不完全恢复分以下几个步骤:
加载数据库
还原所有数据文件
恢复数据库至某个点
用重做日志打开数据库
几点区别:
完全恢复可在数据库打开时进行,除非受损的是关键文件,不完全恢复只能在mount模式下进行。
完全恢复只还原受损的数据文件,不完全恢复还原所有的数据文件。
完全恢复时应用所有重做日志让数据库保持最新,不完全恢复将归档和重做日志数据应用到所需要的点。
完全恢复后,数据库和发生问题前一样,不完全恢复则需要用RESETLOGS打开数据库,这将重新初始化重做日志,序列号从1开始和创建新的场景号。
不完全恢复有三个选项:
until time 将应用重做日志至一个特定的时间,精度秒。
until scn 将恢复到指定事务的scn号
until sequence 如果归档和重做日志缺失,该选项将至日志切换前的所有工作恢复到缺失的文件或者组中。
SQL*plus使用UNTIL CANCEL/CHANGE
run {
必须启动到mount模式,怎么关闭无所谓
startup mount;
指定一个时间
set until time =”to_date(‘22-09-16 13:00:00’,’dd-mm-yy hh24:mi:ss)”;
从至少与set until命令指定的时间相同的备份中提取数据文件
restore database;
将应用归档日志文件和重做日志,截至到指定的时间
recover database;
初始化重做日志和切换序列号
alter database open resetlogs;
}
也可以如下指定until值
还原到7天前
RMAN> restore database until time ‘sysdate - 7’;
还原到指定日期
RMAN> restore database until time ‘27-OCT-08’;
最后
以上就是淡定蛋挞为你收集整理的Oracle学习7.0(数据备份与还原)查看当前的控制文件查看控制文件中各个记录段关闭实例创建异地目录并复制控制文件生成静态参数文件并修改添加新增的控制文件信息到参数文件由静态参数文件生成动态参数文件启动实例,并查看控制文件情况控制文件实验案例一:使用追踪文件来恢复控制文件我们进入trace目录执行tail命令进行跟踪备份控制文件到追踪日志查看该追踪日志通过该文件可以查看有创建控制文件的相关信息关闭数据库保存控制文件到其他地方删除两个控制文件如果之前没有正常关闭数据库的话,执行以下语句关闭数据库的全部内容,希望文章能够帮你解决Oracle学习7.0(数据备份与还原)查看当前的控制文件查看控制文件中各个记录段关闭实例创建异地目录并复制控制文件生成静态参数文件并修改添加新增的控制文件信息到参数文件由静态参数文件生成动态参数文件启动实例,并查看控制文件情况控制文件实验案例一:使用追踪文件来恢复控制文件我们进入trace目录执行tail命令进行跟踪备份控制文件到追踪日志查看该追踪日志通过该文件可以查看有创建控制文件的相关信息关闭数据库保存控制文件到其他地方删除两个控制文件如果之前没有正常关闭数据库的话,执行以下语句关闭数据库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复