Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1170403
  • 博文数量: 245
  • 博客积分: 10185
  • 博客等级: 上将
  • 技术积分: 2744
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-30 17:07
文章分类

全部博文(245)

文章存档

2015年(1)

2014年(1)

2013年(1)

2012年(1)

2011年(37)

2010年(20)

2009年(14)

2008年(38)

2007年(88)

2006年(44)

分类: Oracle

2015-02-16 12:58:50

1.      ORACLE体系结构组成 

Oracle server=Oracle instance+Oracle database

Oracle instance=Memory(SGA+PGA)+Background Process

SGA: startup nomount时就被分配,写在参数文件里。

SGA_MAX_Size --------SGA区最大大小

  颗粒:连续的虚拟内存分配。颗粒大小取决于SGA_MAX_SIZE的大小,若SGA_MAX_SIZE<128M,颗粒为4M,否则颗粒为16M.

  SGA启动时,每个组成部分会要求尽可能多的颗粒。固定的SGA至少会要求3个颗粒 (包括redo buffers1个颗粒,Database Buffer Cache 1个,Share poor1个颗粒)

Shared Pool :用于存放最近执行的SQl 代码和最近的数据定义,包含Library CacheData Dictionary Cache,大小由shared_pool_size决定,

Library Cache(存放statement text, SQl 解析代码和解析计划,以避免表述被重解析

? Stores information about the most recently used SQL and PL/SQL statements

? Enables the sharing of commonly used statements

? Is managed by a least recently used (LRU) algorithm

? Consists of two structures:

– Shared SQL area

– Shared PL/SQL area

? Size determined by the Shared Pool sizing

Data Dictionary Cache:包含从数据字典表对表,列,权限的定义.

Database Buffer Cache:包含3个独立的子cache,统计信息由v$DB_CACHE_ADVICE

DB_CACHE_SIZE: 定义标准Block默认的Buffer Cache; 至少一个颗粒。

 

buffer cache分为default,keep,recycle.

 


 

DB_KEEP_CACHE_SIZE: 对应用于存放经常存放的数据的缓冲池大小。

DB_RECYCLE_CACHE_SIZE: 用于存放一次性数据缓冲池大小。

 

Redo Log Buffer :记录数据库Block的改变,主要用于恢复,大小由Log_Buffer决定。

Large Pool:用于分担Shared Pool池负担,主要用于RMAN备份中和共享服务器模式下!不使用LRU List,大小由Large_Pool_Size决定。

Java Pool: 存放Java命令和代码,大小由Java_Pool_Size决定。

共享服务器模式:多个客户机连接共享一个已分配数据库的共享池,如果需要并行连接到数据库并有效使用系统资源的用户较多,请使用该模式,此时将启用oracle共享服务器模式。

专用服务器模式:数据库将为每一个客户机连接分配专用资源,当预期客户机连接总数较小或客户机向数据库发出的请求连续时间较长,使用该模式。

 

PGA:用户独占,有用户连接启动服务器进程时分配,包括4个部分:

1)用户会话信息

2)用户curse信息

3)排序区大小(每一个用户连接,就分配一个排序区)

4)堆栈信息

后台进程:

DBWR会触发LGWR,但DBWRLGWR之间互相独立,无绝对的先后顺序。

要深刻理解5类后台发生的条件及所作的操作

Checkpoint发生时所作的操作:

? DBWn writes a number of dirty database buffers which are covered by the log that is being checkpointedto the data files.

? The checkpoint background process CKPT updates the control file to reflect that it has completed a checkpoint successfully. If the checkpoint is caused by a log switch

CKPT also updates the headers of the data files.

? Checkpoints can occur for all data files in the database or only for specific data files.

Checkpoint发生的条件:

? 日志切换时 switch logfile

? 实例以normaltransactionalor immediate选项关闭时。

? When forced by setting the FAST_START_MTTR_TARGET initialization parameter

? When manually requested by the database administrator

? When the ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP]command causes checkpointing on specific data files

 

SCN is the System Change Number

 sequentially assigned by LGWR  to indicate the “time” of a commitrollback or checkpoint

 

