前面对Oracle物理体系的一些概念性和原理性的东西进行了讲解,下面我们就通过实操来看看这些东西长啥样。
我们知道,SGA和PGA是Oracle开辟的两块内存区,区别在于前者是公共的,而后者则是私有的。我们可以通过下面的两条语句来查看这两个内存区的相关参数:
sga_target表示正常运行下分配给sga的内存大小,sga_max_size表示最多可以分配的大小。但是我们发现这个pga_aggregate_target也就是PGA内存区的大小居然是0,这是为什么呢?先别急,我们知道,SGA包含了共享池、数据缓存区和日志缓存区三部分,我们来看一下这三者分配的内存大小:
我们会发现,除了日志缓存区外,共享池和数据缓存区分配的大小居然也是0,这是因为它们是由Oracle自动管理的,一般来说不需要人为干预(Oracle 11g中PGA和SGA都是自动管理的,11g之前的话PGA还是得人为分配),我们可以通过设置memory_target参数来控制PGA和SGA自动分配的大小:
memory_max_target表示最大可分配大小。但是细心的朋友应该发现了问题,日志缓存区log_buffer居然不是0,这是因为log_buffer只能手动分配,并且log_buffer一般不会说分配很大,优化效果不是很明显。
如何查看这些个参数说完了,那么要怎么去修改这些参数呢?来看下面的命令:
alter system set 参数名=参数值 scope=memory|spfile|both [sid=实例名]
-
memory表示只改变当前实例运行,重启数据库失效;spfile表示只改变spfile的设置,当前实例运行无效,重启后有效;both表示二者同时生效。需要注意的是,如果实例以pfile启动,则默认scope为memory,并且如指定scope为spfile或both会报错;
-
log_buffer设置后必须重启才生效;
接下来我们就使用上面的命令来对部分参数进行修改:
上面的示例是对sga_target参数的修改,可以看到:在指定scope=spfile后查看发现当前实例运行并未被修改,而指定scope=both则同时完成了spfile和当前实例运行的修改。
下面我们来看看我们在物理体系结构图中看到的那些后台进程,如下图所示:
其中带有(LOCAL=NO)的并非oracle本身的后台进程,而是用户通过监听连接该数据库产生的,不过这里我们会发现并没有ARCH进程的身影,这是由于当前数据库归档是关闭的(一般来说对于安全性不是很高的数据库可以不开启归档,比如说测试数据库),那么如何查看是否开启归档呢?
可以看到,目前是处于非归档模式,如果需要开启的话,可以参照下图所示开启(注意本操作需要重启数据库):
OK,既然这里涉及到了数据库的启动停止,那我们就一起看看Oracle数据启停的过程,Oracle的启停涉及到了三个阶段:
-
nomount阶段:在此阶段,Oracle需要读取到数据库的参数文件(pfile或者spfile),读取成功之后,将会根据参数文件里的内存分配策略分配内存,也就是创建实例Instance;
-
mount阶段:在此阶段,Oracle会根据参数文件中记录的控制文件的信息去查找控制文件(控制文件中记录了数据文件、日志文件和检查点等信息),查找到后立即锁定控制文件,mount成功;
-
open阶段:在这个阶段,Oracle根据控制文件记录的信息定位到数据文件和日志文件等,正式打通实例和数据库的桥梁;
下面我们通过命令来启停数据库,如下所示:
我们知道,启动的过程离不开参数文件、控制文件以及数据文件和日志文件等,一旦文件丢失或者损坏,就可能造成数据库无法启动,这是非常严重的问题。下面的命令是如何查看上述的文件:
OK,关于Oracle物理体系结构就说到这了,后面即将带来的是Oracle逻辑体系结构,喜欢的朋友欢迎持续关注,拜拜!