当前位置:文档之家› Oracle学习记录

Oracle学习记录

Oracle学习记录
Oracle学习记录

System默认口令:manager

Sys默认口令:change_on_install

Scott默认口令:tiger

sysfiles存放数据文件物理位置

user_indexes存放索引

user_objects存放用户对象

user_tables(user_all_tables)存放表

user_tablespaces存放表空间

user_procedures存放存储过程

user_view存放视图

user_users存放用户

用户SYS和SYSTEM所拥有的表被称为数据字典表(data dictionary table),数据字典表提供一个数据库用来管理自己的系统目录。数据字典由Oracle提供的一组目录脚本文件创建。每当安装或升级一个数据库时,都需要使用创建或修改数据字典表的的脚本文件。当在数据库中安装一个新的选项时,可能要运行另外一些附加的目录脚本文件。

用户SYS拥有数据字典表,这些表存储了数据库中其他结构的所有信息;用户SYSTEM拥有访问数据字典表的视图,这些视图供数据库中其他用户使用。

索引既可以改善数据库性能,又可以保证列值的唯一性。当create table命令中规定有UNIQUE 或PRIMARYKEY约束条件子句时,Oracle就自动创建一个索引。

经常被同时访问的表在物理位置上可以存储在一起。为了将它们存储在一起,就要创建一个簇(cluster)来管理这些表。表中的数据一起存储在簇中,从而最小化必须执行的I/O次数,改善系统性能。

使用V$INSTANCE视图可以用来查看实例的当前状态。

查看Oracle数据库服务器的版本:select * from product_component_version

查询v$version视图来查看组件级信息:select * from v$version

启动SQL/PLUS程序,使用某个用户登录进入,执行:select * from session_privs,可以查询该用户的权限。

当启动Oracle9i 数据库时,系统会先在内存内规划一个固定区域,用来储存每位使用者所需存取的数据,以及Oracle9i运作时必备的系统信息。我们称此区域为系统全域区(System Global Area),即SGA。

在Oracle8i 时,SGA 的大小是由起始参数文件(initialization parameter file )内的某些参数所设定。但最麻烦的是每次调整参数之后必须等重新启动数据库才生效。从Oracle9i 开始,DBA可以动态配置内存的大小,这样的技术我们称为「dynamic SGA」。有了dynamic SGA,SGA 的各组成区域都可以动态地进行规划与调整,而不需先关闭数据库。

SGA 的大小可由起始参数文件之特定参数所控制,下表整理出与SGA 相关的参数名称及其意义:

参数名称用途

SGA_MAX_SIZE 设定SGA 总大小

DB_CACHE_SIZE 设定由标准区块组成的Database Buffer Cache 大小

LOG_BUFFER 设定Log Buffer 之大小

SHARED_POOL_SIZE 设定Shared pool 之大小

LARGE_POOL_SIZE 设定large pool 大小;预设为0

SGA又包含数个重要区域,分别是:

●Database Buffer Cache (数据快取缓冲区)

●Redo Log Buffer (重置日志缓冲区)

●Shared Pool (共享区)

●其它,如Large pool

数据快取缓冲区:

为SGA 的主要成员,用来存放读取自数据文件的数据区块复本,或是使用者曾经处理过的数据。其用途在于有效减少存取数据时造成的磁盘读写动作,进而提升数据存取之效能。所有同时上线的使用者都可以共用此缓冲区的数据。

整个数据快取缓冲区包含两种缓冲区串行,分别是write list 与LRU list:

●Write list 存放dirty buffers(注4)之复本,会在适当时机写入磁盘。

●LRU list 包含:free buffers , dirty buffers 与pinned buffers。其中free buffer

为空白的缓冲区,随时可存放数据;pinned buffer 则是目前使用中的缓冲区。

数据快取缓冲区运作原理

当使用者第一次向Oracle9i 送出数据查询请求时,Oracle9i 会先在数据快取缓冲区内寻找该数据。如果欲查询的数据恰好已存在于缓冲区内(这样的情况我们称之为cache hit ),就直接从内存读出数据。

反之,如果缓冲区内并没有使用者欲查询的数据(此情况称为cachemiss ),Oracle9i就会先从磁盘上数据文件读出适当的数据区块,放入缓冲区之后,使用者才从缓冲区读取数据。在“cachehit” 的情况下查询数据的速度要比在”c ache miss” 的情况还快很多。事实上,这就是数据快取缓冲区的主要用途所在。

设定数据快取缓冲区之大小:

Oracle8i 的数据快取缓冲区容量由下列公式所决定:

Oracle8i 数据快取缓冲区大小=DB_BLOCK_SIZE * DB_BLOCK_BUFFERS

DB_BLOCK_SIZE:数据区块(data block)之单位大小。

DB_BLOCK_BUFFERS:缓冲区数目;每个缓冲区大小相当于一个数据区块之大小。

需注意的是:Oracle8i 内DB_BLOCK_SIZE 在数据库建立之后就不能更改。

然而Oracle9i数据库支持多重区块大小—。除了预设的DB_BLOCK_SIZE之外, DBA也可以另外设定其它大小的数据区块。因此在Oracle9i数据库中由DB_BLOCK_SIZE 所设定的数据区块,我们称为「标准数据区块(standard block)」,其合理的大小可设定在2k –32k 之间。Oracle9i 的起始参数DB_CACHE_SIZE 就是设定以“标准区块”所构成的数据快取缓冲区之容量。

重置日志缓冲区:

纪录Oracle 数据库内所有数据异动的详细信息(例如数据异动前后的新旧数据),我们将这些信息的储存地点称为redo entries 。系统也会在适当时机将redo entries 内的信息写入磁盘内的文件案(注5),以便资料库毁损时可进行必要的复原(Recovery)动作。

设定重置日志缓冲区的大小:

起始参数文件之LOG_BUFFER参数可用来设定此缓冲区的容量,单位为bytes。一般来说,如果重置日志缓冲区的容量较大,可减少日志文件读写动作。重置日志缓冲区的默认值等于操作系统数据区块的四倍。

共享区:

当使用者将SQL指令送至Oracle数据库后,系统将会先解析(parse)语法是否正确。解析时所需要的系统信息,以及解析后的结果(parse tree与execution plan)将放置在共享区内。如果不同的使用者执行了相同的SQL指令,就可以共享已解析好的parse tree与execution plan,加速SQL 指令的执行速度。

共享区之组成:

共享区内包含数种不同用途的快取缓冲区,主要可分为两类:

●函式快取缓冲区(Library cache)

包含:共享SQL 区(Shared SQL Area),私有SQL区(Private SQL Area),以及PL/SQL

程序单元区。解析完成的parse tree与execution plan 就是放在共享SQL 区内。

数据字典缓冲区(Dictionary cache)。

Oracle9i 在解析SQL 叙述句时所需要的系统信息都是放在此缓冲区内,可能包含:数

据表(视观表)的名称、字段名称与数据型态;数据库使用者之相关系统管理权限,或

是对象存取权限伂央C

设定共享区之大小:

起始参数文件内的SHARED_POOL_SIZE可设定共享区之大小,其默认值大小为8M。

Oracle数据库结构:

谈及Oracle数据库结构时,我们应该从两个角度来探讨:分别是资料库的「逻辑层面」与「实体组成」。简单的说,「逻辑层面」是由“数据库内部”观看其组成要素,包括:数据表空间( tablespaces)、区段(segments)、盘区(extents)、数据区块(data block)、以及纲要物件(Schema objects)。而「实体组成」则是从“操作系统”角度来看Oracle9i 数据库的实体构成项目,包括:资料文件(Data files)、重置日志文件( redoligfiles)、控制文件

( controlfiles)、密码文件(password)、起始参数文件(initialization parameter files)

等等。

数据库之逻辑组成:

无论是任何规模的企业,在管理数据库系统时,DBA都应该依据实际系统需求或是未来可能的管理方式,规划出一个或多个数据储存区域。重点是希望将数据分门别类地妥善存放。譬如,您可能会希望将公司内会计系统的帐务数据与产品销售纪录分开存放。

Oracle9i数据库允许DBA自行规划各种用途的数据表空间(Tablespace),以便存放不同型态的数据与数据库对象。举例来说,存放Oracle系统信息的「数据辞典」(data dictionary)可放在SYSTEM 数据表空间;应用系统数据可存放在USER 数据表空间;而所有数据表的索引(Index)

则可单独存放在INDX 数据表空间内(SYSTEM为Oracle数据库预设的数据表空间;USER 与INDX 则是由DBA自行规划建置的)。一般来说,Oracle9i数据库至少应规划出五个以上的数据表空间,如下图所示:

数据区块(data block):

Oracle9i 数据库有几种数据储存体,其中最小的储存单元就称为「数据区块」(data block)。数据区块大小是由起始参数文件的DB_BLOCK_SIZE 参数所决定,且在新建Oracle9i数据库之前就必须明确地定义。实际上,数据区块大小与“操作系统的磁盘读写区块”(O.S.

blocks)也有关系,所以您必须将DB_BLOCK_SIZE 设定为O.S.blocks的整数倍。附带一提:Oracle9i在存取资料时是以data block为最小读取单位,而不是以O.S. block 为单位。

从Oracle9i 开始,数据库内可以设定多种数据区块大小。换句话说,Oracle9i 数据库内分为「标准数据区块」与「非标准数据区块」;预设情况下SYSTEM 数据表空间就是以「标准数据区块」建立而成。

盘区(extents):

除了数据区块之外,Oracle9i数据库还有所谓的「盘区」(extents)。虽然数据区块是Oracle9i最小的数据读写单位,但值得注意的是:Oracle9i 在“配置”储存空间时,并不是以数据区块为单位,而是改采「盘区」的方式来配置空间。那么,使用「盘区」究竟有何好处呢?当您执行DDL指令建立数据库对象时(例如CREATE TABLE 指令),Oracle9i会先配置出一连串的数据区块;直到这些数据区块全部存满数据后,下次再配置一连串的数据区块。这些连续的资料区块就统称为「盘区」。举例来说,假定您准备在Oracle9i数据库内存放80KB的数据,Oracle9i 可以先配置一个「盘区」,其大小可为数据区块(8KB)的5倍;然后视实际需要再配置第二个「盘区」(大小还是40KB)。如此一来,只要两次的空间配置动作就可以存放80KB 的数据了!试想,如果Oracle9i 每次只配置8KB 的「数据区块」让您存放数据,总共需要10 次空间配置动作才能放满80 KB 的数据,是不是比较没有效率呢?由此可见,「盘区」的确有其存在的必要性。

区段(segment):

依照不同的数据处理性质,您可能需要在数据表空间内划分出不同区域,以存放不同数据;我们将这些区域称之为「区段」(segment)。例如,存放数据的称为「数据区段」、存放数据的称为「索引区段」。而「区段」其实就是由许多「盘区」组合而成。除了上述两种「区段」以外,Oracle9i数据库内还有另外两种区段结构,分别是:「暂时性区段」(temporary segment)与「退回区段」(rollback segment)。

下图说明了Oracle9i 数据库内各逻辑组成要件之间的阶层关系:

从Oracle9i 数据库的「逻辑层面」来看,我们知道:

●数据是存放在每个「数据块」内,数据读写动作也将以「数据块」为单位。

●空间配置的动作则是引用「盘区」的概念。一个「盘区」由一连串的「数据块」所构

成。