The full checkpoint is only done:

?  ALTER SYSTEM CHECKPOINT

?  SHUTDOWN (except abort)

 

A log switch does not perform a full checkpoint.

http://www.itpub.net/showthread.php?s=&threadid=612858&perpage=10&pagenumber=1

 

buffer 内容 被写到磁盘,仅仅表示该 buffer 可以被 覆盖(其他进程可以pin住这个buffer block 进来),并不表示这个buffer里面的数据就没了, 至于被踢走更是一个模糊的说法。

--------------------------------------------------------------------------

所有Dirty Buffer,首先要被移动到Dirty List上去,然后从Dirty List上被写出。一旦Buffer变得Dirty,在被写出之前都不能被重用。也就是不存在Hot/Cold之说了。Hot/Cold是针对LRU List,并非Dirty List

 加深(有价值的)文章

1)   oracle体系结构介绍.pdf(en).

2)   redo logs and recovery.pptcheckpoint constructor.ppt(redologrollforward&back最透彻的)

3ITPUB第十期

4) oracle内存分配与调整.pdf(by biti_rainy)

5) oracle中需要牢牢记住的几个进程触发条件

 

2.  Getting started with the oracle server

 

1)use DBCA create/configure/del/manage  DB

the usage of templates of dbca: 创建好数据库模板后,下次用DBCA时会出现以前创建的模板!

Sys,system都是在创建数据库时自动创建,并被赋予了DBA角色(记住,sysdba,sysper是权限,dba是角色),它们的初始密码分别是change_on_install和manager。

----------------------------------------------------------------------------

Ora-12560错误原因(更多地出现在windows主机上):

一台host上安装了多个DB,但连接时没有指定,可用set oracle_sid=***

----------------------------------------------------------------------------

Oracle OEM: 为DBA提供了一个集中管理多个oracle数据库节点的图形工具。

创建OEM的步骤:

1)    在客户端利用Enterprise Manager Configuration Assitant创建repository资料档案库(创建过程中会让你在server端指定新建一个用户,一个OEM_reposity表空间)。

2)    在客户端主机上,启动相关服务(ManagementServer,Agent)

3)    在客户端启动OEM控制台

以sysman/oem_temp用户登陆(sysman用户是默认存在于客户端的图形化工具里的,系统此时会提醒你修改sysman密码。

说明:也可以选择独立启动进入OEM,用这种方法就不需要上面的步骤。但此时的OEM的功能会少很多。

4)连接server端数据库,输入你在创建数据库时新建的用户名及密码或以sys用户登陆。

说明:建好OEM后又修改了sys密码,可能需要重建repository。

 

                          3。管理oracle实例

 

spfilepfile的互相创建

spfile是二进制文件,oracle推荐,RMAN已把spfile纳入备份体系中。

create spfile from pfile(若该命令不能运行,证明instance由spfile启动)

修改静态参数时,又想从spfile启动,可以:

1)    shutdown  db

2)    edit pfile

3)    create spfile from pfile

4)  startup

应经常同步pfilespfile

(动态)修改spfile的参数

alter system set undo_tablespace=undo2

(不加scope表示就是both,默认也是both,如果只想在memory or spfile两者中选其一,就需要在scope里说明.

ALTER SYSTEM RESET undo_suppress_errors SCOPE=BOTH SID=’*’;删除或重设参数

Order of precedence:

spfileSID.ora> Default SPFILE> initSID.ora> Default PFILE

DB启动的3个步骤

1)       nomount( 读spfile/pfile,初始化SGA)

2)       mount(读控制文件)

3)       open(读控制文件描述的各个文件并检查一致性)

session:一个用户的连接

transaction:事务,一次修改或select。

Alert_SID.log(对应background_dump_dest)实例的监控调试文件

User Trace Files(对应USER_DUMP_DEST),大小由MAX_DUMP_FILE_SIZE

Enabling or Disabling User Tracing

会话级:

ALTER SESSION SET SQL_TRACE = TRUE

dbms_system.SET_SQL_TRACE_IN_SESSION

?事例级 在参数文件里设置:SQL_TRACE = TRUE

