oracle备份与恢复.docx
- 文档编号:14070843
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:49
- 大小:1.12MB
oracle备份与恢复.docx
《oracle备份与恢复.docx》由会员分享,可在线阅读,更多相关《oracle备份与恢复.docx(49页珍藏版)》请在冰点文库上搜索。
oracle备份与恢复
OralceDatabase10g备份与恢复
执行未授权操作
执行未授权操作时指数据库用户试图执行未被授权的数据库操作。
假定SMITH用户不具备SELECTANYTABLE系统权限,并且在SCOTT.EMP表上不具备任何对象权限,那么当该用户访问SCOTT.EMP表时将会显示错误信息。
SQL>connsmith/lion@demo
已连接。
SQL>SELECTename,salFROMscott.empWHEREdeptno=10;
SELECTename,salFROMscott.empWHEREdeptno=10
*
第1行出现错误:
ORA-00942:
表或试图不存在
如上所示,因为SMITH用户在SCOTT.EMP表上不具备任何对象权限,所以当查询该表时会显示错误信息。
为了解决这种错误,应该为用户授予必须的权限。
SQL>connscott/tiger@demo
已连接。
SQL>GRANTSELECTONempTOsmith;
授权成功。
解决语句:
SQL>GRANTSELECTON表名TO用户名;
超出空间配额
超出空间配额是指用户在特定表空间上所需实际空间超过了该用户在该表空间上可占用的最大空间。
假定SMITH用户在USER01表空间上具有1M的空间配额,并且其对象已经在USER01表空间上占用了900K的空间,如果该用户要建立的新表所需空间超过200K,那么建表将会出现失败。
错误示例如下:
SQL>CREATETABLEtemp(colaINT,colbINT)STORAGE(MINEXTENTS4);
CREATETABLEtemp(colaINT,colbINT)STORAGE(MINEXTENTS4);
*
第1行出现错误:
ORA-01536:
超出表空间‘USER01’的空间限额
解决:
以DBA身份登录到数据库,使用ALTERUSER语句为用户分配更多的空间配额,然后重新执行相应语句。
SQL>connsystem/manager@demo
已连接。
SQL>ALTERUSERsmithQUOTA100MONuser01;
用户已更改。
解决语句:
SQL>ALTERUSER用户QUOTA100M(赋予空间的大小)ON表空间;
表空间无足够空间
表空间无足够空间是指当SQL操作需要从表空间分配空间是,表空间没有足够剩余空间所导致的错误。
当用户执行CREATETABLE语句,INSERT语句活UPDATE语句,使用SQL*Loader装载数据数,可能会导致在表空间中分配区。
如果表空间没有足够的剩余空间,那么分配区将会失败。
SQL>INSERT/*+append*/INTOsalesVALUE(SELECT*FROMtemp);
INSERT/*+append*/INTOsalesVALUE(SELECT*FROMtemp)
*
第1行出现错误:
ORA-01653:
表SMITH.SALES无法通过(在表空间USER01中)扩展
当用户试图将TEMP表数据装载到SALES表时,因为表空间USER01没有足够的剩余空间,从而导致了以上错误。
从技术角度讲,DBA应该确保表空间具有足够空间,以避免出现该类错误。
但如果出现了这种错误,DBA应该扩展表空间。
SQL>connsystem/manager@demo
SQL>ALTERTABLESPACEuser01ADDDATAFILE‘D:
\demo\user01_2.dbf’
2SIZE10MAUTOEXTENDONNEXT10M;
解决语句:
SQL>ALTERTABLESPACEuser01ADDDATAFILE'd:
\demo\user01_2.dbf'
2SIZE10MAUTOEXTENDONNEXT10M;
FLASHBACKTABLE语句
当执行DROPTABLE操作时,表结构和数据不会立即被清除,而是被放在数据库回收站(Recyclebin)中。
如果表段所在表空间足够大,那么其内容可能永远不会被清除,此时通过FLASHBACKTABLE可以迅速恢复表。
SQL>FLASHBACKTABLE表名TOBEFROEDROP;
当执行了DML误操作之后,使用FLASHBACKTABLE语句可以将表数据恢复到过去的时间点或者过去的SCN值。
注意,如果使用该特征,那么必须激活表的行移动特征;另外FLASHBACKTABLE所能恢复到的最早时间受限于初始化参数db_flashback_retention_target。
使用FLASHBACK恢复DML误操作的示例如下:
SQL>connscott/tiger@demo
SQL>ALTERTABLEempENABLEROWMOVEMENT;
SQL>UPDATEempSETsal=sal*1.1wheredeptno=10;
SQL>COMMIT;
SQL>SELECTename,salFROMempWHEREdeptno=10;
ENAMESAL
-------------------------------------------------
CLARK2964.5
KING6050
MILLER1573
SQL>FLASHBACKTABLEempTOTIMESTAMPTO_TIMESTAMP
2(‘2004-09-2216:
13:
27’,‘yyyy-mm-ddhh24:
mi:
ss’);
SQL>SELECTename,salFROMempWHEREdeptno=10;
ENAMESAL
-------------------------------------------------
CLARK2695
KING5500
MILLER1430
ORACLE运行状态查询
当客户端应用访问Oracle服务器时,必须要确保数据库已经被打开。
通过查询动态性能视图V$INSTANCE,可以定当前实例信息(包括例程名,例程所在主机名,例程状态等)
SQL>COLHOST_NAMEFORMATA15;
SQL>SELECTinstance_name,host_name,thread#,status
2FROMV$instance;
--------------------------------------------------------------------------
INSTANCE_NAMEHOST_NAMETHREAD#STATUS
-------------------------------------------------------------------------------------------
DemoBAS1OPEN
如上所示,instance_name用于标识例程名,host_name用户标示例程所在主机名,thread#用于标示重做线程号(在单例程环境中其值为1,在RAC环境中不同例程的重做线程号是唯一的),status用于标识例程状态(OPEN,数据库已打开)
通过查询动态性视图V$DATABASE,可以确定当前数据库信息(包括数据库名,日志操作模式,当前SCN值等)。
SQL>SELECTdbid,name,log_mode,current_scnFROMV$database;
DBIDNAMELOG_MODECURRENT_SCN
---------------------------------------------------------------------------------------------
3281161434DEMOARCHIVELOG1082187
如上所述,dbid是用于标示数据库唯一数字值,name用于标识数据库名,log_mode用于标识日志操作模式,current_scn用户标示数据库的当前SCN值.
通过查询数据字典视图DBA_TABLESPACES,可以显示表空间的详细信息(名称,状态,内容类型)
SQL>SELECTtablespace_name,status,contentsFROMdba_tablespaces;
TABLESPACE_NAMESTATUSCONTENTS
----------------------------------------------------------------------------------------
SYSTEMONLINEPERMANENT
UNDOTBS1ONLINEUNDO
SYSAUXONLINEPERMANENT
TEMPONLINETEMPORARY
USERSONLINEPERMANENT
USER01ONLINEPERMANENT
如上所示,tablespace_name用于标示表空间的名称,status用于标识表空间的状态,contents用于标识表空间所包含的内容(PERMENT:
存放表和索引,UNDO:
UNDO表空间,TEMPORARY:
临时表空间)
通过查询数据字典DBA_DATA_FILES,可以显示表空间和数据文件的对应关系。
下面以显示USERS表空间的数据文件信息为例说明使用DBA_DATA_FILES的方法。
SQL>colfile_nameformata20;
SQL>SELECTfile_name,bytes,autoextensibleFROMdba_data_files
2WHEREtablespace_name=’USERS’;
FILE_NAMEBYTESAUT
---------------------------------------------------------------------------
D:
\DEMO\USERS01.DBF5242880YES
当执行备份与恢复操作时,经常需要提供数据文件的动态信息。
为了获得数据文件的动态信息,可以查询动态性能视图V$DATAFILE和V$DATAFILE_HEADER,其中V$DATAFILE的动态信息来自于控制文件,而V$DATAFILE_HEADER得动态信息来自于数据文件的头部。
在数据库正常运行情况下,这两个动态性能视图的检查点SCN值完全一致;但如果数据文件出现损坏,并且转储了数据文件备份,那么V$DATAFILE_HEADER可以确定应用重做的起始SCN值,而V$DATAFILE可以确定应用重做的结束SCN值。
SQL>colnameformata30
SQL>SELECTa.name,a.checkpoint_change#“起始SCN值”,
2b.checkpoint_change#“结束SCN值”
3FROMV$DATAFILE_HEADERa,v$datafileb
4WHEREa.file#=b.file#;
NAME起始SCN值结束SCN值
---------------------------------------------------------------------------------------
D:
\DEMO\SYSTEM01.DBF10818071081807
D:
\DEMO\UNDOTBS01.DBF10818071081807
D:
\DEMO\SYSAUX01.DBF10818071081807
D:
\DEMO\USERS01.DBF10818071081807
D:
\DEMO\USER01.DBF10756301081807
D:
\DEMO\USER01_2.DBF10818071081807
因为只有数据文件USER01.DBF的起始SCN值和结束SCN值不同,所以该数据文件时需要恢复的数据文件。
预警文件(AlertFile)
预警文件由连续的消息和错误组成,并且这些消息和错误是按照时间顺序来存放的。
预警文件存放着Oracle内部错误,数据块损坏错误,非默认的初始化参数,特权用户操作(例如启动例程,关闭例程,备份和恢复等),数据库物理结构变化等信息。
预警文件的位置由初始化参数BACKGROUND_DUMP_DEST确定,其名称格式为alert_SID.log,并且其信息由服务器进程和后台进程(DBWR、LGWR)写入。
后台进程跟踪文件(BackgroundTraceFile)
后台进程跟踪文件用于记载后台进程的警告或错误信息,每个后台进程都有相应的跟踪文件。
后台进程跟踪文件的位置由初始化参数BACKGROUND_DUMP_DEST确定,名称格式为SID_processname_SPID.trc,其中processname是后台进程名,SPID是后台进程所对应的OS进程号。
通过查看后台进程跟踪文件,可以确定后台进程的消息和错误。
服务器进程跟踪文件(ServerTraceFile)
服务器进程跟踪文件用于记载服务器进程的相关信息,它主要用于跟踪用户进程所执行的SQL语句。
通过使用服务器进程跟踪文件,可以诊断SQL语句性能,并作出相应的SQL调整规划。
注意,当跟踪SQL语句时,必须激活SQL跟踪。
服务器进程跟踪文件的位置由初始化参数USER_DUMP_DEST确定,名称格式为SID_ORA_SPID.trc,其中SPID是服务器进程所对应的OS进程号。
使用:
ALTERDATABASEBACKUPCONTROLFILETOTRACE命令时,Oracle会将控制文件的建立信息写入服务器进程跟踪文件。
当控制文件全部损坏时,使用服务器进程跟踪文件可以重新建立控制文件。
备份与恢复配置
为了防止控制文件出现介质失败,应该多元化控制文件;为了提高数据库安全运行时间(MTBF),应该多元化重做日志;为了降低例程恢复时间,需要合理地配合初始化参数。
多元化控制文件
控制文件不仅记载了数据库的物理结构及其状态,而且还记载了与备份和恢复相关的动态信息。
如果数据库只包含一个控制文件,并且唯一的控制文件出现了介质失败,那么会导致数据库无法装载,此时DBA必须要重新建立控制文件或者恢复控制文件,为了防止控制文件的损坏或丢失,DBA应该多元化控制文件。
如果数据库包含多个控制文件,并且某个控制文件出现介质失败,那么此时数据库也无法装载,但DBA只要从初始化参数control_files中去掉损坏的控制文件即可。
(1)确定已存在的控制文件。
通过查询动态性能视图V$CONTROLFILE,可以显示当前数据库的所有控制文件。
(2).修改初始化参数control_files。
数据库目前只包含一个控制文件,为了给该数据库增
加一个控制文件,必须要修改初始化参数control_files,并增加一个新的控制文件。
多元化重做日志
重做日志用于记录数据库变化。
当执行DML、DDL等事物操作后,后台进程LGWR会将重做数据写入重做日志,并且oracle使用重做日志的目的是为了在出现介质失败或例程失败时恢复数据库。
在oracle数据库中,至少要包含两个或两个以上日志组。
当建立日志组时,至少要为日志组指定一个日志成员。
为了防止日志成员损坏导致日志组无法使用,oracle建议每个日志组应该包含两个或两个以上的日志成员。
如果日志组只有一个日志成员,并且该日志成员出现损坏,那么当后台进程LGWR切换到该日志组时,oracle数据库会停止运行。
(1)确定原有日志成员位置。
在为日志组增加日志成员之前,应该首先确定原有日志组及其日志成员的位置。
通过查询动态性能视图V$LOGFILE,可以显示日志成员的信息。
(2)增加日志组成员。
当为日志组增加日志成员时,为了防止磁盘损坏,oracle建议将同一个日志组的不同日志成员分布到不同磁盘上。
下面以orcl数据库的每个日志组增加一个日志成员为例说明增加日志成员的方法。
配置例程恢复参数
例程恢复是指当出现例程失败时由后台进程SMON自动同步数据文件、控制文件和重做日志并打开数据库的过程。
例程失败是时指与例程相关的后台进程及内存结构出现故障,例程失败主要有以下几种情况:
1.电源断电导致OracleServer不可用。
2.硬件故障导致OracleServer不可用,导致CPU失败,内存损坏。
3.某个必须的后台进程(DBWR、LGWR、PMON、SMON、CKPT)出现失败。
例程恢复时间由需要应用的脏缓冲区块个数确定,脏缓冲区块个数的最大值由检查点来确定,而以下初始化参数可以用于控制检查点:
1.fast_start_mttr_target:
用于指定例程恢复的最大时间(单位:
秒)
2.log_checkpoint_timeout:
用于指定发出检查点的时间间隔(单位:
秒)
3.log_checkpoint_inteval:
用于指定发出检查点的重做日志块间隔(单位:
OS块)
初始化参数log_checkpoint_timeout和log_checkpoint_inteval是为了与早期版本兼容而保留,建议使用fast_start_mttr_target控制例程恢复的时间。
下面将以例程恢复时间控制在20分钟之内说明设置fast_start_mttr_target的方法。
通过查看动态性能视图V$INSTANCE_RECOVERY,可以监视例程恢复的动态信息。
如上所示,actual_redo_blks用于标识当前情况下例程恢复实际需要应用的重做块个数,target_redo_blks用于标示当前情况下例程恢复最多需要应用的重做块个数,estimated_mttr用于标识例程恢复的预计时间。
因为例程恢复时间主要由redo时间和undo时间确定,所以为了降低例程恢复的实际时间,应该调整redo和undo的时间。
调整REDO时间
默认情况下,例程恢复的REDO操作是由SMON进程来完成的。
为了降低例程恢复的REDO时间,可以启动多个Slave进程。
通过配置初始化参数recovery_parallelism,可以指定Slave进程的个数。
因为该初始化参数是静态参数,所以在修改之后必须重新启动例程。
调整UNDO时间
默认情况下,例程恢复的UNDO操作时由后台进程SMON来完成的。
为了降低例程恢复的UNDO时间,可以启动多个Slave进程,参数fast_start_parallel_rollback可以控制Slave进程个数。
如果设置该参数为FALSE,则不会启动Slave进程;如果设置该参数为LOW,则Slave进程个数为2倍的CPU个数;如果设置该参数为HIGH,则Slave进程个数为4倍的CPU个数。
日志操作模式简介
(1)改变日志操作模式
Oracle建议OLTP系统(OnlineTransactionProcess)应该采用ARCHIVELOG模式,数据仓库系统(DataWarehouse)应该采用NOARCHIVELOG模式。
为了使得不同数据系统使用不同日志操作模式,DBA就需要改变日志操作模式。
当改变日志操作模式时,必须以SYSDBA或SYSOPER身份执行相应操作。
1)检查当前日志操作模式。
在改变日志操作模式之前,DBA首先应该检查当前日志操作模式。
通过查询动态性能视图V$DATABASE,可以确定当前日志操作模式。
2)关闭数据库,然后装载数据库。
改变日志操作模式只能在MOUNT状态下进行,因此必须首先关闭数据库,然后重新装载数据库。
注意,如果要改变日志操作模式,那么在关闭数据库时不能使用SHUTDOWNABORT命令。
3)改变日志操作模式,然后打开数据库,在将数据库转变为MOUNT状态之后,就可以改变日志操作模式了。
在改变日志操作模式之后,打开数据库。
注意,从OracleDatabase10g开始,当将数据库转变为ARCHIVELOG模式时,会自动启动ARCn进程,在OracleDatabase10G之前,为了自动启动ARCn进程,必须将初始化参数log_archive_start设置为TRUE.
配置其他归档参数
当数据库处于ARCHIVELOG模式,并且进行日志切换时,后台进程ARCH会自动生成归档日志。
从ORACLEDATABASE10G开始,默认情况下,归档日志会存放到快速恢复区对应的目录(对应于初始化参数db_recovery_file_dest),并且会按照特定格式生成归档日志文件名。
为了改变归档日志的位置和名称格式,必须改变相应的初始化参数。
1).配置归档日志的名称格式
初始化参数log_archive_format用于指定归档日志的文件名格式,当设置初始化参数时,可以指定一下匹配符:
%s:
日志序列号。
%S:
日志序列号(带有前导0)
%t:
重做线程编号。
%T:
重做线程编号(带有前导0)
%a:
活动ID号
%d:
数据库ID号
%r:
RESETLOGS的值
注意,从OracleDatabase10g开始,当配置归档日志的名称格式时,匹配符%s、%t和%r是必需的。
因为初始化参数log_archive_format是静态参数,所以在修改之后必须重新启动数据库。
当改变了初始化参数之后,如果后台进程LGWR进行日志切换,那么会生成该格式的归档日志文件(例如22_1_522517960.log,其中22是日志序列号,1是重做线程号,而522517960为RESETLOGS的编号)注意,如果归档日志被存放在快速恢复区,那么归档日志文件名不会采用log_archive_format的文件名格式。
2).使用log_archive_dest_n配置归档位置
初始化参数log_archive_dest_n用于指定多个归档位置,其中n是1和10之间的整数。
通过使用初始化参数log_archive_dest_n,不仅可以配置本地归档位置,而且可以配置远程归档位置。
如果既要在主节点(主数据库所在机器)上生成归档日志,又要将归档日志传递到备用节点(备用数据库所在机器),那么必须使用参数log_archive_dest_n配置归档位置。
该初始化参数与log_archive_dest和log_archive_duplex_dest具有以下区别:
1.初始化参数log_archive_dest_n可以配置本地归档位置和远程归档位置;初始化参数log_archive_dest和log_archive_duplex_dest只能配置本地归档位置;
2.初始化参数log_archive_dest_n可以配置多达10个归档位置,而初始化参数log_archive_dest和log_archive_duplex_dest最多只能配置两个归档位置;
3.初始化参数log_archive_dest_n不能与初始化参数log_archive_dest和log_archive_duplex_dest同时使用;
当使用初始化参数log_archive_dest_n配置本地归档位置时,需要使用LOGATION选项指定本地目录;当配置远程归档位置时,需要使用SERVICE选项指定到备用数据库的网络服务名;
当执行了以上语句之后,配置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 备份 恢复