实例与数据库
Oracle Server = Oralce Instance + Oracle Databse
DBMS(Data Base Management System)数据库管理系统,顾名思义是一个管理数据的系统,那么首先得有数据,然后管理就是通过Instance(实例)来体现,实例就是一些内存结构和后台进程,其实简单的说就是一个在运行的程序,程序在操作系统上运行时会生成一个个的进程. 数据(database)其实就是操作系统中一个个文件,和平时我们接触的txt,word文件没啥大区别.当初没数据库的时候数据就是保存在像txt这样的文件中,然后是直接去手工编辑或通过一些应用程序去编辑.但普通文件有数据冗余,不一致,安全性等问题.
Oracle 内存结构
Oracle Instance(实例)就是一些内存结构:Oracle Instance = SGA + Background Process
如果没有用户连接Server,可以认为Server的内存结构就是Oracle Instance了.不过当有用户连接Server时会单独分配一些内存PGA.
Oracle 内存结构 = SGA + PGA + Background Process = Oracle Instance + PGA
SGA(System Global Areas)
SGA = Database buffer cache + Redo log buffer cache + Shared pool + Java pool + Large pool
SGA大小由参数SGA_MAX_SIZE决定,可用show parameter sga_max_size查看大小.可用alter system set sga_max_size = 1000m scope = spfile这样来修改大小.重启数据库才能生效.
PGA(Program Global Areas)
由排序区,游标状态区,会话信息工,堆栈区组成.可通过参数pga_aggregate_target改变大小
Background Process
PMON
SMON
DBWR
LGWR
CKPT
Others
Oralce Database
Data files
Control files
Redo log files
除了上面三个重要的数据文件属于Database,另外还有几个不属于Database,起辅助作用的文件 Parameter file, Password file, Achived log files.
数据文件与表空间
关系数据库中最重要的内容,就是一个个的表(table),那些表就是保存在数据文件中.这种文件的后缀名为dbf.可以通过select * from dba_data_files;查看他们的位置.例如在windows上c:\app\Administrator\oradata\ora11r2. 在linux上:/home/oracle/oradata/ora11r2.不过我们用的时候一般是使用表空间(tablespace)这样一个逻辑结构来间接的使用数据文件.
表空间和数据文件的关系是:一个表空间至少包括一个数据文件,也可以是多个.而一个数据文件只能属于一个表空间.就相当于在windows上一个文件夹下面有很多文件一样.
表与数据文件的关系:一般情况一个表就属于一个数据文件,但表比较大或数据文件的空间快被用完时一个表可能会保存在几个数据文件中.但一个表只会在一个表空间下,不会属于几个表空间.
当我们创建一个用户时可以指定一个表空间,则用户创建的表就默认保存到那个表空间了,但建表时也可以明确指定把表指定到某个表空间.多个用户可以共用一个表空间.Oracle安装好后会默认创建一些数据文件和表空间.
系统表空间(system tablespace)对应的数据文件是system.dbf:有点像windows的C盘,Oracle系统表和数据字典就保存在这.另外注意的是所有用户创建的函数,储存过程等一些对象都是保存在系统表空间(可以通过select * from dba_source 查看这些信息),只有用户创建的表才保存到自己指定的表空间中.
undo表空间,在做DML操作之前Oracle会把旧值复制到这表空间里,当commit之后再把旧值删除.
temp表空间做排序等操作时在这里.
以上讲的是系统默认创建的表空间,我们也可以自己创建表空间:create tablespace mySpace datafile 'd:\mydata' 100M; --我们还可以添加一些其他参数做更多的设置