加深(有价值的)文章: pfilespfile文件(by eygle)




4. 创建数据库

 

数据库管理的认证方式(需要查找文章仔细看):

1OS认证

2password文件(参数文件只保存sys用户的口令,其他用户包括system用户的口令都保存在数据字典中。

语法orapwd file=/opt/dbs/ora password=abc123 entries=5

entries :最多有sys用户权限的用户数量

初始化文件里的参数remote_login_password_file=exclusive

 

----look /opt/rdbms/admin/buildall.sql

 

create database db01
maxlogfiles 10
maxdatafiles 1024
maxinstances 2
logfile
        GROUP 1 ('/u01/oradata/db01/log_01_db01.rdo') SIZE 15M,
        GROUP 2 ('/u01/oradata/db01/log_02_db01.rdo') SIZE 15M,
        GROUP 3 ('/u01/oradata/db01/log_03_db01.rdo') SIZE 15M,
   datafile 'u01/oradata/db01/system_01_db01.dbf') SIZE 100M,
   undo tablespace UNDO
      datafile '/u01/oradata/db01/undo_01_db01.dbf' SIZE 40M
   default temporary tablespace TEMP
      tempfile '/u01/oradata/db01/temp_01_db01.dbf' SIZE 20M
      extent management local uniform size 128k
   character set AL32UTE8
   national character set AL16UTF16
   set time_zone='America/New_York';

---------------------------------------------------------------------

创建数据库最好的方法:推荐用DBCA

用手工创建比较复杂!

数据库管理的认证方式(需要找文章看)

     图解oracle口令认证方法


我们在linux oracle 安装完毕后我们可以通过下边的命令进入数据库.
$ cd $ORACLE_HOME/dbs
$ sqlplus “/ as sysdba”
SQL>show user   
USER is "SYS"  
并没有让我们输入用户名和密码
这就是说.用户只要登陆到LINUX系统就可以进入到ORACLE数据库系统里.这样对ORACLE的安全有很多隐患.
下面我们就ORACLE进行设置使它必须输入用户名和密码才能进入.
首先我们修改参数文件.将参数文件REMOTE_LOGIN_PASSWORDFILE 修改为EXCLUSIVE (一般默认就是EXCLUSIVE. 如果不是改成.参数文件一般在 /opt/oracle/admin/ora9i/pfile/ )

除了参数文件我们还要修改网络配置文件 SQLNET.ORA以改变数据库的人证方式.
该文件位于 /opt/oracle/product/9.2/network/admin/sqlnet.ora
SQLNET.ORA增加一行
SQLNET.AUTHENTICATION_SERVICES= (NTS)

这时候我们在输入 $sqlplus / as sysdba 会要求你输入用户名和密码.
sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Sun Sep 3 16:18:44 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
这时我们输入用户名和密码也不能进入.我们应当这么书写
$ sqlplus sys/你的密码 as sysdba
就可以进入了!
这个方法对ORACLE9.2 以上版本十分有效.

                5. 使用数据字典或动态性能视图

数据字典:DB的核心,sys用户拥有,保存在system表空间,描述数据库及其对象,为只读,通过select来查询。

数据字典包含:1)基础表: 保存DB的描述,由create db时的sql.bsl创建

              2)数据字典视图:用于简化基础表信息,通过公用别名来访问,由catalog.sql创建。

Catproc.sql :创建PL/SQL的环境。

数据字典视图类别:

  DBA_XXX:所有对象

  ALL_XXX:用户所能访问的所有对象

  USER_XXX用户所拥有的所有对象

通用视图:DICTIONARY(可查所有数据字典)DICT_COLUMNS

SCHEMA对象:DBA_TABLESDBA_INDEXESDBA_TAB_COLUMNSDBA_CONSTRAINS

空间分配:DBA_SEGMENTSDBA_EXTENTS

数据库结构:DBA_TABLESPACESDBA_DATA_FILES

动态性能表:sys用户拥有,记录数据库当前活动的虚拟表,存在于内存中,以V$开头,在v$fixed_table中列出。

 

? V$DATABASE

? V$DATAFILE

? V$INSTANCE