●依实际数据量多寡,数据(或数据库对象)由多个「盘区」所组成。

●「数据表空间」内可划分不同的「数据段」;而每个「数据段」内又包含许多「盘区」。

●在每个Oracle9i 数据库内可规划不同的「数据表空间」,用以存放不同型态的数据。

数据文件:

每个Oracle9i 数据库都包含为数不等的实体「数据文件」。数据库内所有逻辑数据库对象都是存放在数据文件内,如:数据表、索引等。

一但数据文件被建立后,系统就会在磁盘上配置出适当空间给数据文件案;但尚未存放任何使用者数据。等到未来使用者将数据存入数据库时,Oracle9i 才会在数据文件内配置出「数据区段」,以存放数据。而这些动作都是由Oracle9i 自动完成的。

当然了,如果数据文件剩余空间不足,您就必须调整数据文件大小;或增加新的数据文件。所以在Oracle9i 数据库内,一个数据库对象有可能横跨多个数据文件。

如前所述,Oracle9i 数据库内可规划一个以上的「数据表空间」。但如果由操作系统角度来看,「数据表空间」其实是由一个或数个实体「数据文件」所组成。换句话说,数据库的所有数据就是位于操作系统的各「数据文件」内。

所以:

●一个「数据文件」只能对应的一个「数据表空间」。

●一个「数据表空间」可包含多个「数据文件」。

重置日志文件:

除了「数据文件」外,最重要的Oracle9i 数据库实体文件案就是「重置日志文件」(redo log files),也就是大家俗称的「交易日志」(transaction log)。虽然它与「数据文件」不同,但是彼此间却有密不可分的关系!简单的说, Oracle9i 重置日志文件会负责纪录数据库内任何数据处理情况。当数据被异动时,所有异动纪录会先保留在内存的重置纪录缓冲区,并在适当时机由LGWR背景处理程序负责写入至硬盘上重置日志文件。如此一来,所有数据异动情况都会完整地保留下来。万一您的Oracle9i 数据库不小心当机或是遭遇毁损,Oracle9i 将凭借重置日志文件内相关纪录将数据复原至最完整的状态—这个动作我们又称为『Roll Forward』。

重置日志文件的配置方式:

Oracle9i数据库正常运作的先决条件是至少配置两个(组)重置日志文件。假定目前

Oracle9i数据库拥有两个重置日志文件,分别是redo01.ora与redo02.ora。因为重置日志文件是以循环方式使用,所以当redo01.ora写满后就会轮到redo02.ora —这个动作称为「日志切换」(log switch) 。理论上,当redo02.ora写满后应该会立刻从redo01.ora重新开始写入动作。但实际上并非如此— Oracle9i 会等到redo01.ora 内纪录的数据异动情况真正反应在数据文

件之后(才会覆写redo01.ora 的资料。在一个大型在线交易(OLTP)系统下,如果数据交易量十分频繁,建议您不妨配置五个以上重置日志文件。以免Oracle9i 进行「日志切换」时还要等候CKPT 处理程序执行「检查点动作」(checkpoint),因而影响系统效能。

在执行关键性任务(mission-critical)的数据库系统中,为了避免硬体问题导致重置日志文件毁损(例如硬盘产生坏轨),我们会考虑建置「多重重置日志文件」(multiplexed redo log)。所谓的「多重重置日志文件」其实就是在其它硬盘内同时存放多份重置日志文件之复本。假定原来的重置日志文件为Redo_A01.ora与Redo_A02.ora。我在第二个磁碟又额外规划了两个重置日志文件— Redo_B01.ora 与Redo_B02.ora(分别为Redo_A01.ora 与Redo_A02.ora 之复本)。这时候Redo_A01.ora 与Redo_B01.ora 就构成所谓的「重置日志群组」(redo log group);而Redo_A01.ora 与Redo_B01.ora 分别为该群组之「群组成员」(member)。一但您以「重置日志群组」的方式规划重置日志文件, LGWR 会同时将异动纪录写入相同群组的所有成员。也就是说, LGWR 会将数据同时写入Redo_A01.ora与Redo_B01.ora,等到发生「日志切换」动作后,再同时写入Redo_A02.ora与Redo_B02.ora。可想而知,万一这两颗硬盘其中之一不幸损毁。重置日志文件将不受任何影响。尽管「多重重置日志文件」的概念已具备容错功能,但是对于重

置日志文件之写入效能却有一定程度的影响!这也是我们在规划之初就必须考虑的重点之一。控制文件:

每个Oracle9i 数据库也都会有一个「控制文件」,用以纪录与描述资料库的实体结构。「控制文件」内记录以下重要信息:

●Oracle9i 数据库名称与建立时间。

●数据文件与重置日志文件之名称,及其所在位置。

●交易纪录序列码(log sequence number)。

每当数据库被启动时,Oracle9i 会在执行个体启动后立刻读取控制文件内容,待所有数据库实体组成文件案之所在信息都收集完毕,数据库才会被开启。为了避免控制文件毁损导致数据库系统停摆,建议您比照「多重重置日志群组」的方式—至少配置两个控制文件,并存放在不同实体硬盘。

起始参数文件:

在启动执行个体之前,Oracle9i必须依照特定参数设定值来配置存储器空间,并启动相关背景处理程序。而DBA可以事先规划这些参数,并存放在操作系统内的某个文件案。往后将利用这个文件案来开启相对应的Oracle9i 执行个体。这个文件案就是所谓的「起始参数文件」。起始参数文件包含以下主要内容:

●系统全域区相关的组态设定

●其它各起始参数之名称与设定值

●控制文件名称与存放路径

●重置日志文件之相关设定

您可以利用任何文字编辑器来建立或修改起始参数文件,通常起始参数文件的名称为init.ora 或是init.ora 。假定Oracle9i 执行个体的名称为ora901,起始参数文件之文件名就可以定为initora901.ora。以下是一个起始参数文件范例:

# Copyright (c) 1991, 2001 by Oracle Corporation

# Cache and I/O

db_block_size=8192

db_cache_size=67108864

# Cursors and Library Cache

open_cursors=300

# Diagnostics and Statistics

background_dump_dest=/opt/oracle/admin/ora901/bdump

core_dump_dest=/opt/oracle/admin/ora901/cdump

timed_statistics=TRUE

user_dump_dest=/opt/oracle/admin/ora901/udump

# Distributed, Replication and Snapshot

db_domain=https://www.doczj.com/doc/c113822839.html,

remote_login_passwordfile=EXCLUSIVE

# File Configuration

control_files=("/opt/oracle/oradata/ora901/control01.ctl",

"/opt/oracle/oradata/ora901/control02.ctl",

"/opt/oracle/oradata/ora901/control03.ctl")

# MTS

dispatchers="(PROTOCOL=TCP)(SER=MODOSE)",

"(PROTOCOL=TCP)(PRE=oracle.aurora.server.

GiopServer)",

"(PROTOCOL=TCP)(PRE=oracle.aurora.server.

SGiopServer)"

# Miscellaneous

compatible=9.0.0

db_name=ora901

# Network Registration

instance_name=ora901

# Pools

java_pool_size=117440512

large_pool_size=1048576

shared_pool_size=117440512

# Processes and Sessions

processes=150

# Redo Log and Recovery

fast_start_mttr_target=300

# Resource Manager

resource_manager_plan=SYSTEM_PLAN

# Sort, Hash Joins, Bitmap Indexes

sort_area_size=524288

# System Managed Undo and Rollback Segments

undo_management=AUTO

undo_tablespace=UNDOTBS

除了上述文件案之外, Oracle9i 数据库内还包含密码文件(password file)、重置日志封存盘(Archived Redo log files)。

启动与关闭Oracle9i 数据库:

在启动Oracle9i 数据库之前,首先您必须了解数据库的各种启动状态:

●NOMOUNT

●MOUNT

●OPEN

当您的系统内尚未建立任何数据库之前,只能先将Oracle9i执行个体开启至NOMOUNT 状态,

接着利用CREATE DATABASE 指令建立Oracle9i 资料库。待数据库顺利建立时(数据库内相关的信息已纪录至控制文件),才可以执行ALTER DATABASE 指令将数据库开启至OPEN 状态;或是先将执行个体关闭,再一口气将数据库开启至OPEN 状态。

欲开启/ 关闭Oracle9i 数据库时可利用以下几种工具:

●SQL*Plus 。

●Oracle Enterprise Manager 。

●Recovery Manager 。

一般来说,前两种是比较常用的方式。值得注意的是:在Oracle8i之前版本可使用Server Manager来启动/关闭Oracle数据库,或是执行系统维护的相关指令。从Oracle8i 以后,所有Server Manager 的指令都可以在SQL*Plus 下执行。而Oracle9i 已移除Server Manager ,统一由SQL*Plus 做为Oracle9i 的客户端工具。

关闭Oracle9i 数据库的方式:

关闭数据库时,您也必须以SYSDBA登入后执行SHUTDOWN指令。SHUTDOWN指令共有下列四种选项:

●Normal

●Transactional

●Immediate

●Abort

手动建立Oracle9i 数据库:

本文内容将涵盖下列主题:

●建立数据库的前置工作

●起始参数文件的重要参数

●手动建立Oracle9i 数据库的步骤

●如何移除Oracle9i 数据库

不管原因为何,当您准备自行建立Oracle9i 数据库时,都必须事先做好妥善准备。因为手动建立Oracle9i 数据库并不是件容易的事,可能的话应该尽量使用Oracle9i 提供的「数据库建置辅助精灵」来建立新数据库。但是要想成为一个合格的Oracle DBA,您也必须熟稔手动建立数据库的方式,才能面对建置Oracle9i 数据库所可能碰到的任何问题。

首先我们先看看建立Oracle9i 数据库之前应注意那些事情。

建立Oracle9i 数据库的前置处理工作:

在开始建立新的Oracle9i 数据库之前,建议您先做好下列准备工作:

●评估数据表与索引的存放位置,并预估其所需空间(如果可能的话)。

●规划操作系统下数据库实体文件案的部署方式—良好的文件案配置将大幅改善资料

存取效能。不管是安装Oracle 服务器软件或是建置新数据库时,都必须特别注意这点。

例如说,您可以将重置日志文件(Redo Log files) 置于其它磁盘或是RAID 1磁盘阵列

上;而将数据文件置于RAID 5 磁盘阵列上。

●选定「全域数据库名称」(global database name) —它是在网际网络上识别Oracle9i

数据库的方式,由数据库名称与网域名称组成,分别设定在起始参数文件的DB_NAME 与

DB_DOMAIN 参数内。

●熟悉起始参数文件内较重要的参数,甚至「服务器参数文件」(server parameter file)

的使用时机与其功用。

●选定适当的数据库字符集。所有字符数据都是依照特定字符集存入数据库,因此您必

须在建立数据库时指定适当字符集(注1)。

●选定「标准数据区块」大小—设定在起始参数文件的DB_BLOCK_SIZE参数。除了SYSTEM

数据表空间,其它数据表空间也可以遵循「标准数据区块」的设定。此外,在Oracle9i 数据库中,您可以设定额外四种「非标准数据区块」。需要注意的是,「标准数据区

块」大小在数据库建立完成后即无法更改。

●针对未来数据库的运作情况,订立一份良好的数据库备份计划,以便数据库毁损时能

在最短时间内予以修复。

●熟悉Oracle9i 数据库的启动/ 关闭方式,与其搭配的各种选项(如STARTUP 指令的

nomount 、mount 、open 选项)。

