Archive for December, 2009

Plan is a keyword to succeed

Planning is a key to the success of many scholars because it forces you to examine yourself, to improve your performance, and to help overcome the three inherent problems of humans – laziness, greed, and selfishness! If you want to succeed, be serious about this.
下载本文的PDF版本, 方便离线阅读转载

Oracle数据库基本常用命令

1、得到数据库名和创建日期
SELECT name, created, log_mode, open_mode FROM v$database;
2、ORACLE数据库的计算机的主机名,ORACLE数据库的实例名及ORACLE数据库管理系统的版本信息
SELECT host_name, instance_name, version FROM v$instance;
3、为了知道oracle数据库版本的一些特殊信息
select * from v$version;
4、获取控制文件名字
select * from v$controlfile;
5、得到Oracle数据库的重做日志配置信息
SELECT group#, members, bytes, status, archived FROM v$log;
select GROUP#,MEMBER from v$logfile;
6、获取oracle的每个重做日志(成员)文件所存放的具体位置
select * from v$logfile;
7、知道ORACLE数据库的备份和恢复策略和归档文件的具体位置
archive log list
8、知道ORACLE数据库中到底有多少表空间以及每个表空间的状态
select tablespace_name, block_size, status, contents, logging from dba_tablespaces;
select tablespace_name, status from dba_tablespaces;
9、知道每个表空间存在哪个磁盘上以及文件的名字等信息
SELECT file_id, file_name, tablespace_name, status, bytes from dba_data_files;
select file_name, tablespace_name from dba_data_files;
10、知道Oracle数据库系统上到底有多少用户和都是什么时候创建的
select [...]

Oracle static and dynamic parameters

在Oracle中,从9i开始引入了spfile,也就是服务 器端初始化参数,有很多是可以支持在线修改的,也就是修改会马上生效,详细内容看下面的说明:
The ISSYS_MODIFIABLE column in V$PARAMETER tells us whether the parameters are static or dynamic. Static parameters require the instance to be restarted while dynamic parameters can take effect(生效) immediately upon(在…之后) being changed.
SQL> select distinct issys_modifiable from v$parameter;
ISSYS_MODIFIABLE
—————————
DEFERRED
FALSE
IMMEDIATE

If the ISSYS_MODIFIABLE value is set to FALSE for a parameter, it means that the parameter cannot change its value in the lifetime(一生) of [...]

Oracle background processes