? V$PARAMETER

? V$SESSION

? V$SGA

? $SPPARAMETER

? V$TABLESPACE

? V$THREAD

? V$VERSION

 set wrap off
 
 user_tables;
 all_tables;
 dba_tables;

 


6 管理控制文件

 

当数据库的结构发生变化的时候,控制文件随即发生变化。

添加控制文件步骤:

1)sql>alter system set control_files='/opt/oradata/u01/ctrl01.ctl'

'/opt/oradata/u01/ctrl02.ctl' scope=spfile;(必须加spfile,因为修改不能写到内存里

2)sql>shutdown immediate;
3) cp /opt/oradata/u01/ctrl01.ctl /opt/oradata/u01/ctrl02.ctl

1)    startup;

 

重要的视图:

V$CONTROLFILE:

V$PARAMETER:

V$CONTROLFILE_RECORD_SECTION:

V$BACKUP

V$DATAFILE

V$TEMPFILE

V$TABLESPACE

V$ARCHIVE

V$LOG

V$LOGFILE

V$LOGHIST

V$ARCHIVED_LOG

V$DATABASE

 

 

show parameter control;
select * from v$controlfile_record_section;
select * from v$tempfile;


备份控制文件
alter database backup controlfile to '../filepath/control.bak';


备份控制文件,并将二进制控制文件变为了arc 的文本文件

alter database backup controlfile to trace;

 

控制文件在备份中意义重大,建议每次对其单独备份。同时应该增大CONTROL_FILE_RECORD_KEEP_TIME这个初始化参数的值。以便备份信息能更长时间的保留。


7 管理在线重做日志

redo log会记录数据库的所有操作,不仅仅只包括修改操作!

Redo log switch时会触发checkpoint,同时信息会写到controlfile里。

alter system switch logfile;强行进行一次日志switch,归档/非归档均可使用

alter system archive log current;强行归档并进行日志切换,用于归档模式下

alter system checkpoint;--强制进行一次checkpoint

FAST_START_MTTR_TARGETcheckpoint 同步频率参数,9I新参数,表示将来系统crash后你期望recover的时间。用来替代以前版本里的FAST_START_IO_TARGET,LOG_CHECKPOINT_TIMEOUT

将参数LOG_CHECKPOINT_TO_ALERT设为true(默认为false),系统会将每个SCN记录在alert_SID.log里!

加入一个日志组
alter database add logfile group 3 ('opt/oracle/log6.rdo' size 10M);

向日志组中加入一个成员
alter database add logfile member '/opt /oracle/log6b.rdo' to group 3;

删除日志组:当前日志组不能删;活动的日志组不能删;非归档的日志组不能删
alter database drop logfile group 3;
删除日志组中的某个成员,但每个组的最后一个成员不能被删除 ???????
alter databse drop logfile member '/opt/oracle/log6.rdo';

redo log的状态:

1)    inactive :非活动的状态

2)    active: 活动的状态,oracle认为可疑的状态

3)    current:当前将要写的redo log,执行归档后,current之前的redo log肯定也必须被归档,否则数据库处于挂死状态。

4)    unused:新增加的redo log状态
重命名日志文件

1--- shutdown immediate;

2---移动online redo log

3---startup mount

4---alter database rename file '/6.rdo' to '/6a.rdo';

5---alter database open

清除在线日志
alter database clear logfile '/opt/oracle/ora_log_file6.rdo';
alter database clear logfile group 3;
清除非归档日志
alter database clear unarchived logfile group 3;

归档模式到非归档模式的互换

1---startup mount;

2---alter database noarchivelog/archivelog;
  3---alter database open

achive log start;---启动自动归档
alter system archive all;--手工归档所有日志文件
 archive log list;

alter system archive log start;--启动自动存档

show parameter log_archive;

 

LOGMINOR的使用

 

v$log;
v$log_history;

能看出已归档的redo log  seq.

 

v$archived_log;

v$logfile;

v$Log重要列:

ARC : redo log是否被归档

STATUS: current / inactive/ active/

First_time: 记录该redo log记录数据库第一次修改的时间

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 8.管理表空间和数据文件