●确认物理内存是否足以启动Oracle9i Instance 。

●确认Oracle9i 服务器机的磁盘空间足够,以建置新数据库。

Oracle9i 数据库建置过程包含下列三项主要工作:

●建置新的数据库实体文件案,包含数据文件、重置日志文件。

●建立控制文件,并予以初始化。

●建置Oracle9i存取数据库系统时必要的数据字典( data dictionary)。

实际上,您可能经由下列三种方式之一来建置新的Oracle9i 数据库时:

●使用Oracle「数据库建置组态精灵」(Database Configuration Assistant,DBCA)。

Oracle Universal Installer 在安装过程中会适时启动DBCA 协助您建立数据库,视

您选择的安装种类而定。DBCA 将以图形接口方式引导您逐步完成Oracle9i 数据库的

建置工作。若是安装过程未启动DBCA,您也可以事后单独启动DBCA 建立新数据库,甚

至建立第二个Oracle9i 数据库。

●执行指令文件(script)手动建立Oracle9i 数据库如果您手边恰好保存着上次建立

Oracle9i 数据库所用的指令文件,那么您可以直接编修该指令文件,并予以执行。否

则,建议您使用Oracle9i 提供的范例指令文件进行编修。Oracle9i 不仅提供了数据

库建置范例指令文件,也提供了起始参数范例文件。您可视实际需要进行必要调整。

●移转(migrate)或升级(upgrade)既有数据库。如果您的应用系统正在存取既有Oracle

数据库,除非您需要一个全新的数据库或是测试用环境,否则应该不需要建立新数据

库。在此情况下,您所面临的将是数据库移转或升级议题。有关这方面的详尽信息,

请参阅《Oracle9i Database Migration》手册。

再谈起始参数文件:

因为手动建立Oracle9i 资料库之前必须先启动Oracle9i Instance,因此您必须先建立一个起始参数文件。建立新的起始参数文件时,最快速的方式就是编辑Oracle9i 提供的范例文件案,然后另存新文件。我较习惯的方式是直接编辑既有起始参数文件之复本,然后视实际需要进行调整。因为起始参数文件可供设定的参数非常多,如果某些参数未经过明确设定, Oracle9i 会自动代入预设值。

第一次以手动方式建立Oracle 数据库时,建议您尽可能不要修改各起始参数值。等到您熟悉每个参数的意义与使用时机之后,再利用文字编辑器调整或新增其它参数。除此之外,Oracle9i 允许您建立服务器参数文件(以二进制格式存放)。该文件案内的参数可在Oracle9i Instance 启动后执行ALTER SYSTEM 指令予以修改。

以下是建置新数据库之前必须新增或编辑的起始参数,包括:

●全域数据库名称

●控制文件名称与路径

●资料区块大小

●影响SGA 容量的起始参数

●设定处理程序最大数目

●设定空间回复(Undo)管理方法

设定全域数据库名称:

Oracle9i 的全域数据库名称由「数据库名称」与「网域名称」所组成,其中「数据库名称」设定于DB_NAME 起始参数,而「网域名称」则是设定于DB_DOMAIN 参数。这两个参数合并之后就可以在因特网上唯一识别每一个Oracle9i 数据库。举例来说,假设我们欲建立的Oracle9i 数据库之全域数据库名称为https://www.doczj.com/doc/c113822839.html,,那么可在起始参数文件内设定下列两参数:DB_NAME = mydb

DB_DOMAIN = https://www.doczj.com/doc/c113822839.html,

注意:

您可以执行ALTER DATABASE RENAME GLOBAL_NAME 指令更改Oracle9i 数据库的全域数据库名称;在您更改DB_NAME 与DB_DOMAIN这两个起始参数后必须将Oracle9i 数据库重新启动才会生效。此外,控制文件也必须重新建立。

关于DB_NAME 起始参数:

DB_NAME 必须是文字字符串,且不能超过8 个字符。在建立数据库的过程中,DB_NAME 设定值会记录在数据文件、控制文件、以及重置日志文件之中。如果您启动Oracle9i Instance 的时候,起始参数文件内设定的DB_NAME 不同于控制文件内所纪录的,那么数据库将无法启动。关于DB_DOMAIN 起始参数:

DB_DOMAIN 通常是数据库主机所在位置的网域名称。如果您欲建立的数据库将加入分布式数据库运算环境,请特别注意此参数的设定。

设定控制文件:

如前所述,控制文件是Oracle9i 数据库内相当重要的文件案。因此您必须在新的起始参数文件内加入CONTROL_FILE 参数以设定控制文件之文件名与路径。当您执行CREATE DATABASE 时,列在CONTROL_FILE 之中的控制文件将随之建立。如果起始参数文件忽略了此项参数,则Oracle9i 会在执行CREATE DATABASE 指令时自动建立控制文件并命名之,然后放在系统预设路径下。

那么,如果CONTROL_NAME 内设定的控制文件已经存在于操作系统下该怎么办呢?此时Oracle9i 会自动覆盖既有的控制文件。如果您想建立全新的控制文件,请确定CONTROL_NAME 设定的控制文件名不会与操作系统下任何文件名重复。

依照过去经验, Oracle 强烈建议您为每个数据库至少规划两个控制文件,并分散在两个实体磁盘上。如此可避免任一控制文件毁损时造成系统停摆。

设定数据区块大小:

Oracle9i数据库内存放数据的最小单位为「数据区块」(data block)。数据库内「标准数据区块」大小是设定在起始参数文件之DB_BLOCK_SIZE参数。Oracle9i数据库内最重要的SYSTEM 数据表空间就是以DB_LOCK_SIZE 设定值为基础所建立。此外DB_BLOCK _SIZE 也是建立新数据表空间时预设的数据区块大小。除了标准数据区块大小之外,Oracle9i 支持额外4 种「非标准数据区块」大小。

关于DB_BLOCK_SIZE 起始参数:

从Oracle9i 开始,DB_BLOCK_SIZE 所设定的仅是标准数据区块大小;绝大多数的数据库环境只需要设定该参数即可。一般来说,DB_BLOCK_SIZE 可设定为4K 或8K。如果此参数未经设定,则Oracle9i会自动依照数据库所在操作系统平台自行决定适当的数据区块大小。

需要注意的是,标准数据区块大小在数据库建立之后就无法改变,除非重建数据库。如果数据库的「数据区块」大小不同于「操作系统区块」大小,那么建议您将DB_BLOCK_SIZE 设为「操作系统区块」大小之整数倍。假定操作系统区块大小为4K ,则不妨设定DB_BLOCK_SIZE = 8192。在某些情况下,这样的组态方式将会显著地提升数据存取效能。

何谓「非标准数据区块」:

由「非标准数据区块」构成的数据表空间可经由CREATE TABLESPACE指令搭配BLOCKSIZE子句建立之;其区块大小设定值可为2K、4K、8K、16K、32K。需注意的是此类型数据区块将受到操作系统环境限制,不是所有操作系统都可以设定上述所有区块大小。

欲使用「非标准数据区块」时,您还必须适当组态SGA 内数据库缓冲区的子缓冲区,方式是藉由DB_nK_CACHE_SIZE 参数所设定(此参数容后说明)。

此项机制是Oracle9i 提出的新功能,在转移数据库时特别好用。举例来说,您的OLTP 数据库也许将数据区块大小设定为4K ,但是数据仓储系统使用的数据库却将数据区块大小设定为8K。藉由「非标准数据区块」的机制,您就可以平顺地将OLTP 数据库的数据转移到数据仓储系统的数据库。

影响SGA 容量的起始参数:

此类型起始参数将控制内存内「系统全域区」(System Global Area,SGA) 的大小,除了SGA_MAX_SIZE 之外,其它参数几乎都可以经由ALTER SYSTEM 指令动态地更改。借着此项特性,您可以在Oracle9i Instance运作时动态地增加或缩小SGA 容量。

设定「数据库缓冲区」大小:

一般情况下,Oracle9i 数据库缓冲区(database buffer cache)大小「标准数据区块」作为数据存取单位。如果您想在Oracle9i 数据库使用多重数据区块大小,则必须设定一组DB_ BLOCK_SIZE 与DB_nK_CACHE_SIZE 参数。如果上述两项参数在起始参数文件未明确设定,则O ra cle9i会自动设定适当的DB_ CACHE_SIZE值,且将DB_nK_CACHE_SIZE 设定为0。

关于DB_CACHE_SIZE 起始参数:

在Oracle8i 以前,数据库缓冲区大小是由DB_BLOCK_BUFFERS 与DB_BLOCK_SIZE 所决定;从Oracle9i 开始将由DB_CACHE_SIZE 取代之。需要注意的是,DB_CACHE_SIZE 是以

DB_BLOCK_SIZE 所设定的标准资料区块大小为基准。为了向前兼容,在Oracle9i 中仍旧可以设定DB_BLOCK_BUFFERS 参数。但是DB_BLOCK_BUFFERS 属于静态参数,无法在Oracle9i 数据库运作时进行动态调整,也不能与其它动态参数互相搭配使用。

关于DB_ nK_CACHE_SIZE 起始参数:

从Oracle9i 开始提供了「非标准数据区块」的支持,可经由下列参数设定:

●DB_2K_CACHE_SIZE

●DB_4K_CACHE_SIZE

●DB_8K_CACHE_SIZE

●DB_16K_CACHE_SIZE

●DB_32K_CACHE_SIZE.

DB_BLOCK_SIZE=4096

DB_CACHE_SIZE=20M

DB_2K_CACHE_SIZE=10M

DB_8K_CACHE_SIZE=8M

各参数之中的nk 即是设定非标准数据区块的大小。以下列参数设定为例:

使用上述参数所组态的数据库缓冲区将拥有以下特性:

1.「标准数据区块」大小为4K。

2.「标准数据区块」大小构成的数据库缓冲区容量为20M。

3.第一种「非标准数据区块」大小为2K ,其构成的缓冲区容量为10M。

4.第二种「非标准数据区块」大小为8K,其构成的缓冲区容量为8M。

请注意一点, DB_ nK_CACHE_SIZE 参数不能设定「标准数据区块」之缓冲区大小。举例来说,如果DB_BLOCK_SIZE 设定为4K,就不能再设定DB_4K_CACHE_SIZE 参数。

设定「共享区」与「大型区」容量:

SGA 内的共享区( Shared Pool )与大型区( Large Pool)分别由SHARED_POOL_SIZE与LARGE_POOL_SIZE 所设定;这两个参数都属于动态参数(SHARED_POOL_SIZE与

LARGE_POOL_SIZE 在Oracle9i 以前为静态变量)。如果起始参数文件内未设定这两个参数,则Oracle9i将自动决定其适当大小。

设定SGA 的相关注意事项:

SGA 最大容量由SGA_MAX_SIZE 所控制。您可以动态地改变该参数值,但是需注意

SGA_MAX_SIZE 为数据库缓冲区、共享区、大型区、以及其他SGA 组件之容量总和。各区域之大小不能超过SGA_MAX_SIZE 所设定。如果SGA_MAX_SIZE 未设定,则Oracle9i 会自动设定

SGA_MAX_SIZE为所有SGA 组件大小之总和。

设定处理程序最大数量:

起始参数PROCESSESS 可决定同时间连接Oracle9i 的操作系统程序最大数量。该参数值必须大于6;其中5 个是Oracle9i 背景处理程序,加上1 个使用者处理程序。假定同一时间您的Oracle9i 数据库同时间会有100 使用者上线,那么PROCESSES 至少应设定为105 。