1 数据库的物理结构和逻辑结构之间的关系由后台进程来维护和实现,后台进程由数据库来管理
2 只有当出现问题,才创建跟踪文件。后台进程追踪文件的命令约定和位置随操作系统和数据库版本而定
3 一般而言,追踪文件含有后台进程名和后台进程的操作系统进程ID。通过设定BACKGROUND_DUMP_DEST来指定后台进程追踪文件位置
4 排除数据库故障时,追踪文件是最重要的
5 影响后台进程的严重问题通常记录在数据库的警告日志中,警告日志通常位于BACKGROUND_DUMP_DEST目录下,路径为Oracle_BASE目录下的/admin/INSTANCE_NAME/bdump目录
6 可以查看视图V$BGPROCESS查看数据库中可用后台进程的完整清单
7 SMON (系统监控程序)进程执行所需的实例恢复操作(使用联机重做日志文件),它也可以清除数据库,消除系统不再需要的事务对象,还可以将连续的自由空间合成一个大的自由空间,SMON只合并表空间中的空闲空间,这些表空间的默认pctincrease存储值为0
8 PMON (进程监控程序)后台进程清除失败的用户进程,释放用户当时正在使用的资源,同SMON一样,PMON周期性地唤醒检测它是否需要被使用。
9:DBWR(数据库写入程序)后台进程负责管理数据块缓冲区及字典缓存区的内容,它以批量写入的方式将修改块从SGA写到数据文件中. 当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时, DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。 ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。
在下列情况预示DBWR 要将弄脏的缓冲区写入磁盘:
n         当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知DBWR进行写。该临界长度是为参数DB-BLOCK-WRITE-BATCH的值的一半。
n         当一个服务器进程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没有查到未用的缓冲区,它停止查找并通知DBWR进行写。
n         出现超时(每次3秒),DBWR 将通知本身。
n         当出现检查点时,LGWR将通知DBWR .
在前两种情况下,DBWR将弄脏表中的块写入磁盘,每次可写的块数由初始化参数DB-BLOCK-WRITE-BATCH所指定。如果弄脏表中没有该参数指定块数的缓冲区,DBWR从LUR表中查找另外一个弄脏缓冲区。 如果DBWR在三秒内未活动,则出现超时。在这种情况下DBWR对LRU表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。每当出现超时,DBWR查找一个新的缓冲区组。每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK-WRITE-BATCH的值的二倍。如果数据库空运转,DBWR最终将全部缓冲区存储区写入磁盘。
在出现检查点时,LGWR指定一修改缓冲区表必须写入到磁盘。DBWR将指定的缓冲区写入磁盘。
10 每个数据库只有一个SMON和一个PMON进程在运行,但可有多个DBWR进程,多个DBWR有助于在进行大的操作期间减少DBWR冲突。
11 DBWR的数量由参数DB_WRITER_PROCESSES 决定,命名方式为:DBW1、DBW2、DBW3…
12 LGWR(日志写程序)后台进程负责把联机重做日志缓冲区的内容写入联机重做日志文件,LGWR分批将日志条目写入联机重做日志文件,重做日志缓冲区条目总是包含着数据库的最新状态,这是因为将数据块缓冲区中的修改数据块写入到数据文件中之前,DBWR进程将一直处于等待状态
12 LGWR是数据库正常操作时唯一向联机重做日志文件写入内容并从重做日志缓冲区直接读取内容的进程.与DBWR对数据文件执行的完全随机访问相反,联机重做日志文件按顺序方式写入,如果联机重做日志文件被镜像,LGWR同时向镜像日志文件中写入内容.
以下几个条件触发LGWR执行写操作:
(1)超时(timeout)
当LGWR处于空闲状态时,它依赖于rdbms ipc message等待,处于休眠状态,直到3秒超时时间到。如果LGWR发现有redo需要写出,那么LGWR将执行写出操作,log file parallel write等待事件将会出现。
(2)缺省的_log_io_size等于1/3 log buffer大小,上限值为1M,此参数在X$KSPPSV中显示的0值,意为缺省值。也就是,LGWR将在Min(1M,1/3 log buffer size)时触发。注意此处的log buffer size是以log block来衡量的。此值通常为512 bytes.
(3)提交(commit)
当一个事物提交时,在redo stream中将记录一个提交标志。
在这些redo被写到磁盘上之前,这个事物是不可恢复的。所以,在事务返回成功标志给用户前,必须等待LGWR写完成。进程通知LGWR写,并且以log file sync事件开始休眠,超时时间为1秒。
Oracle的隐含参数_wait_for_sync参数可以设置为false避免redo file sync的等待,但是就将无法保证事务的恢复性。
注意,在递归调用(recursive calls)中的提交(比如过程中的提交)不需要同步redo直到需要返回响应给用户。因此递归调用仅需要同步返回给用户调用之前的最后一次Commit操作的RBA。存在一个SGA变量用以记录redo线程需要同步的log block number。
如果多个提交在唤醒LGWR之前发生,此变量记录最高的log block number,在此之前的所有redo都将被写入磁盘。这有时候被称为组提交(group commit).
(4)在DBWR写之前
如果DBWR将要写出的数据的高RBA超过LGWR的on-Disk RBA,DBWR将post LGWR去执行写出。在Oracle8i之前,此时DBWR将等待log file sync事件。从Oracle8i开始,DBWR把这些Block放入一个defer队列,同时通知LGWR执行redo写出,DBWR可以继续执行无需等待的数据写出。
13 CKPT(检查点进程)用来减少执行实例恢复所需的时间,检查点使DBWR将自上一个检查点之后的全部已修改的数据块写入数据文件,并更新数据文件头和控制文件以记录该检查点.当一个联机重做日志文件被填满时,检查点进程会自动出现,可以使用实例的初始化参数文件中的 LOG_CHECKPOINT_INTERVAL 参数设置让一个更频繁的检查点出现
14 ARCH 后台进程以循环方式写入联机重做日志文件,一旦最后一个重做日志文件被填满时,LGWR 就开始重写第一个重做日志文件的内容。当Oracle以ARCHIVELOG(归档方式)模式运行时,数据库在开始重写重做日志文件之前先对其进行备份。归档可以写入到一个磁盘、备份数据库和网络磁盘中
15 RECO(恢复进程)用于解决分布式数据库中的故障问题,只有在平台支持Distributed
Option(分布式选项)且初始化参数文件中的DISTRIBUTED_TRANSACTIONS参数值大于零时才创建这个进程。
16 CJQn Oracle的作业队列管理依赖于后台进程的执行,它们进行数据刷新及其他定期的作业。调度进程CJQ0,选择将要执行的作业并扩展作业队列进程(J000-J999)以执行这些作业,其最大数量由初始化参数JOB_QUEUE_PROCESSES 决定
17 LMSn 当使用Oracle真正的应用集群(Oracle Real Application Clusters)选项时,多个LMS后台进程(命令为LCK0-LCK9)用于解决内部实例的锁定问题
18 Dnnn (调度程序进程)是共享服务器结构的一部分,有助于减少处理多个连接所需要的资源。对于数据库服务器支持的每一种协议必须至少创建一个调度程序进程,调度程序进程在数据库启动时,基于初始化参数DISPATCHERS创建,也可以在数据库打开时创建或取消。
19 Server:Snnn 创建服务器进程来管理需要专用服务器的数据库连接。服务器进程可以数据文件进行I/O操作。它的最大数量由初始化参数SHARED_SERVERS确定
20 Pnnn(并行查询服务器进程) 当数据库内部启用并行查询选项,一个查询的资源要求可以分布在多个处理器中。当实例启动时,就启动指定数量的并行查询服务器进程,其数量由参数:PARALLEL_MIN_SERVERS参数决定。这样的进程出现在操作系统级,其命名为P000、P0001等。其最大数量由PARALLEL_MAX_SERVERS 决定。
需要牢牢记住的几个进程触发条件
查询( Query )处理步骤
查询不同于其它类型的SQL 语句,因为如果查询成功它们会返回作为结果的数据,查询可以返回一行或者上千行,而其它语句只是返回成功或失败,查询的处理有三个主要阶段:
l 分析编译SQL 语句
执行标识选定的行或对数据应用DML 更改l
提取返回SELECTl 语句查询的行
1. 分析SQL 语句:在分析阶段SQL 语句从用户进程传递到服务器进程,并且SQL 语句的分析说明被载入共享的SQL 区,在分析过程中服务器进程做如下工作:
在共享池中搜索SQL 语句的现有副本l
通过检查语法验证SQLl 语句
执行数据字典查找来验证表和列的定义l
分析SQL 语句续l
l 获取对象的分析锁以便在语句的分析过程中对象的定义不会改变
检查用户访问引用方案对象的权限l
l 确定语句的最佳执行计划
将语句和执行计划载入共享的SQLl 区
主意:分析阶段包括处理某些要求,不论语句执行多少次这些要求通常只需要处理一次。Oracle 服务器总是验证用户是否具有执行SQL 语句所需的权限。
2. 执行SELECT 语句:到了SELECT 语句这一步服务器进程准备要检索数据了
3. 提取查询行:在提取阶段对行进行选择和排序(如有必要)并且由服务器返回给用户
发出COMMIT 命令时执行下面的步骤
1.      [...]

Oracle Granule Size

A granule is a unit of contiguous virtual memory allocated to a process.

Oracle instance
If an Oracle instance starts up, it allocates the SGA (System Global Area) in granule sized memory units. The size of these granules depends on your database version and somtimes even on the operating system port. For example, for Oracle 9i it is typically 4MB if your [...]

DB_CACHE_SIZE

In Oracle Database,the db_cache_size and db_nk_cache_size parameters determine the size of Database Buffer Cache.
Default value If SGA_TARGET is set: If the parameter is not specified, then the default
is 0 (internally determined by the Oracle Database). If the parameter is
specified, then the user-specified value indicates a minimum value for
the memory pool.
If SGA_TARGET is not set, then [...]

ORA-03113: end-of-file on communication channel

Tonight,after I did some changes on the parameter(processes,changed it from 150 default to 2),I issued the commands below:
SQL> alter system set processes=2 scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORA-03113: end-of-file on communication channel
SQL> !oerr ora 03113
03113, 00000, “end-of-file on communication channel”
// *Cause: The connection between Client and Server process was broken.
// *Action: [...]