Locally managed tablespace:空闲extent的管理放在本地表空间里,位图用于记录空闲extent,位图的值01对应free or used,每个bit对应一个extent优点:由于空闲extent的管理放在本地表空间里,因而减少了对数据字典的竞争,空间的分配和回收也不会产生系统undo段。由于采用标准大小,无需愈合!默认的,分配的空间按标准大小来划分。

若创建时UNIFORM SIZE128K,则新建的extent初始划分了128K,即使你创建的表只分配了64K;

 uniform size=sort_area_size*N

sort_area_sizePGA

Dictionary-managed tablespace: 空闲extent的管理放在数据字典里,空间的分配和回收会修改相关表!易产生碎片!

Temp表空间:初始创建时分配的大小只是最大值,并不是立刻就分配的大小,磁盘空间足够的话就可以创建永旧表空间来排序,不一定非要用,也不推荐用,会产生OS级别的碎片!restart时由SMON收回。

创建默认Temp表空间:

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE default_temp2;

Temp表空间的限制:不能在没有新的临时表空间的情况下删除当前的临时表空间,不能被offline或改为永久表空间。

Create temporary tablespace userdata tempfile '/opt/oradata/undo101.dbf' size 10m extent management local;
设置数据库缺省的临时表空间
alter database default temporary tablespace tablespace_name;
系统/临时/在线的undo表空间不能被offline

永久表空间:初始创建时分配的大小就是立刻就分配的大小。

将表空间设为read only的限制条件:

1)           表空间必须online

2)           在线备份该表空间时不能设为read only

3)           系统会等待当前事务完成

4)           不能包含活动回滚段

只读表空间里的对象可以删除,因为删除只是在数据字典里删除这个对象

将数据字典管理的表空间转换为本地管理表空间:

DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL(SYSTEM);

创建undo tablespace(只能用本地管理模式下) 
create undo tablespace undo1 datafile '*.dbf' size 40M extent management local;
Dropping Tablespaces user

? INCLUDING CONTENTS                   :drops the segments.

? INCLUDING CONTENTS AND DATAFILES  :deletes data files.

? CASCADE CONSTRAINTS drops all referential integrity constraints.

检查数据文件是否有extent的方法:检查DBA_EXTENT里是否有extent,如果无,则表明无数据!

 

使数据文件自动扩展:

1)create tablespace userdata datafile '*.dbf' size 100M AUTOEXTEND ON NEXT 5M MAXSIZE 200M;

2) alter database datafile '*.dbf' autoextend on/off;

手工修改数据文件大小(在open时操作,只要resize的大小大于已使用的即可)
alter database datafile '/opt/oradata/undo102.dbf' resize 50m;

 

给表空间扩展空间
alter tablespace userdata add datafile '*.dbf' size 10m;

 

移动数据文件:

1)将对应的表空间offline(系统会等待当前事务结束)

2)alter tablespace user rename datafile '*01.dbf' to '*02.dbf';


重命名系统表空间

1)    sql>shutdown immediate;

2)    sql>startup mount;

3)    sql>alter database rename file  '*1.dbf' to  '*2.dbf';

 

表空间和数据文件的对应关系
select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts=t2.ts;

 在创建表空间时,设置表空间内的段空间管理模式,这里用的是自动管理

create tablespace userdata datafile '*01.dbf' size 100M extent management dictionary default storage(initial 100k next 100k pctincrease 10) offline;
alter tablespace userdata mininum extent 10;
alter tablespace userdata default storage(initial 1m next 1m pctincrease 20);

将表的某分区移动到另一个表空间
alter table test move partition partition_name tablespace tablespace_name;

重要视图:
DBA_TABLESPACES

V$TABLESPACE

DBA_DATA_FILES

V$DATAFILE

DBA_TEMP_FILES

V$TEMPFILE

DATABASE_PROPERTIES

9. ORACLE 存储结构及关系

 

segment: 常用的有table,index,undo segment.

Extent: 在表空间里由segment使用的一大块空间,是segment的下一级。刚建立的tablespace没有新建segment,也就没有extent. Segment可以跨越多个datafile,但extent不可以。

