【收藏整理】Oracle数据库体系架构
原文见http://blog.csdn.net/kele1121/archive/2009/10/30/4742051.aspx与http://www.itpub.net/thread-1105403-1-1.html
所谓
Oracle
的体系架构,是指
Oracle
数据库管理系统的的组成部分和这些组成部分之间的相互关系,包括
内存结构、后台进程、物理与逻辑结构等。
Oracle
数据库的体系很复杂,复杂的原因在于它最大限度的节约
内存,从上图可以看出,它在整体上分实例和数据库文件两部分。
(
1
)首先区分一下数据库的实例(
Instance
)和数据库两个概念:
l
ORACLE
实例
=
进程
+
进程所使用的内存
(SGA)
,实例是一个临时性的东西,你也可以认为它代表了数据库某一时刻的状态!
l
数据库
=
重做文件
+
控制文件
+
数据文件
+
临时文件,数据库是永久的,是一个文件的集合。
ORACLE
实例和数据库之间的关系
1.
临时性
(instance)
和永久性
(
数据库
)
2.
实例(
instance
)可以在没有数据文件的情况下单独启动
startup nomount ,
通常没什么意义
3.
一个实例在其生存期内只能装载
(alter database mount)
和打开
(alter database open)
一个数据库
4.
一个数据库可被许多实例同时装载和打开
(
即
RAC)
,
RAC
环境中实例的作用能够得到充分的体现
!
下面对实例和数据库做详细的诠释:
在
Oracle
领域中有两个词很容易混淆,这就是
“
实例
”
(
instance
)和
“
数据库
”
(
database
)。作为
Oracle
术语,这两个词的定义如下:
数据库
(
database
):物理操作系统文件或
磁盘
(
disk
)的集合。使用
Oracle 10g
的自动存储管理(
Automatic Storage Management
,
ASM
)或
RAW
分区时,数据库可能不作为操作系统中单独的文件,但定义仍然不变。
实例
(
instance
):一组
Oracle
后台进程
/
线程以及一个共享内存区,这些内存由同一个计算机上运行的线程
/
进程所共享。这里可以维护易失的、非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。也许实例不能算是世界上
相关文档:
在某些场合下,存储过程或触发器里的SQL语句需要动态生成。Oracle的DBMS_SQL包可以用来执行动态SQL语句。本文通过一个简单的例子来展示如何利用DBMS_SQL包执行动态SQL语句:
DECLARE
v_cursor NUMBER;
v_stat NUMBER;
& ......
CREATE OR REPLACE PROCEDURE sendemailtest
(mailmsg IN Varchar2)
IS
--using mail server to send email.
mailconn UTL_SMTP.connection;
mailhost & ......
select trim(leading | trailing | both ' ' from ' abc d ') from dual;
去掉字符串 ' abc d ' 的前面/后面/前后的空格
类似函数:ltrim, ......
DML Error Logging in Oracle 10g
主要在于使用DBMS_ERRLOG.create_error_log 这个包来跟踪dml错误信息
SQL> CREATE TABLE source (
2 id NUMBER(10) NOT NULL,
3 code VARCHAR2(10),
4 description VARCHAR2(50),
5 CONSTRAINT source_pk PRIMARY KEY (id)
6 );
表已创建。
SQL> DECLARE
2 TYPE t_tab IS ......
Oracle主键自动增长
这几天搞Oracle,想让表的主键实现自动增长,查网络实现如下:
create table simon_example
(
id number(4) not null primary key,
name varchar2(25)
)
-- 建立序列:
-- Create sequence
create sequence SIMON_SEQUENCE &nb ......