首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

你可能已经想到了Oracle实例和数据库的抽象图是个什么样子(见图2-1)。

2-1以最简单的形式展示了Oracle实例和数据库。Oracle有一个很大的内存块,称为系统全局区(SGA),在这里它会做以下工作:

q  维护所有进程需要访问的多种内部数据结构;

q  缓存磁盘上的数据,另外重做数据写至磁盘之前先在这里缓存;

q  保存已解析的SQL计划;

q  等等。


图2-1 Oracle实例和数据库

Oracle有一组“附加到”SGA的进程,附加机制因操作系统而异。在UNIX环境中,这些进程会物理地附加到一个很大的共享内存段,这是操作系统中分配的一个内存块,可以由多个进程并发地访问(通常要使用shmget()shmat())。

Windows中,这些进程只是使用C调用(malloc())来分配内存,因为它们实际上是一个大进程中的线程,所以会共享相同的虚拟内存空间。Oracle还有一组供数据库进程/线程读写的文件(只允许Oracle进程读写这些文件)。这些文件保存了所有的表数据、索引、临时空间、重做日志等。

如果在一个UNIX系统上启动Oracle,并执行ps命令,会看到运行着许多物理进程,还会显示出这些进程的名字。在前面的例子中,我们已经观察到了pmonsmon以及其他一些进程。我会在第5章逐一介绍这些进程,现在只要知道它们通称为Oracle后台进程background process)就足够了。这些后台进程是构成实例的持久性进程,从启动实例开始,这些进程会一直运行,直至实例关闭。

有一点要注意,这些都是进程,而不是单个的程序。UNIX上只有一个Oracle二进制可执行文件;根据启动时所提供的选项,这个可执行文件会有多种不同的“个性”。执行ora_pmon_ora10g进程要运行这个二进制可执行文件,执行ora_ckpt_ora10g进程时运行的可执行文件仍是它。二进制可执行文件只有一个,就是oracle,只是会以不同的名字执行多次。

Windows上,使用pslist工具(http://www.sysinternals.com/ntw2k/freeware/ pslist.shtml)只会看到一个进程oracle.exe。同样,Windows上也只有一个二进制可执行文件(oracle.exe)。在这个进程中,可以看到表示Oracle后台进程的多个线程。

使用pslist(或另外的某个工具),可以看到以下线程:

从中可以看出,这个Oracle进程里有19个线程(以上所示的Thd列)。这些线程就对应于UNIX上的进程(pmonarchlgwrOracle进程)。还可以用pslist查看各线程的更多详细信息:

不同于UNIX,这里看不到线程的“名字”(UNIX上则会显示ora_pmon_ora10g等进程名),不过,我们可以看到线程IDTid),优先级(Pri)以及有关的其他操作系统审计信息。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论