存储字句优先顺序:

首先调用在segment级(除非在tablespace级使用minimum extent or uniform size),若没定义,就使用tablespace的定义,甚至db定义(数据库级initial 5个block,next 5 block)。

Extent的分配:当创建/扩展/修改segment时。

Extent的回收:当删除/修改/truncate segment时。

 

Drop:删除segment

Truncate:删除数据并重新初始化,truncate后只被初始化1extent

 

DB BLOCK:由一个或多个OS block组成,大小由DB_BLOCK_SIZE决定。   在创建表空间时建立,DB_BLOCK_SIZE只能通过重建数据库时重新修改。

Db_Cache_Size:早期版本用Db_Block_Buffers, 定义标准Block默认的Buffer Cache,至少一个颗粒。

非标准的block size: 最小为一个颗粒。若建立了2k的block size(非标准的),oracle会分配DB_2K_CACHE_SIZE的内存,此时DB_nk_Cache_Size(nk为标准块大小)无意义,因为标准块对应的内存大小已由Db_Cache_Size定义。

 

创建非标准块大小的表空间:

CREATE TABLESPACE tbs_1 DATAFILE ’tbs_1.dbf’ SIZE 10M BLOCKSIZE 4K;

 

多个block大小的限制条件:临时表空间必须使用标准块大小,分区对象的所有分区所在的表空间的块大小必须一致。

 

数据块管理的方式:

1)           自动segment空间管理方式:使用Bitmap(这个BITMAP存于??)来管理数据库segment,只能在tablespace级别Enable.

 CREATE TABLESPACE data02 DATAFILE ‘/u01/oradata/data02.dbf’ SIZE 5M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K

SEGMENT SPACE MANAGEMENT AUTO; 不定义则采用默认的手工管理,要改变只能重建tablespace.

2          手动管理BLOCK(默认)。

pctused如果数据块的使用率小于pctused的值,则该数据块重新加入到fresslist(位于segment)中。该数据块就可以插入数据。默认40.
pctfree如果数据块的空余率小于pctfree的值,则该数据块从freelist中移出。该数据块不可以插入数据。留下一部分free值用于update默认10.

Inittrans: 事务要访问数据block时系统会在block头里初始化事务槽(用于记录事务)

Maxtrans: 最大的事务槽,事务槽越大,占用Block空间越多。

 

手工分配表空间段的分区(extent)大小
alter table kong.test12 allocate extent(size 1m datafile '/opt/oradata/undo102.dbf');
alter table kong.test12 deallocate unused; ---释放表中没有用到的分区
show parameter db;
alter system set db_8k_cache_size=10m;  ---配置8k块的内存空间块参数。


 碎片率: 临时表空间碎片率最大,undo表空间次之


数据对象所占用的字节数
select sum(bytes) from dba_extents where onwer='kong' and segment_name ='test';

 

重要的视图:

DBA_EXTENTS (relative_fno ??)

DBA_SEGMENTS(min_extents:若为20,初始化1extent后再自动扩展19)

DBA_TABLESPACES

DBA_DATA_FILES

DBA_FREE_SPACE

 

 

 

 

 

 

 

 

 

 

第十章:管理回滚段

 

undo 段应用于DML操作(insert,update,delete,merge),对应smon在做recovery时用到。

回滚段的作用:

1)    事务回滚(当执行rollback,会将会滚段数据写到数据表里

2)    事务恢复

3)    读一致性

读一致性:读取的数据是从undo段还是从数据文件的表里读取决于时间点(也即SCN),如果读的时间点(SCN)比commit时的SCN小,系统从undo段读取数据,如果比commit时的SCN大,就从数据文件的表里读取数据!

 

回滚段的类别:

1)    系统回滚段 (用于system 表空间)

2)    非系统回滚段 (用于其他表空间)

自动模式: 要求有一个undo tablespace

手工模式:

3)    deferred :用于将表空间设为offline immediate,temporary或置于recovery状态

 

自动管理回滚段是oracle9i默认的方式,对应参数

undo_management=auto

undo_tablespace=undotbs

 