设定空间回复管理方式:

任何数据库都应该具备某种特殊机制来确保交易的一致性与完整性。在Oracle9i数据库内即存有一份重要的交易相关信息,以便必要时可退回(rollback)失败的交易,或是回复(undo)某个数据处理动作。Oracle将这些信息统称为「回复项目」(undo entries)。Oracle9i的回复项目存放在「回复数据表空间」(undo tablespace)或是「退回区段」(rollback segments)。UNDO_MANAGEMENT 起始参数:

针对回复项目的管理,起始参数文件的UNDO_MANAGEMENT 可设定由下列两种方式之一启动Oracle9i Instance:

●AUTO:以“自动管理模式”启动Oracle9i Instance;其回复项目将储存于「回复数据

表空间」。

●MANUAL:以“手动模式”启动Oracle9i Instance;其回复项目将储存于「退回区段」。

为了向前兼容, UNDO_MANAGEMENT 的默认值为MANUAL 。

关于UNDO_TABLESPACE 起始参数:

当Oracle9i Instance 以“自动管理模式”启动时,将尝试寻找第一个可用的「回复数据表空间」以存放「回复项目」。如果执行CREATE ATABASE指令,且UNDO_MANAGEMENT设定为AUTO 时,Oracle9i 就会自动建立一个名为SYS_UNDOTBS的「回复数据表空间」。此数据表空间将是“自动管理模式”下预设的「回复数据表空间」。

此外,您还可以设定UNDO_TABLESPACE起始参数,以明确指定Oracle9i 所使用的「回复数据表空间」为何。如果系统内缺乏可用的「回复数据表空间」,则Oracle9i Instance 虽然可以启动,但是将使用SYSTEM 退回区段。Oracle 建议您尽量妥善运用「回复数据表空间」来取代「回复区段」,因为前者不但易于管理,也可以设定「回复项目」之维护时间。

关于ROLLBACK_SEGMENTS 起始参数:

ROLLBACK_SEGMENTS 起始参数内列出一连串「非系统退回区段」之相关信息。当数据库以“手动模式”进行回复项目管理时, Oracle9i Instance将会在启动时要求此类型退回区段。如果该参数内无任何设定值,则使用「系统退回区段」。Oracle9i 数据库的ROLLBACK_SEGMENTS 参数是为了向前兼容而保留,建议您以「回复数据表空间」取代之。

手动建立Oracle9i 数据库:

完成所有前置准备工作之后,您就可以依照先前的规划建立Oracle9i数据库。有别于使用「数据库建置组态精灵」(Database Configuration Assistant),手动建立数据库的方式主要是执行CREATE DATABASE 指令。以下是建立Oracle9i 数据库mydb 的完整步骤:

1.设定Oracle SID

2.选择DBA 验证方式

3.建立起始参数文件

4.启动Oracle Instance

5.执行CREATE DATABASE 指令

6.建立其它数据表空间

7.建立数据字典视图表

步骤1: 设定Oracle SID:

在一般情况下,每个Oracle9i 数据库都必须对应一个Oracle9i Instance。所以在建立数据库之前,您必须先指定Oracle9i Instance的系统标识符(system identifier),此系统标识符就是俗称的Oracle SID;您也可以将它视为Oracle9i Instance 之名称。

因为Oracle SID 可用以辨识不同的Oracle 数据库,因此SID 名称必须是唯一的,可经由操作系统的环境变量ORACLE_SID 设定之(注3)。

以下范例将设定数据库所使用的Oracle SID 为mydb:

ORACLE_SID = mydb

export ORACLE_SID

步骤2: 选择DBA 验证方式:

您必须经过数据库之验证手续,且被赋予适当系统权限后才可以建立Oracle9i 数据库。Oracle9i 用来验证DBA 的方式有两种,分别是「密码文件验证」与「操作系统验证」。建议您第一次手动建立数据库时先使用oracle 账号(安装Oracle9i 所用的账号) 经由「操作系统验证」来登入SQL*Plus。有关密码文件的建立与使用方式将在未来专栏中为大家详细介绍。

步骤3: 建立起始参数文件:

为了简化管理动作,建议您将起始参数文件置放于Oracle9i 预设目录下,并且依照标准格式为起始参数文件命名。Oracle9i 起始参数文件名之格式为:

init.ora

其预设存放路径则为:

$ORACLE_HOME/dbs

以mydb 数据库为例,起始参数文件名称可命名为initmydb.ora,并存放在

opt/oracle/product/9.0.1/dbs 目录下。如此一来,每当您欲执行STARTUP 指令启动Oracle9i Instance 时,系统会自动到预设目录下寻找起始参数文件,不需额外指定PFILE 选项。

以下范例起始参数文件之部分内容:

注:以如下Oracle9i 数据库为例:ORACLE_BASE=/opt/oracle,

而ORACLE_HOME=$ORACLE_BASE/product/9.0.1,

所以起始参数文件之预设目录应为opt/oracle/product/9.0.1/dbs 。

Sample Initialization Parameter File

# Cache and I/O

DB_BLOCK_SIZE=4096

DB_CACHE_SIZE=20971520

# Diagnostics and Statistics

BACKGROUND_DUMP_DEST=$ORACLE_HOME/admin/mydb/bdump

CORE_DUMP_DEST=$ORACLE_HOME/admin/mydb/cdump

TIMED_STATISTICS=TRUE

USER_DUMP_DEST=$ORACLE_HOME/admin/mydb/udump

# Control File Configuration

CONTROL_FILES=("$ORACLE_HOME/oradata/mydb/control01.ctl",

"$ORACLE_HOME/oradata/mydb/control02.ctl",

"$ORACLE_HOME/oradata/mydb/control03.ctl")

# Archive

LOG_ARCHIVE_DEST_1='LOCATION=$ORACLE_HOME/oradata/mydb/archive'

LOG_ARCHIVE_FORMAT=%t_%s.dbf

LOG_ARCHIVE_START=TRUE

# Miscellaneous

COMPATIBLE=9.0.0

DB_NAME=ora901

# Distributed, Replication and Snapshot

DB_DOMAIN=https://www.doczj.com/doc/c113822839.html,

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

# Network Registration

INSTANCE_NAME=ora901

# Pools

JAVA_POOL_SIZE=31457280

LARGE_POOL_SIZE=1048576

# Processes and Sessions

PROCESSES=150

# Redo Log and Recovery

FAST_START_MTTR_TARGET=300

# Resource Manager

RESOURCE_MANAGER_PLAN=SYSTEM_PLAN

# Sort, Hash Joins, Bitmap Indexes

SORT_AREA_SIZE=524288

步骤4: 启动Oracle Instance:

在Oracle9i 数据库中,较常用来启动Oracle9i Instance 的方式是使用SQL*Plus 与Oracle9i Enterprise Manager。以前者为例,您必须先进入SQL*Plus 环境,然后切换为sysdba 身份,方式为:

$ SQLPLUS /nolog

CONNECT / AS sysdba

接下来您必须执行STARTUP 指令将Oracle9i Instance 开启至NOMOUNT状态。一般来说,只有在建立新数据库,或是进行特定数据库维护工作时才会将Instance 开启至NOMOUNT 状态。因为将Instance 开启至MOUNT 状态时就会尝试挂载Oracle9i 实体数据库。试想,若系统本身尚未建立数据库实体文件案,怎么可能Instance 开启至MOUNT 或是OPEN状态呢?以下是STARTUP 指令的执行方式:

STARTUP NOMOUNT

此为STARTUP 指令最基本的执行方式。因为我们将起始参数文件置于预设目录($ORACLE_HOME/dbs)下,所以不需指定PFILE 选项。否则,您所执行的STARTUP 指令应该类似于:

STARTUP NOMOUNT pfile = $ORACLE_HOME/pfile/initmydb.ora

截至目前为止,我们才算是完成执行CREATE DATABASE 指令前的所有准备工作—在内存内已顺利配置SGA,并启动各种背景处理程序。但此时系统本身尚未存在任何实体数据库。接下来是最重要的步骤――执行CREATE DATABASE 指令。

步骤5: 执行CREATE DATABASE 指令:

当您执行CREATE DATABASE 指令建立新数据库时,Oracle9i 会完成下列各项主要工作:

●建立新数据库的实体文件案,如数据文件、重置日志文件。

●更新控制文件内相关信息。

●建立SYSTEM 数据表空间与SYSTEM 退回区段(rollback segment)。

●建立数据字典

●设定数据库使用的字符集

●设定数据库所在时区

以下是CREATE DATABASE 指令之范例:

CREATE DATABASE mydb

MAXINSTANCES 1

MAXLOGHISTORY 1

MAXLOGFILES 5

MAXLOGMEMBERS 5

MAXDATAFILES 100

DATAFILE '$ORACLE_HOME/oradata/mydb/system01.dbf' SIZE 200M REUSE

UNDO TABLESPACE undotbs DATAFILE

'$ORACLE_HOME/oradata/mydb/undotbs01.dbf'

SIZE 200M REUSE AUTOEXTEND ON NEXT 2048K MAXSIZE UNLIMITED

DEFAULT TEMPORARY TABLESPACE temptbs1

CHARACTER SET ZHT16BIG5

NATIONAL CHARACTER SET AL16UTF16

LOGFILE GROUP 1 ('$ORACLE_HOME/oradata/mydb/redo01.log') SIZE 100M,

