资料编码 使用对象 编写部门
ORACLE技术支持、技术支援、生产
配套产品服务部
产品名称 产品版本 资料版本
Oracle 11g 数据库日常维护指导书
拟 制: 审 核: 审 核: 批 准:
李强
日 期: 日 期: 日 期: 日 期:
2010-03-31
华 为 技 术 有 限 公 司
版权所有 侵权必究
Oracle 11g数据库日常操作及维护指导书
内部公开
修订记录
日 期
修订版本
李强
作 者
初稿
描 述
2010-03-31 V1.0
2003-03-24 华为机密,未经许可不得扩散
第2页, 共47页
Oracle 11g数据库日常操作及维护指导书
内部公开
目录
第1章 oracle 11g数据库的启动和关闭.........................................................................................6 1.1 1.2
数据库的mount与no mount...................................................................................................7 数据库关闭............................................................................................................................7
第2章 Oracle 11g的spfile...............................................................................................................8 2.1 2.2 2.3
oracle如何使用spfile..............................................................................................................9 spfile的创建及修改................................................................................................................9 如何修改数据库参数..........................................................................................................11
第3章 Oracle 11g的自动内存管理..............................................................................................11 第4章 Oracle 11g的日志文件......................................................................................................14 第5章 管理Oracle 11g表空间......................................................................................................16 5.1 5.2
建立本地管理表空间..........................................................................................................17 本地管理表空间的优点......................................................................................................17
第6章 11g的undotablespace.........................................................................................................18 6.1 6.2
建立undotablespace..............................................................................................................18 影响undotablespace的关键初始化参数..............................................................................19
第7章 Oracle 11g的临时表空间..................................................................................................20 7.1 7.2 7.3
临时表空间的作用..............................................................................................................20 建立临时表空间..................................................................................................................21 如何扩展临时表空间..........................................................................................................21
第8章 oracle 11g的几个有用的新功能.......................................................................................22 8.1 11g 的Flashback 功能..........................................................................................................22 8.1.1 Flashback Database..........................................................................................................23
2003-03-24 华为机密,未经许可不得扩散
第3页, 共47页
Oracle 11g数据库日常操作及维护指导书
内部公开
8.1.2 Flashback DROP..................................................................................................................30 8.2
Data pump简介.....................................................................................................................36
第9章 oracle常见问题及处理.....................................................................................................38 9.1 9.1.1 9.1.2 9.2 9.2.1 9.2.2 9.3 9.4 9.5
得到oracle的错误说明及了解数据库告警信息.................................................................39 理解报警日志文件...........................................................................................................39 理解后台进程跟踪文件...................................................................................................39 如何维护redo logfile............................................................................................................40 如何增加redo logfile的大小.............................................................................................42 如何增加日志成员...........................................................................................................43 ORA-1652到ORA-1655......................................................................................................43 ORA-01555(snapshot too old).........................................................................................45 ORA-600错..........................................................................................................................46
2003-03-24 华为机密,未经许可不得扩散
第4页, 共47页
Oracle 11g数据库日常操作及维护指导书
内部公开
关键词:
Oracle 11g 维护 日常操作 摘 要:
本文介绍了Oracle 11g HA数据库维护的基础知识,包括数据库的启动安装、表空间管理、常见问题及处理等内容。
缩略语清单:
参考资料清单:
2003-03-24 华为机密,未经许可不得扩散
第5页, 共47页
Oracle 11g数据库日常操作及维护指导书
内部公开
Oracle 11g 数据库日常维护指导书
第1章 oracle 11g数据库的启动和关闭
oracle 11g在启动方式上同过去版本的Oracle数据库相同
正常启动数据库的选项是normal,这也是数据启动的缺省选项。以这种方式启动将启动一个实例(即instance,实例是指oracle的后台进程和SGA区),并把数据库装入(mount),然后打开数据库供用户使用。具体操作如下:
首先以oracle用户登入,su - oracle 1. 以nolog方式进入sqlplus
$sqlplus /nolog sql>
2. 再做为sysdba连入
SQL>conn / as sysdba 3. 用startup命令启动
SQL>startup
(若启动文件名不是ORACLE缺省的文件名,则启动时应带启动目录与文件名)
SQL>startup pfile= 2003-03-24 华为机密,未经许可不得扩散 第6页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 1.1 数据库的mount与no mount 数据库可以启动为mount状态,表示只启动实例并打开控制文件,但不打开数据库;或者以nomount启动,表示只启动数据库实例而不打开数据库。 1. mount启动 SQL>startup mount 该方式启动数据库的的用途一般为: 为数据文件更名; 增加、删除或改名事物日志文件; 使事物日志归档模式选项有效或失效; 进行完整数据库的恢复操作 2. nomount启动 SQL> startup nomount 该方式启动数据库的用途一般为: 创建一新的数据库 重建控制文件 1.2 数据库关闭 首先以sysdba连入: $sqlplus /nolog $SQL>conn / as sysdba 1. 正常关闭 SQL>shutdown normal(或只写shutdown) 这种方式下关闭数据库在关闭前检查所有的连接,并且发出命令后不允许再有新的连接,在等所有用户断开连接后关闭数据库。在此方式下关闭的数据库下次启动时不需要任何恢复过程。但根据经验,在生产环境 2003-03-24 华为机密,未经许可不得扩散 第7页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 下以这种方式关闭数据库需要很长时间,甚至根本关不掉数据库,因此一般不推荐使用这种方式关闭数据库。 2. 立即关闭 SQL>shutdown immediate; 这种方式下关闭数据库也不允许新的连接,但它并不等待已连接用户断开连接,而是由系统断开与用户的连接,然后回滚所有未提交的事务,接着关闭数据库。这种方式关闭数据库也算是正常关闭,下次启动时也不需要做恢复,而且这种方式关闭数据库通常比较快,因此建议关闭数据库时尽量使用这种方法。 3. 异常关闭 SQL>shutdown abort; 这种方式下关闭数据库系统不做任何的检查与回退操作而直接将数据库实例撤消并将数据文件关闭。用这种方法关闭数据库速度最快,但这种关闭方法不能保证数据库的一致性,下次启动数据库时有可能无法打开数据库,因此通常不建议使用这种方式关闭数据库。 第2章 Oracle 11g的spfile 在9i以前,Oracle使用pfile(即initsid.ora,初始化参数文件)存储初始化参数设置,这些参数在实例启动时被读取,任何修改需要重起实例才能生效;在9i以后,oracle引入了二进制文件spfile,使用spfile你可以使用ALTER SYSTEM或者ALTER SESSION来动态修改那些可动态修改的参数,所有更改可以立即生效,你可以选择使更改只应用于当前实例还是同时应用到spfile。这就使得所有对spfile的修改都可以通过命令行完成. 随着spfile的引入,我们可以在不用停机的情况下动态调整数据库SGA区及其它很多参数,大大提高了系统的可用性。同时使用命令行在线修改参数值,也减少了手工编辑初始化参数文件init.ora犯错误的可能。 2003-03-24 华为机密,未经许可不得扩散 第8页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 在Oracle 11g中,Oracle继续使用spfile作为参数文件。 2.1 oracle如何使用spfile 当使用不带pfile 子句的startup 命令时,Oracle 将从平台指定的默认位置上的服务器参数文件(SPFILE) 中读取初始化参数。Oracle查找SPFILE或者创通的init.ora的顺序是:在平台指定的默认位置上,Oracle首先查找名为spfile$ORACLE_SID.ora的文件,如果没有就查找spfile.ora文件,还没有的话,就找init$ORACLE_SID.ora文件。 在$ORACLE_BASE\\admin\\db_name\\spfile下,你很可能可以看到一个类似这样init.ora.192003215317]名字的文件,这就是初始化参数文件,只是跟上了时间戳。对于Oracle920,缺省的就使用spfile启动,但是这个spfile不是凭空而来,而是根据这个文件创建而来,你可以去掉这个长后缀,就是标准的pfile文件了。 注意: 对于UNIX 平台为服务器参数文件或文本初始化参数文件指定的默认位置目录是: $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 对于Windows NT 和Windows 2000 其位置是: $ORACLE_HOME\\database\\spfile$ORACLE_SID.ora 2.2 spfile的创建及修改 可以使用Create spfile命令基于数据库的当前参数设置创建一个SPFILE,可以使用ALTER SYSTEM或者ALTER SESSION来动态修改那些可动态修改的参数并且这些更改可以立即生效,你也可以使用ALTER SYSTEM的一个新选项SCOPE来选择使更改只应用于当前实例还是同时应用到spfile。SCOPE参数有三个可选值:MEMORY:只改变当前实例运行;SPFILE: 2003-03-24 华为机密,未经许可不得扩散 第9页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 只改变SPFILE的设置(如果修改的是静态参数,则必须指定SCOPE=SPFILE,否则将会报ORA-02095错。);BOTH:改变实例及SPFILE。 SPFILE支持多实例数据库(RAC),即所有的实例共用一个SPFILE。你可以通过查看SHOW PARAMETER spfile参数的值,如果value列返回空值,那么说明你在使用pfile;也可以通过下面的方法查看当前实例是否使用了SPFILE: SQL> select decode(count(*), 1, 'spfile', 'pfile' ) USED 2 from v$spparameter 3 where rownum=1 and isspecified='TRUE' 4 / USED ------------ spfile 在Oracle 11g中,我们还可以通过查询V$SPPARAMETER实时的得到所有当前使用的spfile的参数值,包括使用SCOPE=SPFILE参数的ALTER SYSTEM命令改变的参数。 SPFILE可以从某个PFILE文件创建: SQL>CREATE SPFILE[=’SPFILE-NAME’] FROM PFILE[=’PFILE-NAME’]; 使用不带文件名的pfile在缺省位置创建spfile,可以用create spfile from pfile;命令,此时系统根据缺省位置(Unix: $ORACLE_HOME/dbs; NT: $ORACLE_HOME\\database)的pfile在缺省位置创建名为spfile.ora的文件。创建SPFILE需要SYSDBA或者SYSOPER的权限。 我们也可以根据SPFILE文件创建PFILE文件: SQL>CREATE PFILE[=’PFILE-NAME’] FROM SPFILE[=’SPFILE-NAME’]; 2003-03-24 华为机密,未经许可不得扩散 第10页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 这时创建的pfile文件将是一个可编辑的文本文件。 2.3 如何修改数据库参数 可以使用如下命令修改数据库参数 如,修改SGA_TARGET为4000M: $sqlplus / as sysdba SQL> alter system set sga_target=4000M scope=spfile; 或 SQL> alter system set sga_target=4000M; 第一种方式将把spfile中sga_target的值修改为4000M,在下次启动数据库时生效; 第二种方式则既会修改spfile也会修改当前内存中的sga_garget值,立即生效。 第3章 Oracle 11g的自动内存管理 Oracle 的 9i/10g 中已经对内存管理逐步做了很大的简化,11g 则更进一步,引入了一个新的概念自动化内存管理(Automatic Memory Management,AMM) . 在Oracle 11g中,只需要设定两个参数就可以完成数据库的参数设置,包括PGA 和 SGA。这两个参数分别是: MEMORY_TARGET: Oracle 实际使用的最大内存值。 MEMORY_MAX_TARGET:MEMORY_TARGET所能设定的最大值,该参数为操作系统给Oracle数据库预留的内存大小。 如果使用的是 pfile,设定了 MEMORY_TARGET 而没有指定 2003-03-24 华为机密,未经许可不得扩散 第11页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 MEMORY_MAX_TARGET的值,则实例启动后 MEMORY_MAX_TARGET 的值与 MEMORY_TARGET 相等。如果 pfile 中指定了 MEMORY_MAX_TARGET 而没有指定 MEMORY_TARGET ,实例启动后 MEMORY_TARGET 为 0 。 AMM 在后台会启动一个内存管理(Memory Manager, mman)进程。 因为 AMM 的引入,Oracle 内存管理更加灵活多样。 组合出来有 5 种内存管理形式. 自动内存管理 自动共享内存管理 手工共享内存管理 自动 PGA 管理 手动 PGA 管理 z 自动内存管理(推荐使用) 默认安装的实例即是 AMM 方式,即在参数文件中设置memory_target和memory_max_target的大小,其它的内存参数都不设置,用缺省值。 z 自动共享内存管理(Automatic Shared Memory Management, ASMM) 这是 10g 引入的管理方式,要使用这种方式,需要设置初始化参数 MEMORY_TARGET=0 ,然后显式的指定 SGA_TARGET 的值。 SQL> alter system set sga_target=1024m scope=both; alter system set sga_target=1024m scope=both *ERROR at line 1:ORA-02097: parameter cannot be modified because specified value is invalid ORA-00839: SGA_TARGET cannot be modified to the specified value SQL> alter system set memory_target=0 scope=both; System altered.SQL> alter system set sga_target=1024m scope=both; 2003-03-24 华为机密,未经许可不得扩散 第12页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 System altered. SQL> 这两个参数的修改是有严格顺序的,如果不遵守倒也没问题,Oracle 会报告错误。 z 手工共享内存管理 这个又更加原始了一些。因为原始,所以新的初始化参数 SGA_TARGET 与 MEMORY_TARGET 都要设置为 0. 然后手工设定 share_pool_size 、db_cache_size 等 sga 参数。 z 自动 PGA 内存管理 如果使用 AMM , 则对 PGA 不用操心。如果要做到精细控制而切换到自动 PGA 内存管理模式,需要设定WORKAREA_SIZE_POLICY = AUTO(默认即为 AUTO),然后需要指定 PGA_AGGREGATE_TARGET 的值。如需要精确控制PGA,则 WORKAREA_SIZE_POLICY = MANUAL .(Thanks vongates) z 手动 PGA 管理 前提是 WORKAREA_SIZE_POLICY manual ,然后分别指定 SORT_AREA_SIZE 等 PGA 相关的参数。 这种方式是oracle 10g之前的内存管理方式,现在不建议使用。 AMM 的 如果初始化参数 LOCK_SGA = true ,则 AMM 是不可用的。 相关动态视图 V$MEMORY_DYNAMIC_COMPONENTS V$MEMORY_RESIZE_OPS 2003-03-24 华为机密,未经许可不得扩散 第13页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 第4章 Oracle 11g的日志文件 oracle11g 中对alert告警日志的存放位置做了更改,这是Oracle 11g的一个重大变化,需要重点掌握。 首先介绍2个新名词 Automatic Diagnostic Repository (ADR) 一个存放数据库诊断日志、跟踪文件的目录,称作ADR base,对应初始化参数DIAGNOSTIC_DEST,如果设置了ORACLE_BASE环境变量,DIAGNOSTIC_DEST等于ORACLE_BASE,如果没有设置RACLE_BASE,则等与ORACLE_HOME/log。 SQL> show parameter DIAGNOSTIC NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ diagnostic_dest string /oracle/oracle aelrt xml file 在oracle 11g中,alert文件的信息是以xml的文件格式存在的,另外提供了普通文本格式的alert文件。 这两份log文件的位置分别是V$DIAG_INFO中的Diag Alert 和Diag Trace 对应的目录。 sql>select name ,value from v$diag_info NAME VALUE ----------------------- ------------------------------------------------------------- Diag Enabled TRUE ADR Base /oracle/oracle ADR Home /oracle/oracle/diag/rdbms/rac/rac1 Diag Trace /oracle/oracle/diag/rdbms/ora11g/trace 2003-03-24 华为机密,未经许可不得扩散 第14页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 Diag Alert /oracle/oracle/diag/rdbms/ora11g/alert Diag Incident /oracle/oracle/diag/rdbms/ora11g/incident Diag Cdump /oracle/oracle/diag/rdbms/ora11g/cdump Health Monitor /oracle/oracle/diag/rdbms/ora11g/hm Default Trace File /oracle/oracle/diag/rdbms/ora11g/trace/rac1_ora_11028.trc Active Problem Count 0 Active Incident Count 0 这个是xml格式的alert log: cd /oracle/oracle/diag/rdbms/ora11g/alert [oracle@rac1 alert]$ ls log.xml 文本格式的alert: cd /oracle/oracle/diag/rdbms/ora11g/ trace/ [oracle@rac1 trace]$ ls alert_rac1.log alert_ora11g.log Alert文件记录了:关键错误(Critical errors (incidents) ),数据库管理操作,包括启动关闭数据库,创建、删除表空间, 物化视图刷新错误等信息,以及一般的ddl操作。 4.2.查看alert文件的方法 1.使用vi等文本编辑alert_SID.log (推荐使用) 2.使用工具adrci(此工具oracle 11g会缺省安装): 使用方法: 2003-03-24 华为机密,未经许可不得扩散 第15页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 $ adrci ADRCI: Release 11.1.0.6.0 - Beta on Mon Nov 12 04:34:47 2009 Copyright (c) 1982, 2009, Oracle. All rights reserved. ADR base = \"/oracle/oracle\" adrci> 显示alert日志的最后部分 Adrci>set home diag/rdbms/ora11g/ora11g2 adrci> show alert –tail 将alert日志的最后1000行输出到alert_1.txt文件中 Adrci>spool alert_1.txt Adrci>show alert –tail 1000 Adrci >spool off 查看帮助: Adrci>help 第5章 管理Oracle 11g表空间 从Oracle8i开始,Oracle推出了一种全新的表空间管理方式:本地管理表空间(Locally Managed Tablespace简称LMT)。从9i R2(oracle 9.2)开始,用户建立的表空间缺省都是本地管理表空间。 本地管理表空间,就是Oracle不再利用数据字典表来记录Oracle表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个 2003-03-24 华为机密,未经许可不得扩散 第16页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 位图(bitmap)区,在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,Oracle都会更新数据文件头部的这个记录,反映这个变化。 5.1 建立本地管理表空间 建立本地管理表空间的语法为: CREATE TABLESPACE tablespace_name DATAFILE 'full_path+datafile_name’SIZE XXM EXTENT MANAGEMENT LOCAL {AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } 关键字EXTENT MANAGEMENT LOCAL表示建立本地管理的表空间。 后一句{AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] }为可选项 ,表示此表空间的空间分配是AUTOALLOCATE 还是 UNIFORM.。若为AUTOALLOCATE,则表明让Oracle来决定区块(extent)的使用办法;若选择了UNIFORM,则还可以详细指定每个区块(extent)的大小,若不加指定,则为每个区使用1M大小。 如建立本地管理表空间user_local,数据文件为/dev/rlv_userlocal,每个区块大小统一为2M,则语法为: SQL>create tablespace user_local 2 datafile ‘/dev/rlv_userlocal’ size 200M 3 extent management local 4 uniform size 2M ; 5.2 本地管理表空间的优点 相对于传统的字典管理表空间,本地管理表空间主要提供了以下优点: 2003-03-24 华为机密,未经许可不得扩散 第17页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 1. 本地化管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间是经常出现的,当表空间里的区的使用状况发生改变时,数据字典的表的信息发生改变,而数据字典表的改变又会导致重新修改数据字典,这就引起了递归的空间管理。 2. 本地化管理的表空间避免了在数据字典相应表里面写入空闲空间、已使用空间的信息,从而减少了数据字典表的竞争,提高了空间管理的并发性 3. 表空间里的区的大小可以选择由Oracle系统来决定,或者由数据库管理员指定一个统一的大小,避免了字典表空间一直头疼的碎片问题。而且区(extent)的本地化管理自动跟踪表空间里的空闲块,减少了手工合并自由空间的需要。 4. 从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不再使用系统表空间里的回滚段。因为由数据字典来管理的话,它会把相关信息记在数据字典的表里,从而产生回滚信息。 由于这种表空间的以上特性,所以它支持在一个表空间里边进行更多的并发操作,并减少了对数据字典的依赖。 正是因为有以上优点, 9i以后(包括11g)oracle推荐建立表空间时尽量使用本地管理的表空间。 第6章 11g的undotablespace 6.1 建立undotablespace oracle严格保证数据库的读一致性,在11g中,使用Undo Tablespace来进行的自动重做管理。建立undotablespace的语法如下: create undotablespace tablespace_name datafile ‘fullpath+datafilename’ size XXM 2003-03-24 华为机密,未经许可不得扩散 第18页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 [autoextend on|off next XX maxsize XX]; 其中方括号内为可选项。 11g的undotablespace必须是本地管理的,同时,建立undotablespace时不能指定uniform size关键字,undotablespace的extent大小必须由oracle自动分配,不能手工指定。 一个数据库可以建立多个undotablespace,但每个instance同时只能使用一个undotablespace。可以用alter system命令来修改数据库当前的undotablespace。 如当前的undotablespace是undotbs1,现在新建一个undotbs2,然后将系统当前的undotablespace改为undotbs2的步骤为: SQL>create undo tablespace undotbs2 2 datafile ‘/dev/rlv_undotbs2’ size 100M; Tablespace created. SQL〉alter system set undo_tablespace='undotbs2' scope=both; System altered. 6.2 影响undotablespace的关键初始化参数 有几个初始化参数对11g中的undotablespace有决定性影响,这几个参数分别是 undo_management、undo_tablespace、undo_retention 和 undo_suppress_errors undo_management Undo_management参数决定是使用undo tablespace还是使用手工建立的回滚段。如果该参数为auto,则表示使用undo tablespace。为manual,表示使用手工管理回滚段,这时同 8i一样,也需要建立回滚表空间,且要建立回滚段。在11g中,该参数缺省值为auto。建议继续使用该缺省值, 2003-03-24 华为机密,未经许可不得扩散 第19页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 即使用undo tablespace,不用手工建立回滚段。如果该值被设为auto,任何试图建立回滚段的语句都会返回一个错误(在Undo_suppress_errors被设为false的情况下)。 undo_tablespace 该参数必须被设置为一个有效的undotablespace名称。当undo_management设为auto时,数据库将使用undo_tablespace指定的undotablespace。 undo_retention 该参数的单位为秒,当undo_management参数为auto时,undo_retention表示在undo_tablespace中保留多长时间的回滚(undo)信息,11g的flash_back功能同该值有关。该值设为多大同undo_tablespace 的大小有关,缺省值为10800,一般情况下已经够了,不建议修改该参数。 第7章 Oracle 11g的临时表空间 7.1 临时表空间的作用 oracle临时表空间的作用是当oracle要进行排序操作时(在复杂操作时如 joins, group by, order by, 建立索引及任何需要排序的操作),如果内存排序区的空间不够用,oracle将排序过程中产生的结果集保存在磁盘上的临时表空间中,然后将结果集返回给用户。 9 在内存排序空间不够时建立 9 由SMON在事务结束时回收 9 重作日志不保护临时段 2003-03-24 华为机密,未经许可不得扩散 第20页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 7.2 建立临时表空间 在oracle 11g中,可以用以下方式来建立临时表空间: SQL> CREATE TEMPORARY TABLESPACE temp 2 TEMPFILE '/dev/rlv_temp ' SIZE 100M 3 EXTENT MANAGEMENT LOCAL 4 UNIFORM SIZE 1M; 临时表空间有如下特点: 9 Tempfile 始终设为NOLOGGING 模式 9 无法使Tempfile 只读 9 无法重命名Tempfile 9 无法通过ALTER DATABASE 命令创建Tempfile 9 介质恢复不恢复Tempfile 9 BACKUP CONTROLFILE 不生成任何Tempfile 信息 9 CREATE CONTROLFILE 不能指定任何关于Tempfile 的信息 7.3 如何扩展临时表空间 在oracle 11g中,可以用如下方法扩展临时表空间: SQL>alter tablespace temp add tempfile ‘filename ’ size xxM; 或 SQL>ALTER DATABASE TEMPFILE 'file name' RESIZE xxM; 2003-03-24 华为机密,未经许可不得扩散 第21页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 第8章 oracle 11g的几个有用的新功能 oracle 11g同oracle 9i相比,在很多方面得到了加强。11g中还增加了些很实用的新功能,如flashback,data pump等。 8.1 11g 的Flashback 功能 Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动撤销管理表空间。 在Oracle 11g中,支持以下几种Flashback Database, Flashback Drop,Flashback Query和Flashback Table。 Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志。 比RMAN更快速和高效。 因此Flashback Database 可以看作是不完全恢复的替代技术。 但它也有某些: z Flashback Database 不能解决Media Failure, 这种错误RMAN恢复 仍是唯一选择 z 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时 不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来, 然后利用Flashback Database 执行剩下的Flashback Datbase。 z 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也 不能使用Flashback Database。 z 使用Flashback Database锁能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN。 Flashback Database 架构 Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志 和Flash Recovery Area。一旦数据库启 2003-03-24 华为机密,未经许可不得扩散 第22页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 用了Flashback Database, 则RVWR进程会启动,该进程会向Flash Recovery Area中写入Flashback Database Log, 这些日志包括的是数据块的 \" 前镜像(before image)\", 这也是Flashback Database 技术不完全恢复块的原因。 8.1.1 Flashback Database 数据库的Flashback Database功能缺省是关闭的,要想启用这个功能,就需要做如下配置。 z 配置Flash Recovery Area 要想使用Flashback Database, 必须使用Flash Recovery Area,因为Flashback Database Log只能保存在这里。 要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RAC,flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式. 启用Flash Recovery Area: SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH; SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST'/DBA/FB' SCOPE=BOTH; 禁用Flash Recovery Area: SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ; 对于Flash Recovery Area,Oracle 是这样建议的,flash recovery area 设置的越大,flashback database 的恢复能力就越强,因此建议flash recovery area 能够放的下所有的数据文件,增量备份,以及所有尚未备份的归档文件,当然还有它自己产生的flashback logs。 在数据库运行过程中,oracle 自动向该区域写入文件,当剩余空间不足 2003-03-24 华为机密,未经许可不得扩散 第23页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 15%的时候,它就会在alert 中增加警告,提示你空间不足。但此时不会影响数据库的正常运转,直到所有空间统统被用掉之后,oracle 首先尝试删除寻些过期的文件,冗余文件或备份过的文件,如果这些做完了,还是没有空闲空间的话,数据库就被hang 住了。 z 启用数据库Flashback 功能 1). 数据库启动到mount状态 SQL> startup mount; 2). 检查Flashback 功能, 缺省时功能是关闭的。 SQL> select name, current_scn, flashback_on from v$database; NAME CURRENT_SCN FLASHBACK_ON -------- ----------- ------------------ DBA 945715 NO 3).启动Flashback功能 SQL> alter database flashback on; 数据库已更改。 SQL> select name, current_scn, flashback_on from v$database; NAME CURRENT_SCN FLASHBACK_ON --------- ----------- ------------------ DBA 0 YES 4). 设置初始化参数:DB_FLASHBACK_RETENTION_TARGET: SQL>alter system set db_flashback_retention_target=1440 scope=both; 该参数用来控制flashback log 数据保留的时间,或者说,你希望flashback 2003-03-24 华为机密,未经许可不得扩散 第24页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 database 能够恢复的最早的时间点。默认值是1440,单位是minute,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%。 5). 启动数据库 SQL>alter database open; Flashback Database操作示例 做操作前应先备份数据库 z 检查是否启动了flash recovery area:- SQL> show parameter db_recovery_file NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest tring D:\\oracle/flash_recovery_area db_recovery_file_dest_size big integer 1G z 检查是否启用了归档- SQL> archive log list; 数据库日志模式 存档模式 自动存档 启用 存档终点 USE_DB_RECOVERY_FILE_DEST 最早的联机日志序列 9 2003-03-24 华为机密,未经许可不得扩散 第25页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 下一个存档日志序列 11 当前日志序列 11 z 检查是否启用了flashback database SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES 查询当前的scn- SQL> SELECT CURRENT_SCN FROM V$DATABASE; CURRENT_SCN ----------- 947921 z 查询当前的时间 SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual; TIME ----------------- 09-10-14 14:37:05 6. 删除表A SQL> select * from A; ID NAME ---------- ---------- 2003-03-24 华为机密,未经许可不得扩散 第26页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 1 tianle 2 dave SQL> drop table A; 表已删除。 SQL> commit; 7. Flashback Database 实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态。 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 209715200 bytes Fixed Size 1248116 bytes Variable Size 79692940 bytes Database Buffers 121634816 bytes Redo Buffers 7139328 bytes 数据库装载完毕。 2003-03-24 华为机密,未经许可不得扩散 第27页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 z 执行恢复: 分timestamp 或者SCN两种 SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd hh24:mi:ss'); 闪回完成。 或者: SQL> Flashback database to scn 947921; 闪回完成。 z 打开数据库: 在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库: 1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。 2). 先执行alter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。 假设以resetlogs方式打开: SQL> alter database open resetlogs; 数据库已更改。 2003-03-24 华为机密,未经许可不得扩散 第28页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 验证数据: SQL> select * from A; ID NAME ---------- ---------- 1 tianle 2 dave 和Flashback Database 相关的2个视图: V$database 这个视图可以查看是否启用了Flashback database功能 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES V$flashback_database_log Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少, 该视图就可以查看许多有用的信息。 Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复到最早的时点 Flashback_size: 记录了当前使用的Flash Recovery Area 空间的大小 Retention_target: 系统定义的策略 2003-03-24 华为机密,未经许可不得扩散 第29页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 Estimated_flashback_size: 根据策略对需要的空间大小的估计值 SQL> select oldest_flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh2 4:mi:ss') ot, retention_target rt,flashback_size fs, estimated_flashback_size es from v$flashback_database_log; OS OT RT FS ES ---------- ----------------- ---------- ---------- ---------- 946088 09-10-14 13:49:59 1440 16384000 350920704 8.1.2 Flashback DROP Flashback Drop 是从Oracle 10g 开始出现的, 用于恢复用户误删除的对象(包括表,索引等), 这个技术依赖于Tablespace Recycle Bin(表空间回收站),这个功能和windows的回收站非常类似。 Flashback 不支持sys用户. system表空间下的对象,也不能从回收站里拿到。故使用SYS 或者SYSTEM用户登陆时, show recyclebin 为空。 1. Tablespace Recycle Bin 从Oracle 10g 开始, 每个表空间都会有一个叫作回收站的逻辑区域,当用户执行drop命令时, 被删除的表和表的关联对象( 包括索引, 约束,触发器,LOB段,LOB index 段) 不会被物理删除, 这些对象先转移到回收站中,这就给用户提供了一个恢复的可能。 初始化参数recyclebin 用于控制是否启用recyclebin功能,缺省是ON, 可以使用OFF关闭。 SQL> show parameter recycle NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ buffer_pool_recycle string db_recycle_cache_size big integer 0 2003-03-24 华为机密,未经许可不得扩散 第30页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 recyclebin string on 禁用该功能: SQL> alter system set recyclebin=off; SQL> alter system set recyclebin=on; SQL> alter session set recyclebin=off; SQL> alter session set recyclebin=on; 禁用后删除的对象将直接删除,不会写到Recycle中,当然在删除时,指定purge 参数,表也将直接删除,不会写到recyclebin中。 SQL> drop table name purge; 查看recyclebin中的对象列表: SQL> select * from A; ID ---------- 1 2 3 SQL> drop table A; 表已删除。 SQL> show recyclebin ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ----------------------------- ------------ ------------------- 2003-03-24 华为机密,未经许可不得扩散 第31页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 A BIN$RWXQQcTPRde0ws4h9ewJcg=$0 TABLE 2009-10-15:12:44:33 查看recyclebin中对象: SQL> select original_name,object_name from recyclebin; ORIGINAL_NAME OBJECT_NAME -------------------------------- ------------------------------ A BIN$RWXQQcTPRde0ws4h9ewJcg==$0 查看recyblebin对象里的内容: SQL> select * from \"BIN$RWXQQcTPRde0ws4h9ewJcg==$0\"; ID ---------- 1 2 3 表空间的Recycle Bin 区域只是一个逻辑区域,而不是从表空间上物理的划出一块区域固定用于回收站,因此Recycle Bin是和普通对象共用表空间的存储区域,或者说是Recycle Bin的对象要和普通对象抢夺存储空间。当发生空间不够时,Oracle会按照先入先出的顺序覆盖Recycle Bin中的对象。也可以手动的删除Recycle Bin占用的空间。 Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象 Purge recyclebin: 删除当前用户的Recycle Bin中的对象 Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限 2003-03-24 华为机密,未经许可不得扩散 第32页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 Drop table table_name purge: 删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。 Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引是可以重建的。 2. Flashback Drop 实例操作 SQL> select original_name,object_name from recyclebin; ORIGINAL_NAME OBJECT_NAME -------------------------------- ------------------------------ A BIN$RWXQQcTPRde0ws4h9ewJcg==$0 SQL> flashback table a to before drop; 闪回完成。 SQL> select * from a; ID ---------- 1 2 3 当我们删除表A后,在新建表A,这时在恢复的时候就会报错,此时我们在闪回时,对表重命名就可以了: SQL> drop table a; 表已删除。 SQL> create table a(id number(1)); 2003-03-24 华为机密,未经许可不得扩散 第33页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 表已创建。 SQL> flashback table a to before drop ; flashback table a to before drop 第 1 行出现错误: ORA-38312: 原始名称已被现有对象使用 SQL> flashback table a to before drop rename to B; 闪回完成。 SQL> select * from B; ID ---------- 1 2 3 当我们删除表A,在新建表A,在删除它,这是在Recycle Bin中就会有2个相同的表明,此时恢复我们就要指定object_name才行. SQL> select * from B; ID ---------- 1 2 3 SQL> drop table B; 表已删除。 2003-03-24 华为机密,未经许可不得扩散 第34页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 SQL> create table B(name varchar(20)); 表已创建。 SQL> drop table B; 表已删除。 SQL> select original_name,object_name from recyclebin; ORIGINAL_NAME OBJECT_NAME -------------------------------- ------------------------------ IN$vYuv+g9fTi2exYP9X2048Q==$0 BIN$geQ9+NekSjuRvzG+TqDVWw==$0 SQL> flashback table \"BIN$vYuv+g9fTi2exYP9X2048Q==$0\" to before drop; 闪回完成。 SQL> select * from B; ID ---------- 1 2 3 一旦完成闪回恢复,Recycle Bin中的对象就消失了. Flashback Drop 需要注意的地方: z 只能用于非系统表空间和本地管理的表空间 z 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。 z 对象能否恢复成功,取决与对象空间是否被覆盖重用。 z 当删除表时,信赖于该表的物化视图也会同时删除,但是由于物化 视图并不会被放入recycle bin,因此当你执行flashback table to 2003-03-24 华为机密,未经许可不得扩散 第35页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 before drop 时,也不能恢复依赖其的物化视图,需要dba 手工介入重新创建。 z 对于Recycle Bin中的对象,只支持查询. 8.2 Data pump简介 Oracle 11g的Data Pump技术能够在不同的Oracle数据库间高速导入导出数据,对数据库做逻辑备份和恢复。Oracle建议使用这个工具来代替Oracle过去的exp/imp工具。 Oracle的Data Pump是通过一个PL/SQL包来实现的:DBMS_DataPump(也叫Data Pump API).Data Pump使用直接路径装载和外部表机制进行数据的移动. Data Pump使用DBMS_METADATA PL/Sql包进行包括ETL过程在内的所有的数据库对象操作. Data Pump 是Oracle一些其它关键特性(如基于流的复制、逻辑Standby等)的基础。 关键概念 Master Table Master Table(MT)是Data Pump技术的核心.Master Table 用来保存整个过程中的细节信息(也可以说是一些元数据信息).有了MT,导出或者导入的重启动才变为可能.这些细节信息包括: 产生Job状态的报告 重新启动Job 定位在Dump文件中的所有的对象. 主表在进行当前导出或者导入的操作的用户模式中被创建.该用户必须要有足够空间. 主表的名字和创建它的Job名字相同.这也就是说,你不能显式的指定一个和现有的表或者视图重名的Data Pump Job. 导出的时候,主表被创建,并在完成的时候写到Dump文件中.在启动导入的时候,主表从Dump文件集中载入到数据库中, 并用来控制操作的 2003-03-24 华为机密,未经许可不得扩散 第36页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 顺序.主表也可以用一些参数来进行初始化操作.要注意的是主表不能跨文件存储.所以,指定的Dump 文件的大小至少要能够容纳得下MT. 主表依如下情况或被保留或者删除: Job成功完成,MT被删除. 如果Job是使用STOP_JOB交互命令停掉的,MT将被保留以用来重启动Job. 如果Job是使用KILL_JOB交互命令Kill掉的,MT将被删除,并且Job不能重新启动. 如果Job意外中止,MT总是被保留. Master Process 主进程 每一个导出或者导入的Job都会产生一个主进程. 主进程控制整个Job,包括和客户端通信,创建并控制worker 进程, 并进行日志操作. Data Pump导出程序expdp能够按照几种方式进行,其中包括数据库、对象模式、表和表空间. 使用create directory语句创建目录对象 SQL>create directory dump_dir as ‘/oracle/datapump/dumps’ SQL>create directory log_dir as ‘/oracle/datapump/logs’ 将目录对设置为公共读写 SQL>grant read,write on directory dump_dir to public; 授权 SQL>grant read,write on directory dump_dir to scott z 数据库导出方式 2003-03-24 华为机密,未经许可不得扩散 第37页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 $expdp system/passwd directory=back dumpfile=alldb.dmp full=y z 对象模式导出方式 $expdp scott/tiger directory=back dumpfile=scott.dmp schemas=scott z 表导出方式 $expdp scott/tiger directory=back dumpfile=tables.dmp nologifle=y content=metadata_only 参数说明 nologfile:表示不会操作日志写入磁盘 content=metadata_only:表示仅是导出元数据,而不会导出表中的数据,如果content=data_only则恰好相反,默认情况下二者全部导出 z 表空间导出方式 $expdp system/passwd dumpifle=backup:users_ts.dmp logifle=backup:users_ts.log tablespaces=users; Data Pump导入程序impdp同样可以按照全部、对象、表和表空间四种方式。 $impdp system/passwd full=y dumpfile=backup:alldb.dmp nologfile=y sqlfile=backup:alldb.sql 参数sqlfile=backup:alldb.sql表示将元数据(DDL数据)写入到指定目录文件中。Backup是一个数据库目录对象 第9章 oracle常见问题及处理 在数据库的日常维护工作中,经常会碰到各种各样的问题,以下是一些常见问题的原因分析及解决办法。 2003-03-24 华为机密,未经许可不得扩散 第38页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 9.1 得到oracle的错误说明及了解数据库告警信息 oracle提供了一个实用程序oerr,利用它可以得到oracle错误信息的说明。如碰到ORA-01653错,则可以用oerr来查询详细信息。 $oerr ora 01653 结果如下: 01653, 00000, \"unable to extend table %s.%s by %s in tablespace %s\" // *Cause: Failed to allocate an extent for table segment in tablespace. // *Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more // files to the tablespace indicated. 9.1.1 理解报警日志文件 警告日志,是Oracle使用的一种基本警告机制,其作用是提醒数据库管理员注意数据库的错误、异常环境以及某些永久性动作(例如DDL导致的数据库结构改变等),每个事件都潜在地影响着数据库性能和可用性,其日期和时间都被记录在案,每个事件的起止时间也有相应地入口提供标示。一旦数据库产生了问题,警告日志是第一个可以找到相关信息的地方。报警日志文件一般记载了数据库的启动/关闭信息,归档信息,备份信息,恢复信息,常见错误信息,部分数据库修改记录等。一般令名规则为 报警日志文件的路径是根据初始化参数background_dump_dest来决定的,如该参数值为 D:\\Oracle\\admin\est\\bdump,那么,你就可以在该路径下找到该文件 9.1.2 理解后台进程跟踪文件 跟踪文件在异常事件发生时由Oracle创建,通常伴随着警告日志中的错误信息而产生。警告日志包含了错误事件的概述,而随之产生的跟踪文 2003-03-24 华为机密,未经许可不得扩散 第39页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 件则记录了该错误事件的详细信息(如果错误事件很重要,就应记录其详细信息)。后台进程的跟踪文件名通常具有下列格式: 后台进程跟踪文件的路径与报警日志文件的路径一致,如在数据库需要恢复的时候,报警日志文件中常有这样的语句: Errors in file D:\\Oracle\\admin\est\\bdump\estDBW0.TRC: ORA-01157: cannot identify/lock data file 1 - see DBWR trace file 通过提示的DBWR跟踪文件,可以查询到更详细的信息。 9.2 如何维护redo logfile Oracle的联机日志文件(Online redo logfile)循环记录了数据库所有的事务(transaction),它的大小、个数和存储位置对数据库性能和恢复有重要影响。它一般由大小相同的一组文件构成。我们可以查看数据库视图v$logfile知道它的个数和存储位置。 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ------------------------------------------------ 1 ONLINE /opt/oracle/product/9.2/oradata/wapgw/redo01.log 2 ONLINE /opt/oracle/product/9.2/oradata/wapgw/redo02.log 2003-03-24 华为机密,未经许可不得扩散 第40页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 3 ONLINE /opt/oracle/product/9.2/oradata/wapgw/redo03.log 查看数据库视图v$log知道它当前的状态。 SQL> select group#,status from v$log; 如下所示: GROUP# STATUS ------- -------------- 1 INACTIVE 2 CURRENT 3 INACTIVE 一个时间只有一组logfile group是工作状态(current), redo logfile满了后会自动切换到下一个logfile group, 如果数据库是归档方式同时写到归档日志文件。这些文件不能用常规的文本编辑器查看, 它以特定的格式存放, 只有数据库或者专门的软件可以看懂它(如logminer)。redo logfile的最大数目是在创建数据库时指明的。如果你想知道当前数据库redo logfile的最大数值是多少,重新生成控制文件, 就可以知道。 SQL>alter database backup controlfile to trace; 这条语句会在$ORACLE_BASE/admin/dbname/udump/路径下生成当前时间的一个*.trc文件, 也就是数据库的控制文件, 用文本编辑器, 即可看到数据库创建时用的一些参数, 包括redo logfile的最大数(maxlogfiles)。 如果用ORACLE的安装向导创建的典型数据库, 它的redo logfile大小为500K, 这基本上是不能满足典型的OLTP应用的, 在数据库日志文件(alert_orasid.log)里会记录着频繁的log switch。ORACLE推荐log switch时间最好在15--30分钟之间, 所以redo logfile的大小由数据库DML操作数据的大小决定其最佳大小。 redo logfile最好有多个存储位置, 多组成员, 使数据库恢复时有更多的选择。 2003-03-24 华为机密,未经许可不得扩散 第41页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 9.2.1 如何增加redo logfile的大小 我们经常会发现当前数据库日志文件里log switch的时间偏大或者偏小,因此可能需要调整redo logfile的大小。ORACLE提供了在数据库联机状态来改变redo logfile大小的方法。 假如原来有3个小的redo log file, 下面是UNIX环境下的一个例子: 1: 往数据库添加三个大的redo logfile SQL>ALTER DATABASE ADD LOGFILE GROUP 4 ('/dev/rlv_redo41', '/dev/rlv_/redo42') size 100M reuse; SQL>ALTER DATABASE ADD LOGFILE GROUP 5 ('/dev/rlv_redo51', '/dev/rlv_redo52') size 100M reuse; SQL>ALTER DATABASE ADD LOGFILE GROUP 6 ('/dev/rlv_redo61', '/dev/rlv_redo62') size 100M reuse; 2: 手工地做log switch, 使新建的redo logfile起作用. SQL>alter system switch logfile; 此操作可以执行一到几次, 使旧的redo logfile成inactive状态. 3: 删除原来旧的redo logfile. SQL>alter database drop logfile group 1; SQL>alter database drop logfile group 2; SQL>alter database drop logfile group 3; 2003-03-24 华为机密,未经许可不得扩散 第42页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 9.2.2 如何增加日志成员 oracle强烈建议每个数据库有多组日志,每组日志至少有2个成员。但有时在建立数据库时每个日志组仅建了一个成员,对生产系统来讲,这是很危险的。因为一旦因为某种原因使某个日志文件损坏,oracle数据库会down机,且必然会发生数据丢失。为避免这种情况的发生,需要给日志组添加日志成员。 可以用如下语法在线给日志组1、2、3各增加一个成员: ALTER DATABASE ADD LOGFILE MEMBER '/dev/rlv_redo13' TO GROUP 1, '/dev/rlv_redo23' TO GROUP 2, '/dev/rlv_redo33' TO GROUP 3; (给日志组增加成员时不需要指定rodo logfile的大小,oracle会自动将新成员的大小建成同原成员一样大。) 还可以用如下语法删除某个日志组的成员:(各个日志组成员的数量可以不相同) alter database drop logfile member ‘/dev/rlv_redo13’ ; (注意,日志文件是oracle数据库最重要的物理文件之一,如果某组的所有成员都已损坏或被删除,丢失数据是不可避免的。因此除非确实有需要,否则请不要做任何删除redo logfile或redolog group的操作。) 9.3 ORA-1652到ORA-1655 ora-165x错误是我们经常会碰到的错误,以下对这种错误进行详细分析。ORA-165X错的原因 2003-03-24 华为机密,未经许可不得扩散 第43页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 简单地说, ORA-165X错误信息是指表空间没有足够的空间可分配,因此报错。这些错误包括ora-1652、ora-1653、ora-16和ora-1655。 ORA-165X错误可能是日常维护中最常见的ORACLE错误信息,解决这些错误时需要了解问题产生的环境和条件。实际上, ORACLE将表空间作为逻辑结构单元;而表空间的物理结构是数据文件。数据文件在磁盘上物理地创建,表空间中的所有对象也存于磁盘。为了给表空间增加空间,必须增加数据文件或增加原有数据库文件的大小。当产生O R A - 1 6 5 X错误信息时,问题可能在于特定表空间缺少可分配的空间。错误信息提供两个参数: S I Z E,提示维护人员系统没有找到Oracle块的数量;而TABLESPACE则提示数据库管理员需要表空间的地方。Oracle总是尽量分配连续空间。尽管有时表空间可能有足够的可分配空间,但如果这些空间是不连续的,错误仍将发生。 有时我们在对某表进行插入操作,却得到其它表空间(即不属于被插入表的表空间)的空间不足错误,这是因为在做插入等操作时可能会使用到系统的数据字典、回滚段、临时段等。以下对象有可能发生空间不足错误。 (1) 数据字典 如果数据字典对象需要扩展但S Y S T E M表空间又没有足够空间可用, O R A _ 1 6 5 x错误就会发生。这种情况下在ORA_165x 错误前先出现O R A _ 6 0 4错误。例如,创建一个表以扩展t a b $而S Y S T E M表空间没有足够的空间,创建的表将得到错误O R A - 6 0 4和O R A _ 1 6 5 x。 (2) 表和索引 如果需要额外空间以满足一个对象的插入或更改,将发生O R A _ 1 6 5 x错误。如果这个错误产生于表或索引的创建时,指定的存储参数或表空间缺省存储参数需要修改。 (3) 回滚段 如果错误发生在回滚段, O R A - 1 6 5 0错误总是在O R A - 1 6 5 x错误之前发生。O R A - 1 6 5 0指出不能扩展回滚段,O R A - 1 6 5 x错误说明了其原因是缺少空间。O R A - 1 6 5 0错误信息如下: ORA-1650 \"unable to extend rollback segment\" 2003-03-24 华为机密,未经许可不得扩散 第44页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 (4) 临时段 临时段是Oracle内核创建的,代表用户完成一个排序操作。用户执行的操作(如创建一个索引,执行有ORDER BY字段的查询或较长的连接语句)时有可能导致临时段(通常是建在临时表空间上)不足。 9.4 ORA-01555(snapshot too old) 在电信行业这种数据量巨大的环境中,ora-01555错是一个很常见的错误。这个错误使得应用失败。例如,这一错误可能停止一个在深夜运行的批处理任务,随后也使依赖于该任务的其他任务失败。这使用户不能及时得到所需的信息(如报表没打印出来、数据未被导出等等)。尽管这一错误通常发生在大任务上,但在小任务上也会发生。 ORA-1555通常是一个偶然出现的错误。有时在发生了该错误以后,重新运行该任务就有可能不再碰到类似的错误。这个错误最麻烦的是它并不会立刻发生,运行时间长的任务在错误失败以前可能已经运行了一段时间了(可能几个小时)。只是简单地重新运行该任务并不能保证它能成功,可能在运行了一段时间以后仍然失败。 ORA-1555错的根本原因是因为oracle要保证读一致性。读一致性是指当有多个用户对一个数据块内的行进行修改时,这些块变“脏”或处于变化之中直到被确认。在被确认以前,它们对事务中的所有语句都是可见的,但是对别的事务或语句而言是不可见的。一旦确认以后,对所有后继的事务或语句就都是可见的了。但在事务被确认前的语句不能看到修改,因为这些修改还未发生。 例如,事务T 1(如对某大表的exp操作)在2 2 :0 0开始而事务T 2(如对同一大表的update操作)在2 2 :0 1时开始,因为T 1需遍历一个很大的表,其读取要花很长的时间,而T 2可能对同一个表中的数据进行基于索引的更新操作。这样, T2可能在几秒钟之内完成,而T 1可能要运行很长时间,假定4 0分钟。当T 1到达T 2做过修改的地方时(根据当前的S C N时间戳可以识别出新作的改变),尽管T 2所进行的写已经被确认,但为了保证读一致性,它不会读到修改后的数据,它只访问在2 2 :0 0时的数据,在2 2 :0 1时所做的改变不能被读取 。T 1从回滚段中读取改变前的数据以保证读一致性。但因为事务T2已经 2003-03-24 华为机密,未经许可不得扩散 第45页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 提交,T2事务使用的回滚段oracle认为已经可以重新利用,当回滚段太少或事务较密集时,oracle有可能会用新事务覆盖掉原来T2事务的回滚段,这时T1事务读到被T2修改过的数据时,再从回滚段中就无法找到修改前的数据,这时就会报ORA-1555,snapshot too old错。 当然,还有一些其它的原因会导致ORA-1555错,但基本原理类似,在9i(包括11g)之后,因为引入了undotablespace,只要把undotablespace设的足够大,并把undo_retention设的足够大(大于完成大事务所需的时间),就有可能彻底解决ORA-1555错(但将undotablespace设的太大会引起系统性能下降)。 9.5 ORA-600错 ORA-600是比较严重的错误,它属于oracle内部错误,它会在警告日志和跟踪文件中记录错误信息ORA-600,通常数据库还会生成一个core文件或trace文件。如下所示: Errors in file C:\\oracle\\ora81\\RDBMS\race\\stomedSMON.TRC: ORA-00600: internal error code, arguments: [4136], [0], [], [], [], [], [], [] ORACLE Instance stomed (pid = 6) - Error 600 encountered while recovering transaction (2, 48). Wed Feb 25 12::38 2004 Errors in file C:\\oracle\\ora81\\RDBMS\race\\stomedSMON.TRC: ORA-00600: internal error code, arguments: [4136], [0], [], [], [], [], [], [] ORA-600是在基本的正常检查失败时(如企图读取SYS.FET$中不存在的盘区时),由Oracle内核产生的一种内部错误。与其他Oracle错误不同的是,任何两个ORA-600错误不可能指向同一个错误状态。ORA-600表示了各种不同的内部错误。另外, ORA-600错误还可能伴随着其他ORA错误而产生(例如,当系统遇到坏块时,产生ORA-1578错误的同时也会产生ORA-600)。显示ORA-600错误时通常后面带有一组方括号括起来的参数(argument)。根据实际的内部错误,这些参数代表不同的事件。此外,Oracle版本不同,这些参数代表的事件也不同。但是并没有专门文 2003-03-24 华为机密,未经许可不得扩散 第46页, 共47页 Oracle 11g数据库日常操作及维护指导书 内部公开 档对此进行说明,通常只能要求Oracle技术支持部的资深分析员进行解释。一般来说,第一个参数提供了实际错误信息(例如1579代表块中断错误),而其他参数提供相关其他信息(例如块中断错误中,显示Oracle想要读的块号和实际读的块号)。 一般而言, ORA-600错误会导致系统生成一个或多个跟踪文件,这些跟踪文件提供了重要的诊断信息。在处理此类错误前,应该尽可能对发生的错误多一些了解,比如: 9 每当错误发生时,其准确的信息或参数(尤其是第一个参数)是什 么。 9 在错误期间,系统是否不再反应。 9 在错误期间,系统性能是否受到了负面的影响 9 错误期间有多少活动的工作(活动的会话或进程)。 9 这些活动的工作所运行的是哪种DML /DDL语句。 9 在错误期间有没有后台或前台进程死亡。 9 是否发生了任何不可知的硬件或操作系统故障(可能需要一份OS的 所有补丁程序的记录)。 9 系统生成了多少个跟踪文件(这些文件有可能必须被送交Oracle技 术支持部的)。 通常情况下,ora-600错应该提交给oracle公司进行分析,但很多时候为了加快处理时间,我们也可以自己对ora-600错进行分析。分析的方法是将ora-600的错误信息放到metalink(metalink.oracle.com是oracle的技术支持网站,上面有大量的文档和oracle问题处理案例,并提供了强大的查询功能)上进行搜索。如在metalink上输入: ORA-00600 [4136], [0], [], [], [], [], [], [] 然后查询,一般能查到很多类似错误的说明、案例等,根据这些信息,我们也有可能找出发生错误的真正原因,并得到正确的解决方案。 2003-03-24 华为机密,未经许可不得扩散 第47页, 共47页 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务