创建回滚段:

create undo tablespace undo1 datafile ‘*.dbf” size 50M;

alter tablespace undo1 add datafile

 

切换回滚段表空间:

1)           create undo tablespace undo1 datafile ‘*.dbf” size 50M;

先创建一个回滚段表空间(一个DB里可以有多个undo 表空间,但一个实例只能激活一个undo表空间)

2)           alter system set undo_tablepspace=undo1

3)           检查以前的UNDO表空间是否已无活跃事务

SQL> SELECT a.name,b.status FROM v$rollname a, v$rollstat b WHERE a.name IN ( SELECT segment_name FROM dba_segments)

AND a.usn = b.usn;

NAME STATUS

------------------------- ---------------

_SYSSMU4$ PENDING OFFLINE

若status为pending offline,可将旧undo段删除。

4)   set rollback_segment为空

5)   检查参数文件里的undo表空间是否为现在的

6)   restart db

仔细理解ORA-01555错误的原因

在自动化管理模式下执行手动管理命令,忽略回滚段的错误提示

alter system set undo_suppress_errors=true;

 

undo_rention 保留undo数据的时间,值越大,所需的数据空间越大。

 

show parameter undo;
select * from v$undostat 每隔十分钟间隔取undo的统计值 
undo表空间的大小计算公式: 

 UndoSpace=[UR * (UPS * DBS)] + (DBS * 24) 
              UR :UNDO_RETENTION 保留的时间(秒)
             UPS :每秒的回滚数据块
             DBS:系统EXTENT和FILE SIZE(也就是db_block_size)
UPS(每秒的回滚数据块)的计算方法:

SQL> SELECT (SUM(undoblks) / SUM) ((end_time - begin_time) * 86400) FROM v$undostat;

undo表空间的大小计算

SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes"

FROM (SELECT value AS UR FROM v$parameter WHERE name = ’undo_retention’),(SELECT (SUM(undoblks)/SUM (((end_time-begin_time)*86400))) AS UPS

FROM v$undostat),(SELECT value AS DBS FROM v$parameter

WHERE name = ’db_block_size’);

 

 select * from dba_rollback_segs;

-----------------------------------------------------------仔细看看


在自动管理模式下,不会真正建立rbs1;在手工管理模式则可以建立,且是私有回滚段。
create rollback segment rbs1 tablespace undotbs;
desc dbms_flashback;
在提交了修改的数据后,9i提供了旧数据的回闪操作,将修改前的数据只读给用户看,但这部分数据不会又恢复在表中,而是旧数据的一个映射
execute dbms_flashback.enable_at_time('26-JAN-04:12:17:00 pm');
execute dbms_flashback.disable;
回滚段的统计信息
select end_time,begin_time,undoblks from v$undostat;
select * from dba_rollback_segs;

v$rollname,v$rollstat,v$undostat,v$session,v$transaction;
show parameter transactions;
show parameter rollback;
在手工管理模式下,建立公共的回滚段
create public rollback segment prbs1 tablespace undotbs;
alter rollback segment rbs1 online;----在手工管理模式
在手工管理模式中,initSID.ora中指定 undo_management=manual 、rollback_segment=('rbs1','rbs2',...)、
  transactions=100 、transactions_per_rollback_segment=10
  然后 shutdown immediate ,startup pfile=....\???.ora

 

select * from dba_rollback_segs;

 

 

 

深入:

1)           回滚段探究(BY biti_rainy)

2)           checkpointinginstructors.ppt

3)           redo logs and recovery.ppt

recover时,文档里讲似乎在oracle9i里会在

The method for performing the roll forward phase has been changed to improve performance.会在时间点执行

An entry is placed in the redo log whenever DBWR writes data to disk .

It identifies the blocks that were just written.

 

First pass of redo data

? Identify redo that needs to       be processed

? No data blocks are read

? Very fast

 

Remove entries for those blocks already written....

 

Second pass of redo data

Recover using these selected entries

阅读(1159) | 评论(0) | 转发(0) |
0

上一篇:今天重新认识了Linux 网卡配置

下一篇:没有了

给主人留下些什么吧!~~