GROUP 2 ('$ORACLE_HOME/oradata

将以上CREATE DATABASE 指令较重要的部分整理如下:

●数据库名称为mydb mydb,其全域数据库名称(global database name)为

https://www.doczj.com/doc/c113822839.html,。

●依照起始参数文件CONTROL_FILES 参数所设定的名称与路径分别建立三个控制文件。

●MAXINSTANCES 参数:可用来开启该数据库的Instance 数目。

●MAXDATAFILES 参数:该数据库所拥有的最大数据文件数量。

●如DATAFILE 子句所设定,该数据库SYSTEM 数据表空间所相对应的操作系统文件案为

$ORACLE_HOME/oradata/mydb/system01.dbf。假如该文件案已事先存在,则予以覆写。

●UNDO_TABLESPACE 用以建立与命名「回复数据表空间」(undo tablespace)。

●DEFAULT_TEMPORARY_TABLESPACE用以建立与命名该数据库预设的「暂时数据表空间」。

●ZHT16BIG5为数据库内存放数据的字符集。

●AL16UTF16为「国际字符集」(NATIONAL CHARACTER SET) 设定值,为NCHAR 、NCLOB 、

与NVARCHAR2 等unicode 字段所使用的字元集。AL16UTF16 为SQL NCHAR 数据型态预

设的字符集,其编码方式为UTF-16 。

●新数据库拥有三个在线重置日志文件(online redo log files),分别设定在LOGFILE

子句中。MAXLOGHISTORY 、MAXLOGFILES 、与MAXLOGMEMBERS 为重置日志文件的相关

设定。

●因为CREATE DATABASE 指令内并未包含ARCHIVELOG 子句,所以该数据库并不会进行重

置日志文件的封存动作。您可以在数据库建立后执行ALTER DATABASE 指令将数据库切

换为「封存模式」(ARCHIVELOG mode)。起始参数文件内与「封存模式」相关的参数为

LOG_ARCHIVE_DEST_1、LOG_ARCHIVE_FORMAT、与LOG_ARCHIVE_START。

●在CREATE DATABASE 指令内也可加上SET TIME_ZONE 子句以设定数据库时区(time

zone)。如果省略该子句,则数据库预设时区(time zone)与操作系统时区相同。

步骤6: 建立其它数据表空间:

以步骤5 的CREATE DATABASE 指令而言,新数据库内将只有一个SYSTEM数据表空间。为了更有效地使用及管理Oracle9i 数据库,建议您另外新增数个数据表空间,依照应用系统实际需求而定。以下指令分别建立users 与indx 数据表空间。

CREATE TABLESPACE users LOGGING

` DATAFILE '$ORACLE_HOME/oradata/mydb/users01.dbf '

SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED

EXTENT MANAGEMENT LOCAL;

CREATE TABLESPACE indx LOGGING

DATAFILE '$ORACLE_HOME/oradata/mydb/indx01.dbf '

SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED

EXTENT MANAGEMENT LOCAL;

步骤7: 建立数据字典视观表:

除了建立额外的数据表空间外,您还必须在数据库建立之后执行两个重要的指令文件:catelog.sql 与cataproc.sql 。这两个指令文件将在Oracle9i 数据库内建立管理工作必备的视观表、同义字(synonyms)、以及PL/SQL 套件(packages)。

●catalog.sql:

本指令文件内容为:在数据字典数据表上建立相关视观表、动态效能视观表、以及存

取各种视观表所用的同义字。此外, catalog.sql 也会将这些视观表的使用权限授权

给数据库使用者。

●cataproc.sql:

本指令文件内包含执行PL/SQL 程序所需的所有指令文件。

移除Oracle9i 数据库的方式:

移除Oracle9i 数据库的方式有两种。传统方式是手动删除所有数据库实体文件;较简便的方式是使用「数据库组态辅助精灵」。

如果您想手动移除先前建立的Oracle9i 数据库,步骤可能会稍微繁琐一点。因为所有数据库相关文件案(包含数据文件、重置日志文件、控制文件、起始参数文件、重置日志封存盘...等)都必须自操作系统删除。如果您不清楚这些文件案的存放位置,可查询V$DATAFILE、

V$LOGFILE、与V$CONTROLFILE等数据字典视观表。如果您欲移除的数据库是设定在「封存模式」,么建议您先检视起始参数文件内LOG_ARCHIVE_DEST_ n、LOG_ARCHIVE_DEST、与

LOG_ARCHIVE_DUPLEX_DEST 等参数,以便从作业系统删除旧有重置日志封存盘。

Oracle体系结构:

1、物理结构:

a)Datafiles 数据文件*.dbf

b)Redo log files 日志文件 *.log

c)Control files 控制文件*.ctl

d)Parameter file 参数文件 Intioraid.ora

2、内存结构(SGA)

占OS内存的60-70%,大小可由参数文件内参数计算shared pool(共享池),database buffer cache(数据缓冲区),redo log buffer(重做日志缓冲区)

SGA=share_pool_size+db_block_size*db_block_buffers+log_buffers

3、instance=SGA+background process

实例=内存分配 + 一组后台进程

如果把Oracle比作一部汽车,instance相当于汽车的发动机一样,启动oracle前提应先启动instance

服务器进程:

通常,最好通过调度程序进行连接并使用共享服务器进程,因为共享服务器进程保持了运行实例所需的最少数目的进程,所以共享服务器进程效率更高。

但是在以下情形,用户和管理员需要直接使用专用服务器进程连接到实例中:

●提交批处理作业(例如:当作业允许服务器进程少量或无空闲时间时)

●使用Recovery Manager(恢复管理器)备份、还原或恢复数据库

当Oracle配置为共享服务器时,如果要求要求一个专用服务器连接,那么用户必须使用配置为专业服务器的网络服务名称进行连接。需要明确的是,网络服务名称的值应该在连接描述符中包括SERVER=DEDICATED子句。

共享服务器体系结构需要Oracle Net Services,目标是共享服务器的用户进程必须通过Oracle Net Services进行连接,即使这些用户进程与Oracle实例是在同一台机器上,也是如此。

ORACLE实例的进程结构和内存结构

1)进程结构

进程是操作系统中的一种机制,它可执行一系列的操作步。在有些操作系统中使用作业(JOB)或任务(TASK)的术语。一个进程通常有它自己的专用存储区。ORACLE进程的体系结构设计使性能最大。

ORACLE实例有两种类型:单进程实例和多进程实例。

单进程ORACLE(又称单用户ORACLE)是一种数据库系统,一个进程执行全部ORACLE代码。由于ORACLE部分和客户应用程序不能分别以进程执行,所以ORACLE的代码和用户的数据库应用是单个进程执行。

在单进程环境下的ORACLE 实例,仅允许一个用户可存取。例如在MS-DOS上运行ORACLE 。

多进程ORACLE实例(又称多用户ORACLE)使用多个进程来执行ORACLE的不同部分,对于每一个连接的用户都有一个进程。

在多进程系统中,进程分为两类:用户进程和ORACLE进程。当一用户运行一应用程序,如PRO*C程序或一个ORACLE工具(如SQL*PLUS),为用户运行的应用建立一个用户进程。ORACLE 进程又分为两类:服务器进程和后台进程。服务器进程用于处理连接到该实例的用户进程的请求。当应用和ORACELE是在同一台机器上运行,而不再通过网络,一般将用户进程和它相应的服务器进程组合成单个的进程,可降低系统开销。然而,当应用和ORACLE运行在不同的机器上时,用户进程经过一个分离服务器进程与ORACLE通信。它可执行下列任务:

●对应用所发出的SQL语句进行语法分析和执行。

●从磁盘(数据文件)中读入必要的数据块到SGA的共享数据库缓冲区(该块不在缓冲区时)。

●将结果返回给应用程序处理。

系统为了使性能最好和协调多个用户,在多进程系统中使用一些附加进程,称为后台进程。在许多操作系统中,后台进程是在实例启动时自动地建立。一个ORACLE实例可以有许多后台进程,但它们不是一直存在。后台进程的名字为:PMON,LCLN,RECO,SMON,DBWR,LGWR,CKPT,ARCH。

DBWR:数据写进程

LGWR:日志文件写的进程

CKP:检测点

SMON:系统监控,做系统的清洁工作,执行系统出错后自动恢复工作.

PMON:进程监控,做程序的清洁工作,处理一些不正常退出的事件.

LCKN :Oracle系统表级或行级加锁的进程.

ARCH:归文件方式备份进程

RECO:恢复进程.

Dnnn 调度进程

Snnn 服务器

下面对后台进程的功能作简单介绍:

数据库写入进程(DBWR进程):该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。

『负责将数据快取缓冲区内异动过的数据区块回写至硬盘内的数据文件案(这个动作又称为checkpoint)。Oracle 系统预设只会启动一个DBWn(DBW0)处理程序。但在一般的大型在线交易(OLTP)系统下,资料库异动情况可能十分频繁,您可依实际需求额外配置其它的Database Writer 处理程序(DBW1-DBW9),可以有效地提升Oracle9i写入数据文件之效率。

有一点需要注意的是:在单一处理器的服务器系统,配置额外的DBWn 处理程序并无实质帮助。』

ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。在下列情况预示DBWR 要将弄脏的缓冲区写入磁盘:

●当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知DBWR进行写。该临界长度是为参数DB-BLOCK-WRITE-BATCH的值的一半。

●当一个服务器进程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没有查到未用的缓冲区,它停止查找并通知DBWR进行写。

●出现超时(每次3秒),DBWR 将通知本身。

●当出现检查点时,LGWR将通知DBWR

在前两种情况下,DBWR将弄脏表中的块写入磁盘,每次可写的块数由初始化参数DB-BLOCK-WRITE-BATCH所指定。如果弄脏表中没有该参数指定块数的缓冲区,DBWR从LUR表中查找另外一个弄脏缓冲区。

如果DBWR在三秒内未活动,则出现超时。在这种情况下DBWR对LRU表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,DBWR查找一个新的缓冲区组。每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK-WRITE-BATCH的值的二倍。如果数据库空运转,DBWR最终将全部缓冲区存储区写入磁盘。

在出现检查点时,LGWR指定一修改缓冲区表必须写入到磁盘。DBWR将指定的缓冲区写入磁盘。

在有些平台上,一个实例可有多个DBWR。在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。初始化参数DB_WRITER_PROCESSES来指定DBWR进程个数。

日志写入进程(LGWR进程):该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个ORACLE后台进程。重做日志条目在系统全局区(SGA)的重做日志缓冲区中生成,而且LGWR按顺序将重做日志条目写入联机重做日志文件。如果数据库有多元重做日志,那么LGWR会将重做日志条目写入联机重做日志文件的莫个组中。LGWR进程将自上次写入磁盘以来的全部日志项输出,LGWR输出:

●当用户进程提交一事务时写入一个提交记录。

●每三秒将日志缓冲区输出。

●当日志缓冲区的1/3已满时将日志缓冲区输出。

●当DBWR将修改缓冲区写入磁盘时则将日志缓冲区输出。

LGWR进程同步地写入到活动的镜象在线日志文件组。如果组中一个文件被删除或不可用,LGWR可继续地写入该组的其它文件。

日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志项写入日志文件后,服务器

进程可将新的日志项写入到该日志缓冲区。LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。

注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。

ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一起记录在日志中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。

检查点进程(CKPT进程):在特定事情,系统全局区的所有修改过的数据库缓冲区都是通过DBWN写入到数据文件中的。这些事件称为检查点。检查点进程负责在检查点通知DBWN,并且更新数据库的所有数据文件和控制文件,文件中指明最新的检查点。该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由LGWR执行。然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,由CKPT进程实现。对于许多应用情况,CKPT进程是不必要的。只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。CKPT进程不将块写入磁盘,该工作是由DBWR完成的。

初始化参数CHECKPOINT-PROCESS控制CKPT进程的使能或使不能。缺省时为FALSE,即为使不能。

『CKPT 会在适当时候产生一个checkpoint 事件,其意义为:

1. 确保缓冲区内经常被异动的数据也要定期被写入资料文件。对于这点,也许大家会

觉得非常疑惑。Oracle9i的LRU算法不是会尽量将使用者”最常使用的数据”保留在缓

冲区内,以提升数据存取的效率吗?没错,但请大家思考一个问题:如果完全遵循LRU 算法的话, DBWn 只会将” 最不常使用” 的数据回写至数据文件,这些”经常被使

用”的数据反而没机会存回硬盘!要是数据库当机或毁损,这些数据只能从重置日志

文件的纪录才能还原回来,无形中造成系统的额外负担。所以由CKPT 掌控checkpoint 时机,以确保这些数据照样可被妥善储存。

2. 在checkpoint之后,因为所有更新过的数据已经回写至磁盘资料文件案,万一

Oracle9i 需要进行instance recovery 时,就不再需要checkpoint之前的重置纪录,可缩短数据库重新启动的时间。此外, checkpoint 发生后,CKPT 会先通知DBWn将资

料快取缓冲区的dirty buffers 回写到数据文件,然后更新数据文件与控制文件之

checkpoint 信息。』

系统监视进程(SMON进程):当失败的实例再次启动时,系统监视进程执行紧急恢复操作。在多实例系统中,一个实例的SMON进程可以为其他失败的实例执行实例恢复操作。SMON进程还将清除不再使用的临时段,以及恢复在紧急实例恢复过程中因为文件读取或脱机错误遗漏的停用的事务,当表空间或文件恢复为联机状态时,事务最终将由SMON进程进行恢复。SMON进程还合并了数据库字典管理表空间中的空闲区域,以便使空闲空间连接,从而更容易分配空闲空间。该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。在具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。SMON进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。

『其主要工作有:

●数据库重新启动后的必要修复动作

●回收不用的暂时性区段(temporary segments)

●收集茼r典管理数据表空间茠榻ree extents

●修复交易不正常结束造成的问题』

oracle日志记录

【例1】 SQL>set time on SQL>create table hr.mydep1 as select * from hr.department; SQL>delete from hr.mydep1 where department_id=10; SQL>flashback table hr.mydep1 to timestamp 2 to timestamp(to_tate(‘2009-05-29 10:00:00’, ’yyyy-mm-dd hh24:mi:ss’)); 【例2】 SQL>create table student (name Varchar2(10), score Number); SQL>insert into student values(‘zs’, 68); SQL>update student set score=98 where name=’zs’; SQL>commit; SQL>select versions_starttime,versions_operation,name,score 2 from student versions between timestamp minvalue and maxvalue; 【例3】 SQL>CONNECT sys /zzuli AS sysdba SQL>select table_name, undo_sql from flashback_transaction_query where rownum<5;

【例1】控制文件备份为二进制文件 下面的语句可以将控制文件备份为一个二进制文件,即复制当前的控制文件: alter database backup controlfile to 'd:\backup_controlfile\control_09-05-25.bkp'; 【例2】控制文件备份为脚本文件 alter database backup controlfile to trace; 【例3】对视图V$CONTROLFlLE_RECORD_SECTION的查询。 select type,record_size,records_total,records_used from v$controlfile_record_section; 【例4】向数据库添加了一个新的重做日志组: alter database add logfile (‘e:\app\administrator\oradata\orcl\redo04.log’, ‘f:\oradata\log\redo04b.log’) Size 10m; 【例5】创建新的日志组,并将新的日志组指定为第4组: alter database add logfile group 4 (‘e:\app\administrator\oradata\orcl\redo004.log’,‘f:\oradata\log\redo004b.log') size 10m; 【例6】为第1组添加了一个新的成员日志文件: alter database add logfile member 'f:\oradata\log\redo01b.log' to group 1; 【例7】为第2组添加一个新成员: alter database add logfile member 'f:\oradata\log\redo02b.log' to

Oracle数据库归档日志日常管理与建议

Oracle数据库归档日志日常管理与建议 1.简介 近日,项目组偶有发生归档日志占满归档目录空间导致数据库hang住(无响应),导致系统不能正常应用的情况。针对此类问题,笔者从Oracle数据库归档模式、归档模式的优缺点、归档日志日常管理方法等各方面浅析并整理出归档日志日常管理与建议。请各项目组依据实际情况,规范管理归档日志,排查相关隐患,以保证系统的正常高效运营。 另外,对于已开启数据库归档模式的项目组,若数据库管理权限不在我方,可将相关归档管理建议与当地运维部门充分沟通,避免归档的不当管理引起事故。 2.数据库归档模式与归档日志 2.1数据库运行模式简介 Oracle数据库包括归档模式与非归档模式两种运行模式。 一般情况下Oracle数据库的联机重做日志会记录对数据库所做的所有的修改,如创建对象;插入、删除、更新对象;删除对象等,这些操作都会记录在联机重做日志里。Oracle 数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满(假设为1)的时候,就会发生日志切换,这时联机重做日志组2(假设为2)成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,这样反复进行。 如果数据库处于非归档模式,联机日志在切换时就会被丢弃。而在归档模式下,当发生日志切换的时候,被切换的联机日志会被归档。 如当前在使用联机重做日志1,当1被写满时,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到一个指定的目录下。这个目录为归档目录,这个过程称之为归档,拷贝的文件叫归档日志。 2.2归档模式优点与归档日志作用 数据库运行在归档模式时,后台进程ARCH会将联机日志的内容拷贝到归档目录生成归档日志。 当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。因此,开启归档模式及归档日志的益处与作用是非常明显的: 1.可以进行完全、不完全恢复。由于对数据库所做的全部改动都记录在日志文件中, 如果发生硬盘故障等导致数据文件丢失的故障,则可以利用物理备份和归档日志 完全恢复数据库,不会丢失任何数据。 2.可以进行联机热备。所谓联机热备,就是在数据库运行状态下,对数据库进行备 份,备份时用户对数据库的使用基本不受影响(不可避免的会对性能有负面影响)。 3.可以实施Data Guard。可以部署1个或多个备用数据库,从而最大限度地提供灾 难保护手段。

Oracle日志查看

Oracle日志查看 Oracle数据库的就业前景已经无须多言了,DBA毫无疑问是我们时代最幸福的岗位之一。尚观致力于Oracle技术的普及,以OCP、OCM认证帮助求职者实现就业竞争力的成倍增长。今天跟大家分享一篇由尚观整理,oracle日志查看的技术文档: 一.Oracle日志的路径: 登录:sqlplus "/as sysdba" 查看路径:SQL> select * from v$logfile; SQL> select * from v$logfile;(#日志文件路径) 二.Oracle日志文件包含哪些内容:(日志的数量可能略有不同) control01.ctl example01.dbf redo02.log sysaux01.dbf undotbs01.dbf

control02.ctl redo03.log system01.dbf users01.dbf control03.ctl redo01.log SHTTEST.dbf temp01.dbf 三.Oracle日志的查看方法: SQL>select * from v$sql (#查看最近所作的操作) SQL>select * fromv $sqlarea(#查看最近所作的操作) Oracle 数据库的所有更改都记录在日志中,从目前来看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行,因为原始的日志信息我们根本无法看懂,Oracle8i后续版本中自带了LogMiner,而LogMiner就是让我们看懂日志信息的工具,通过这个工具可以:查明数据库的逻辑更改,侦察并更正用户的误操作,执行事后审计,执行变化分析。

oracle 数据文件、表空间、日志文件、控制文件数据库管理

实验四 oracle 数据库管理 一、试验目的 掌握对数据文件、表空间、日志文件、控制文件的常用命令,作为DBA的必要准备。 二、实验内容 2.1 数据文件的管理 (1)在安装完毕之后,在INITsid.ORA参数文件有一个DB_FILES 参数,用于设置当前实例的数据外文件的个数。如: db_files = 80 如果在INITsid.ORA文件没有该参数,则可以用下面查询语句从视图中查到。如: SQL> col name for a20 SQL> col value for a50 SQL> set lin 100 SQL> select name,value from v$parameter where name = 'db_files'; NAME V ALUE -------------------- -------------------------------------------------- db_files 1024 (2)行命令建立表空间: 例1 CREATE TABLESPACE user_stu DA TAFILE 'h:/oracle/oradata/orcl/user_stu.dat' SIZE 20M DEFAULT STORAGE ( INITIAL 10K NEXT 50K MINEXTENTS 1 MAXEXTENTS 99 PCTINCREASE 10 ) ONLINE ; 例2:建立一个新的表空间,具有两个数据文件: CREATE TABLESPACE CRM_TAB DA TAFILE 'h:/oracle/oradata/orcl/crm01.dbf' size 10 MB,'h:/oracle/oradata/orcl/crm02.dbf' size 10 MB; (3)对一个已存在的表空间追加新数据文件: 例1 ALTER TABLESPACE user_stu Add datafile 'H:/oracle/oradata/orcl/user_stu01.dbf' size 30M; 例2 为表空间增加数据文件 ALTER TABLESPACE users ADD DATAFILE 'userora1.dbf ' SIZE 10M ; (4)数据文件更名 ALTER TABLESPACE users

用Oracle归档日志进行恢复的方法

联机重演日志没有丢失应使用完成恢复,如联机重演日志损坏,而又没有备份,就只能进行不完全恢复。 一、完全恢复: 1〃使用命令“svrmgrl”调用行方式服务器管理; 2〃输入命令“connect i nternal”,然后输入命令“startup m ount’; 3〃输入命令“recover d atabase;” 4〃按下ENTER,接受默认值。 5〃然后输入命令“alter d atabase o pen;”完成数据库恢复。 二、不完全恢复 警告: 应用不完成恢复前,必须将数据库做一次完全冷备份,因为应用不完全恢复后,联机重演日志将重置,以前的所有日志不可用。 如果恢复不成功,数据库就不能使用了。再次强调,做完全冷备份后再应用不完全恢复。 1).基于变化的恢复(change-based r ecovery) 要执行基于变化的恢复,需要知道丢失日志之前的系统写入归档重演日志的最大的变化号(SCN),然后可以启动恢复语句恢复数据库直到改变scn_number,其中比scn_number是写到已归档重演日志文件顺序号386的SCN(即,小于丢失日志顺序号387的SCN)。可以从V$log_history视图中得到SCN信息。 select f irst_change# f rom v$log_history w here s equence#=387; 其中387为最后一个有效的日志文件号加1,该例是查找386. 知道了SCN后,使用下述步骤完成恢复 1〃使用命令“svrmgrl”调用行方式服务器管理; 2〃输入命令“connect i nternal”,然后输入命令“startup m ount’; 3〃输入命令“recover d atabase u ntil c hange 9999;” 4〃在回答Oracle第一个归档重演日志建议信息时,输入“auto”,Oracle在找到第387号重演日志之前停止恢复。 5〃用命令“alter d atabase o pen r esetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用) 2).基于停止??恢复(cancel-based r ecovery) 1〃使用命令“svrmgrl”调用行方式服务器管理; 2〃输入命令“connect i nternal”,然后输入命令“startup m ount’; 3〃输入命令“recove r d atabase u ntil c ancel;”,Oracle提示需要的第一个归档重演日志文件名〃按下ENTER键

oracle 日志模式切换

oracle 日志模式切换 在Oracle数据库中,主要有两种日志操作模式,分别为非归档模式与归档模式。默认情况下,数据库采用的是非归档模式。作为一个合格的数据库管理员,应当深入了解这两种日志操作模式的特点,并且在数据库建立时,选择合适的操作模式。我们在sqlplus 下通过以下命令查看日志模式:archive log list; (非归档模式) (归档模式) 说明一下: database log mode 指定是数据库的日志模式,可为Archive Mode(归档)和No Archive Mode(非归档) Automatic archival 指定数据是否自动归档enable(自动),disabel(手动),要注意一下如果数据库的日志模式在归档下,但归档方为手动时要注意,如果归模日志满了,但没有进行清除数据,数据库停止写数据操作。 下面介绍一些常用操作: 1.查看数据库的日志模式 a.archive log list; 这个不在详细说明,因为上边图片己经很清楚了 b.通过动态性能视图进行查看v$database

那个log_mode字段就可以说明这个数据为归档模式 2.进行日志切换操作 这里我是从非归档模式向归归档模式操作. a.关闭运行数据库实例 shutdown immediate; b.备份数据库 该备份跟以后产生的日志一起用于将来的灾难恢复(很重要,如要改为归档日志模式,没有这个数据库备份,仅有日志文件是无法从该时间点恢复的) c.启动数据库实例到mount状态,但不要打开。 startup mount; d.切换数据库日志模式。 alter database archivelog;(设置数据库为归档日志模式) alter database noarchivelog;(设置数据库为归档日志模式) d.进行自动归档的切换 alter system archive log start alter system archive log stop (在standy模式不能切换为手动归档) e.打开数据库 alter database open; 3.手动归档相关操作

Oracle 使用RMAN备份数据库文件和归档日志

Oracle 使用RMAN 备份数据库文件和归档日志 当数据库打开时,可以使用RMAN BACKUP 命令备份如下对象: ● 数据库 ● 表空间 ● 数据文件 ● 归档重做日志 ● 控制文件 ● 备份集 在使用BACKUP 命令备份数据文件时,可以为其设置参数,定义备份段的文件名,文件数和每个输入文件的通道。 1.备份数据库 如果备份操作是在数据库被安全关闭之后进行的,那么对整个数据库的备份是一致的;与之相对应,如果数据库是在打开状态下对整个数据库进行的备份,则该备份是非一致的。非一致性备份整个数据库的操作步骤如下: (1)启动RMAN 并连接到目标数据库,输入BACKUP DATABASE 命令备份数据库。在BACKUP 命令中可以指定FORMA T 参数,为RMAN 生成的每个备份片段指定一个惟一的名称,以及存储的位置。 C:\>rman target system/admin nocatalog RMAN> backup database format 'f:\oracle_backup\ora11g_%Y_%M_%D_%U.bak' maxsetsize=2G; 还可以为BACKUP 命令指定TAG 参数,为备份片段定义备份标签。例如: RMAN>backup database tag='weekly_backup'; (2)如果建立的是非一致性备份,那么必须在完成备份后对当前的联机重做日志进行归档,因为在使用备份恢复数据库需要使用当前重做日志中的重做记录。 RMAN>sql'alter system archive log current'; (3)在RMAN 中执行LIST BACKUP OF DA TABASE 命令,查看建立的备份集与备份片段的信息。 RMAN> list backup of database; 如果需要对整个数据库进行一致性备份,则首先需要关闭数据库,并启动数据库到MOUNT 状态。例如: RMAN>shutdown immediate RMAN>startup mount RMAN>backup database format='f:\oracle_backup\%d_%s.bak'; RMAN>alter database open; 如果想要对某个表空间以外的整个数据库进行备份,则可以使用用如下一组命令: //设定在备份数据库的时候排除USER01; RMAN>configure exclude for tablespace user01; 注 意 BACKUP 命令只能对数据文件、归档重做日志文件和控制文件进行备份,如果要对其他重要的数据文件进行备份,则可以在操作系统中对其进行物理备份。

oracle警告日志 (20页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == oracle警告日志 篇一:oracle 11g的警告日志和监听日志 删除oracle 11g的警告日志和监听日志 oracle 11g的监听日志和警告日志都是在 /u01/oracle/diag/tnsls/oracle/listener目录和 /u01/oracle/diag/rdbms/db1/db1目录下都有以下分别简称listener目录和db1目录。这两目录下都有如下目录: alert cdump hm incident incpkg ir lck metadata stage sweep trace 其中警告日志在alert目录下,监听日志在trace目录下。listener目录下产生的日志文件比较大,是主要清理的对象,而db1目录下产生的文件比较小,基本不需要清除。在listener目录下监听日志是一个名为listener.log的文件,而警告日志log.xml,这个日志每到11M左右就会分割成一个 log_XXXX.xml的日志,逐渐累加。而在db1目录下两个日志的方式刚好相反,监听日志分割成很多个以.trc .trm的文件,而警告日志只有一个log.xml的文件。不知道oracle在搞什么鬼,也不知道原理是什么。希望有了解的朋友给予指点。 删除监听日志的方法如下: 切换到oracle用户 su oracle $lsctl set log_status off $mv listener.log /backup/ $lsctl set log_status on 监听日志启动后就会自动创建一个全新的listener.log文件,备份好的文件可以删除。如果不执行上述的命令直接删除listener.log,系统是不

Oracle日志(redo)机制探讨

Oracle日志(redo)机制探讨 【摘要】oracle数据库的redo机制是保障数据安全和故障恢复的至关重要的手段,也是对数据库性能影响非常巨大的关键因素。通过对oracle日志机制的探讨可以帮助数据库管理员更好的理解、维护oracle数据库。 【关键词】redo checkpoint 事务恢复 一、redo原理 计算机系统中最容易出现瓶颈的就是磁盘的I/O操作。Oracle通过批量方式将buffer cache(数据缓冲区)中发生变更的“脏”数据块写入数据文件。这样减少了低效率的离散写磁盘操作,大大减轻了磁盘I/O的压力。 通过将buffer cache中的变更后的数据延迟写入数据文件,提升了数据库的性能,但也带来了数据丢失的风险。为了保证buffer cache中的“脏”数据块在系统发生故障时不丢失,oracle要将这些数据块的变更记录下来,并及时写入日志。即使系统发生故障,oracle通过日志中记录的redo信息可以将数据块发生的变化过程重演,这样就可以将数据库恢复到故障前的最后时刻。 二、日志文件 为了保证redo信息及时写入日志文件,oracle的lgwr(写

日志进程)非常活跃。为了避免磁盘缓冲带来的滞后风险Lgwr采用了直接写磁盘(direct IO)的方式将redo信息直接写入文件。触发lgwr的条件很多:每3秒钟;事务提交(commit);redo log buffer(日志缓存区)1/3满或有1MB 数据;dbwr(写数据文件进程)启动时发现“脏”数据库对应的redo信息未写入日志。 Oracle的日志文件是循环使用的,所以至少要两个日志组。为保障日志文件安全,每组日志可以有多个镜像(多镜像会增加lgwr的负担)。当一个日志文件写满后,会切换到另一个日志文件(log switch)。切换日志会触发检查点(checkpoint)事件,通知dbwr进程将写满的日志文件中保护的数据块写入数据文件。在checkpoint完成之前,该日志文件是不能被覆盖重用的。因此,日志文件通常会有current (当前)、active(checkpoint未完成)、inactive(checkpoint 已完成)三种状态。如果是新添加的日志文件或者数据库resetlogs(重置),日志文件的状态为unused(未使用)。 当日志文件切换频繁时,就会发生因日志文件处于active状态而无法切换的问题,此时数据库处于“挂起”状态,等待checkpoint完成,Alert文件中会记录:checkpoint not complete。发生这种问题对系统性能影响非常大,严重的甚至会导致业务中断。通常数据库管理员会采取增加日志文件大小、增加日志组数这两种方法来应对。

Oracle 改变重做日志位置或名称

Oracle 改变重做日志位置或名称 在所有后台进程中,LGWR进程活动最为频繁,它需要不断地将事务变化由重做日志缓冲区写入重做日志中。在数据库文件、控制文件和重做日志这3种文件中,重做日志的I/O操作最频繁。为了提高I/O性能,应将重做日志分布到I/O操作相对较少、速度最快的磁盘设备上。规划重做日志时,应将同一个日志组的不同日志成员尽可能地分布到不同磁盘上,以防止磁盘损坏而导致所有日志成员丢失。例如,假设在初始阶段,日志组二中的日志成员被放在同一块磁盘上,但是后来出于完全和性能方法的考虑,DBA为服务器新增加了一块磁盘,并且将日志组二中的一个日志成员移动到新磁盘上,此时就需要改变该日志成员的存放位置。 下面修改重做日志文件的名称和位置的具体操作步骤如下: (1)关闭数据库。 SQL> connect /as sysdba SQL> shutdown (2)复制或移动日志成员到目标位置。当闭数据库后,DBA就可以使用操作系统命令复制或移动日志成员到新位置。例如,修改原日志文件的名称。 (3)重新启动数据库实例,加载数据库,但是不打开数据库。 SQL> startup mount; (4)使用带RENAME FILE子句的ALTER DATABASE语句重新设置重做日志文件的路径和名称。 SQL> alter database rename file 2 'd:\app\Administrator\oradata\orcl\redo03.log', 3 'd:\app\Administrator\oradata\orcl\redo02.log', 4 'd:\app\Administrator\oradata\orcl\redo01.log' 5 to 6 'd:\app\Administrator\oradata\orcl\redo03a.log', 7 'd:\app\Administrator\oradata\orcl\redo02a.log', 8 'd:\app\Administrator\oradata\orcl\redo01a.log'; 数据库已更改。 (5)打开数据库 SQL> alter database open; (6)备份控制文件 重新启动数据库后,对联机重做日志文件的修改将生效。通过查询数据字典V$LOGFILE 可以获知数据库现在所使用的重做日志文件。

Oracle Archive log

Oracle归档日志(Archive Log 一) 归档日志即重做日志的备份,使用归档日志的目的是为了实现介质恢复。 一.日志操作模式 1.Noarchivelog(非归档模式) 不保存重做日志。 不能在open状态下进行物理备份;要定期执行完全数据库备份;只能将数据库恢复到上次的完全备份点。 2.Archivelog 当进行日志切换时,ARCH进程会将重做日志的内容复制到归档日志中。 在归档重做日志前,新事务变化不能覆盖旧事务变化。 可以在open 状态下进行物理备份。 可以将数据库恢复到失败前的状态。 可以是用备份数据库与主数据库保持同步。 二.开启归档 1.改变日志操作模式 shutdown immediate; startup mount; alter database archivelog; alter database open; 修改日志操作模式后,必须重新备份数据库 2.归档重做日志

1).手工归档 alter system archive log all; 2).自动归档 设置初始化参数:log_archive_start=true shutdown immediate; startup pfile=. 3).检查日志操作模式 archive log list; 三.指定归档位置 1.使用log_archive_dest 1).设置归档目录 log_archive_dest log_archive_duplex_dest 2).设置归档日志格式 2.使用log_archive_dest_n 1).指定归档位置 log_archive_dest_1=’location=f:\arc1’log_archive_dest_3=’service=standby’2).设置其他初始化参数 log_archive_dest_state_1=enable log_archive_dest_state_3=defer

使用Oracle的外部表查询警告日志文件

使用Oracle的外部表查询警告日志文件 从Oracle9i开始,Oracle的外部表技术(Oracle External Tables)被极大的增强,通过外部表访问外部数据增强了Oracle数据库和外部数据源进行数据交互的能力,对于数据仓库和ETL来说,这些增强极大的方便了数据访问。 对于DBA来说,最常见一个例子是可以使用外部表来访问警告日志文件或其他跟踪文件. 以下一个例子用来说明外部表的用途。 首先需要创建一个Directory: [oracle@jumper oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Sun Oct 15 21:42:28 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning option JServer Release 9.2.0.4.0 - Production SQL> create or replace directory bdump 2 as '/opt/oracle/admin/eygle/bdump'; Directory created. SQL> col DIRECTORY_PATH for a30 SQL> col owner for a10 SQL> select * from dba_directories;

Oracle 删除重做日志

Oracle 删除重做日志 当日志成员出现损坏或丢失时,后台进程LGWR不能将事务变化写入到该日志成员中,在这种情况下应该删除该日志成员;当日志组尺寸不合适时,需要重新建立新日志组,并删除原有的日志组。删除重做日志是使用ALTER DATABASE语句来完成的,执行该语句要求数据库用户必须具有ALTER DATABASE系统权限。 1.删除日志成员 要删除一个成员日志文件,只需要使用带DROP LOGFILE MEMBER子句的ALTER DA TABASE语句。例如,下面的语句将删除4号日志组的第2个成员: SQL> alter database drop logfile member 2 'e:\oradata\orcl\redo04b.log'; 数据库已更改。 上面语句只是在数据字典和控制文件中将重做日志成员的信息删除,并不会在操作系统中物理地删除相应的文件,这需要确认删除成功后手工在操作系统中删除文件。 2.删除日志组 由于已经存在日志组的尺寸不能改变,所以当日志组尺寸不合适时,就需要重新建立日志组并指定合适尺寸,然后删除不符合尺寸要求的日志组。在删除一个日志组时,其中的成员文件也将全部被删除。在删除日志组时,首先需要考虑如下几点: ●无论日志组中有多少个成员,一个数据库至少需要两个日志组。 ●只能删除处于INACTIVE状态的日志组。如果要删除CURRENT状态的重做日志 组,则必须执行一个手工切换日志,将它切换到INACTIVE状态。 ●如果数据库处于归档模式下,在删除重做日志组之前必须确定它已经被归档。 因此,在删除重做日志组之前,可以查询V$LOG动态性能视图来获知各个重做日志组的状态以及它是否已经归档。例如: SQL> select group#,archived,status from v$log; GROUP# ARC STATUS ---------- --- ---------------- 1 NO CURRENT 2 NO INACTIVE 3 NO INACTIVE 4 YES UNUSED 要删除一个重做日志组,需要使用带有DROP LOGFILE子句的ALTER DATABASE语句。例如,下面的语句可以删除4号重做日志组: SQL> alter database drop logfile group 4; 同样,该语句只是在数据字典和控制文件中将重做日志组的记录信息删除,并不会物理地删除操作系统中相应的文件,这需要手工在操作系统中将相应的文件删除。 3.清空重做日志组 清空重做日志文件就是将重做日志文件中的内空全部初始化,这相当于删除该重做日志文件,然后再重新建立它。即使数据库只拥有两个重做日志组,或者要清空的重做日志组正处理CURRENT状态,在这些状态下都可以成功执行清空操作。

ORACLE数据库归档日志满后造成系统宕机的处理方法

第一次宕机时,初始以为是系统内存溢出,于是重启应用服务器,发现应用服务器在启动时报错,错误为无法连接到数据库。于是连接数据库服务器,打开EM后发现系统报错如图: 提示归档日志写入失败,检查服务器发现磁盘空间满了,于是清理磁盘空间后,重启数据库问题解决。随后把服务器磁盘空间扩容,直接给了oracle数据所在盘1TB的磁盘空间。第二次又出现此问题,经过仔细检查,并与同事确认后,发现是由于ORACLE数据库的归档日志被启用了,而我们系统默认是没有启用ORACLE数据库归档日志这个功能的。 使用sql命令查看: Sql>sqlplus / as nolog;---------------------启动sql*Plus Sql> connect sys/password@orcl as sysdba; Sql> archive log list; 数据库日志模式存档模式 自动存档启用 存档终点USE_DB_RECOVERY_FILE_DEST 最早的联机日志序列4888 下一个存档日志序列4890 当前日志序列4890 Sql> show parameter db_recovery_file_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string D:\oracle\product\10.2.0/flash_recovery_area db_recovery_file_dest_size big integer 20G 发现默认的归档路径为D:\oracle\product\10.2.0/flash_recovery_area。而且限制使用空间为20G。由于每天产生的oracle归档日志差不多就占用2个G的磁盘空间,而且oracle自身并不会自动清理也没有相关设置自动清理归档日志的功能,一段时间不进行清理,20G空间很快就满了。 与客户商议,准备关闭归档日志功能,客户了解情况后,觉得归档日志功能还是需要开启,(归档日志是oracle灾难恢复的必要数据),于是准备把归档日志使用空间扩大,设成200g。 处理方法: 一、首先要处理日志空间满的情况: 1、删除归档日志物理文件,归档日志一般都是位于D:\oracle\product\10.2.0\flash_recovery_area\ORCL\ARCHIVELOG目录下,以日期文件夹存放,删除时至少保留最近几天的日志用于数据库恢复。 2、归档日志的物理文件删除后,ORACLE可以正常登录了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM 管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,利用RMAN进行删除操作; 进入cmd, 1.指定数据库实例 C:/Documents and Settings/Administrator>SET ORACLE_SID =orcl 2.连接数据库

Oracle通过归档日志还原数据

Oracle通过归档日志还原数据 我要投稿 [ Oracle 的日志模式分为 archivelog (启用归档日志) 和 noarchivelog () 两种模式。 查看数据库日志模式: select log_mode from v$database; log_mode ----------------------------------- archivelog 如何启用Oracle的归档方式: 1.参照以下内容编辑init.ora文件: log_archive_start = true log_archive_dest_1 = " LOCATION=D:\Oracle\oradata\ORCL\archive " og_archive_format = %%ORACLE_SID%%T%TS%S.ARC Oracle 归档日志还原数据(还原前请做好冷备份): sqlplus /nolog conn / as sysdba; archive log list; (查看日志文件列表,查看单个日志文件可用 strings xxx.dbf to xx.txt) recover database until time '2011-09-15:15:00:00'; (提示:使用基于时间的恢复,时间的格式是YYYY/MM/DD HH24:MI:SS,并且用单引号括起。) 基于时间的恢复(time-based recovery) 为使用基于时间的恢复,必须知道记录在V$log_history归档重演日志序号387

(丢失重演日志)的时间,通过执行查询语句“select * from v$log_history where sequence#=387;” 或者 recover database until change 9999; alter database open resetlogs; (应用该命令前请确认已数据库已备份,如打开 失败,日志将不可用) 作者“学习笔记” 如何解决ORA-01033问题 (2010-05-08 20:49:35) 转载 标签: oracle my 日志文件 数据文件 sql it Oracle错误:ORA-01033 错误编码:ORA-01033: ORACLE initialization or shutdown in progress 故障描述:因为移动了数据库文件([NAME].DMP)/日志文件等文件,导致数据库连接出现ORA-01033错误。 故障分析:网上有一种常见的说法是该类故障通常是由于移动文件而影响了数据库日志文件出现损坏而导致的无法正常进行IO操作而引起的错误。ORACLE将识别为数据库未装载完成而导致出现如上错误。

oracle日志文件

分类:Oracle 体系结构2010-07-20 14:11 2259人阅读评论(5) 收藏举报--========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --========================================= 一、Oracle中的几类日志文件 Redo log files -->联机重做日志 Archive log files -->归档日志 Alert log files -->告警日志 Trace files -->跟踪日志 user_dump_dest -->用户跟踪日志 backupground_dump_dest -->进程跟踪日志 --查看后台进程相关目录 SQL> show parameter dump NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ background_core_dump string partial background_dump_dest string /u01/app/oracle/admin/orcl/bdump core_dump_dest string /u01/app/oracle/admin/orcl/cdump max_dump_file_size string UNLIMITED shadow_core_dump string partial user_dump_dest string /u01/app/oracle/admin/orcl/udump 关于Oracle 常用目录及路径请参考:Oracle 常用目录结构(10g) 关于Oracle 体系结构请参考:Oracle实例和Oracle数据库(Oracle体系结构) 二、联机重做日志的规划管理 1.联机重做日志 记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等) 提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复) 可以被分组管理 2.联机重做日志组 由一个或多个相同的联机日志文件组成一个联机重做日志组 至少两个日志组,每组一个成员(建议每组两个成员,分散放开到不同的磁盘)

Oracle数据库日志查看工具LogMiner的使用详解

一、Oracle日志的路径 登录:sqlplus "/as sysdba" 查看路径:SQL> select * from v$logfile; SQL> select * from v$logfile;(#日志文件路径) 二、Oracle日志文件包含哪些内容 1.control01.ctl example01.dbf redo0 2.log sysaux01.dbf undotbs01.dbf 2.control02.ctl redo0 3.log system01.dbf users01.dbf 3.control03.ctl redo01.log SHTTEST.dbf temp01.dbf 三、Oracle日志的查看方法 SQL>select * from v$sql (#查看最近所作的操作) SQL>select * fromv $sqlarea(#查看最近所作的操作) Oracle 数据库的所有更改都记录在日志中,从目前来看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行,因为原始的日志信息我们根本无法看懂,Oracle8i后续版本中自带了LogMiner,而LogMiner就是让我们看懂日志信息的工具,通过这个工具可以:查明数据库的逻辑更改,侦察并更正用户的误操作,执行事后审计,执行变化分析。 四、LogMiner的使用 1、创建数据字典文件(data-dictionary) 1).首先在init.ora初始化参数文件中,添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:UTL_FILE_DIR = ($ORACLE_HOME\logs) ,重新启动数据 库,使新加的参数生效: SQL> shutdown; SQL>startup; 2).然后创建数据字典文件 1.SQL> connect /as sysdba 2.SQL> execute dbms_logmnr_d.build(dictionary_filename => 'dict.ora',dictionary_location => '/data1/oracle/logs'); 3.PL/SQL procedure successfully completed 2、创建要分析的日志文件列表 1).创建分析列表,即所要分析的日志 1.SQL>execute dbms logmnr.add logfile(LogFileName => '/data1/oracle/oradata/akazamdb/redo01.log',Options => dbms_logmnr.new); 2.PL/SQL procedure successfully completeds

Oracle丢失归档日志文件的数据库恢复方法

Oracle丢失归档日志文件的数据库恢复方法 丢失归档日志文件的数据库恢复方法,从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据。场景:一个磁盘损坏了并且丢失了一个数据库文件。从一周前的热备转储数据文件,不幸的是丢失了几个归档日志文件。但是有问题的数据文件包含了最重要的表,如何能够挽救数据呢? 每个DBA都知道这是有问题的,一定会丢失数据,因为某些事务丢失了,问题是会丢失多少数据?Oracle 使用硬线路位置并且由于存在完整性约束问题,因此不允许正常打开数据。但是如果使用非常规的方法让Oracle删除其硬线路属性,那么应该能够提取尽可能多的数据。而通常这会比损失全部数据要好很多。 详细过程通常如果仅仅丢失了堆表的索引,或者某些能够很容易重建的数据,那么最好的方法应该是删除表空间并重建这些对象然后重新输入。但是如果丢失的数据文件包含了重要数据并且很难恢复,而且只有前一次的备份却又丢失了某些归档日志,那么用户可能希望能够尽可能多的从有问题的表空间恢复数据并且删除和重建表空间。 主要的步骤如下: 1. 对当前拥有的数据进行一个冷备; 2. 转储丢失的数据库文件备份并应用可以应用的日志; 3. 设置未文档化的初始化参数,其允许你在当前状态打开数据库; 4. 执行exp并提取全部可以从有问题的表空间提取的数据; 5. 从先前的冷备转储数据库; 6. 使毁坏的数据文件offline; 7. 执行exp并提取第4步没有提取的额外数据; 8. 在一次从冷备转储; 9. 删除有问题的表空间; 10. 重建有问题的表空间; 11. 使用第四步和第七步提取的数据重建数据; 使用案例描述:ORDTAB表空间的一个数据文件ordtab03.dbf毁坏,其包含很多ORDERS表的分区,数据文件热备于July 4,2004,July 4—至今的某些归档日志丢失。 第一步:备份数据库第一步的任务是冷备当前拥有的任何数据文件,在线重做日志,和控制文件。如果丢失了一个/多个数据文件但是数据库仍然是open的,那么对每个剩余的数据文件进行热备并确保备份期间/之后的归档被安全保存。

相关主题
文本预览
相关文档 最新文档