Oracle 数据库基础
数据库是我们安装完产品后建立的,可以在同一台主机上存在8i,9i,10g,11g等多个数据库产品,一套产品可以建立多个数据库,每个数据库是独立的。每个数据库都有自己的全套相关文件,有各自的控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件等等。
其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files,alert files)属于数据库文件;
参数文件(parameter file)口令文件(password file)是非数据库文件
我们的表存储在数据库中
数据库不能直接读取
我们通过实例(instance)来访问数据库
数据库实例
实例由内存和后台进程组成
实例是访问数据库的方法
初始化参数控制实例的行为
一个实例只能连接一个数据库
启动实例不需要数据库
产品安装好
有初始化参数文件
就可以启动实例
与是否存在数据库无关
实例内存分为SGA 和PGA
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收.
后台进程是实例和数据库的联系纽带
分为核心进程和非核心进程
当前后台进程的查看
SQL> select name,description from v$bgprocess where paddr<>'00';
NAME DESCRIPTION
-----
----------------------------------------------------------------
PMON process cleanup
DIAG diagnosibility process
PSP0 process spawner 0
LMON global enqueue service monitor
LMD0 global enqueue service daemon 0
LMS0 global cache service process 0
LMS1 global cache service process 1
MMAN Memory Manager
DBW0 db writer process 0
ARC0 Archival Process 0
ARC1 Archival Process 1
NAME DESCRIPTION
-----
----------------------------------------------------------------
LGWR Redo etc.
LCK0 Lock Process 0
CKPT checkpoint
SMON System Monitor Process
RECO distributed recovery
CJQ0 Job Queue Coordinator
QMNC AQ Coordinator
MMON Manageability Monitor Process
MMNL Manageability Monitor Process 2
20 rows selected.
也可以在操作系统下查看
[oracle@db-rac1 db01]$ ps -ef|grep ora_
oracle 8588 1 0 07:53 ? 00:00:00 ora_j001_gfdb1
oracle 10816 1 0 04:58 ? 00:00:08 ora_j000_gfdb1
oracle 16998 1 0 Apr18 ? 00:00:00 ora_pmon_gfdb1
oracle 17017 1 0 Apr18 ? 00:00:00 ora_diag_gfdb1
oracle 17030 1 0 Apr18 ? 00:00:00 ora_psp0_gfdb1
oracle 17042 1 0 Apr18 ? 00:00:00 ora_lmon_gfdb1
ora_lmd0_gfdb1
oracle 17067 1 0 Apr18 ? 00:00:00 ora_lms0_gfdb1
oracle 17077 1 0 Apr18 ? 00:00:00 ora_lms1_gfdb1
oracle 17081 1 0 Apr18 ? 00:00:00 ora_mman_gfdb1
oracle 17083 1 0 Apr18 ? 00:00:00 ora_dbw0_gfdb1
oracle 17085 1 0 Apr18 ? 00:00:00 ora_lgwr_gfdb1
oracle 17087 1 0 Apr18 ? 00:00:00 ora_ckpt_gfdb1
oracle 17089 1 0 Apr18 ? 00:00:03 ora_smon_gfdb1
oracle 17091 1 0 Apr18 ? 00:00:00 ora_reco_gfdb1
oracle 17093 1 0 Apr18 ? 00:00:06 ora_cjq0_gfdb1
oracle 17095 1 0 Apr18 ? 00:00:02 ora_mmon_gfdb1
ora_mmnl_gfdb1
oracle 17099 1 0 Apr18 ? 00:00:00 ora_d000_gfdb1
oracle 17101 1 0 Apr18 ? 00:00:00 ora_s000_gfdb1
oracle 17142 1 0 Apr18 ? 00:00:01 ora_lck0_gfdb1
oracle 17517 7593 0 07:55 pts/2 00:00:00 grep ora_
oracle 26182 1 0 Apr18 ? 00:00:00 ora_arc0_gfdb1
oracle 26184 1 0 Apr18 ? 00:00:00 ora_arc1_gfdb1
oracle 26523 1 0 Apr18 ? 00:00:00 ora_qmnc_gfdb1
oracle 27156 1 0 Apr18 ? 00:00:00 ora_q000_gfdb1
oracle 27172 1 0 Apr18 ? 00:00:00 ora_q001_gfdb1
oracle 29308 1 0 05:53 ? 00:00:00 ora_q002_gfdb1
ora_q004_gfdb1
oracle 31882 1 0 07:26 ? 00:00:00 ora_q003_gfdb1
核心进程,必须存在,有一个终止,所有数据库进程全部终止
非核心进程
完成数据库的额外功能
归档
调度作业
Database writer (DBWn)数据库写进程
将数据库的变化写入到文件
最多20个
DBW0-DBW9 DBWa-DBWj
应该和cpu的个数对应
由参数DB_WRITER_PROCESSES描述
因为dbwr是哪里来的数据写回到哪里,所以可以多个进程一起工作。
Log writer (LGWR)日志写进程
将日志缓冲写入到磁盘的日志文件
只有一个,因为日志写是顺序写,所以一个就可以了,因为是顺序写所以也不能为多个。
Checkpoint (CKPT)检查点进程
存盘点
触发dbwn,写脏数据块
更新数据文件头,更新控制文件
System monitor (SMON)系统监测进程
实例崩溃时进行自动恢复
清除作废的排序临时段
Process monitor (PMON)进程监测进程
清除死进程
重新启动部分进程
监听的自动注册
我们连接到数据库其实是连接到实例
这个过程叫建立一个会话
实验1:数据库的最高帐号sys的操作系统认证模式
该实验的目的是进入数据库的最高帐号sys.掌握操作系统认证的两个条件.
操作系统认证,因为数据库是在OS上的软件能进入ORACLE 帐号,就可以进入到数据库的最高帐号。
Conn / as sysdba
Show user
无论数据库处于何种状态,sys用户总可以进入到数据库
因为sys是外部操作系统认证的
操作系统认证的两条件。一、操作系统的用户要属于dba组;
二、和数据库间的连接是安全的。
实验2:数据库的最高帐号sys的密码文件认证模式
该实验的目的是使用密码文件的认证方式进入到最高sys 帐号,如何建立和维护密码文件.在远程,或者操作系统认证不可以使用的情况下,请使用密码文件来认证sys用户
在unix下
密码文件路径/oracle_home/dbs
密码文件名称orapw+sid
sid为实例名称,查看实例名称
select instance_name from v$instance;
select 'orapw'||instance_name from v$instance;
密码文件必须存在,即使你以操作系统认证,因为参数remote_login_passwordfile默认的值是要使用密码文件的,除非你将remote_login_passwordfile的值改为none,这样就禁止
了密码文件的使用,你想进入到sys用户必须使用操作系统认证模式。密码文件丢失必须重新建立
Orapwd为oracle的命令,用于建立密码文件,命令的格式如下
Orapwd file=….. Password=….
密码文件中含有sys用户的密码
建立密码文件的步骤
1.确定实例的名称
2.确定密码文件的路径和名称
3.停止数据库,删除老的密码文件
4.在操作系统下运行
orapwd file=/dbocfs/gfdb/orapwgfdb1 password=manager1其中gfdb1为实例的名称,manager1为密码,是sys用户的密码
5.连接的sys
Conn sys/maanger1 as sysdba
显示为连接的空闲实例,因为数据库还没有启动。
但这并没有证明你使用了密码文件.
SQL> conn sys/addas as sysdba
Connected.
SQL> conn asfdsf/adaf as sysdba
Connected.
SQL> conn / as sysdba
Connected.
SQL> conn sys/manager1 as sysoper
Connected.
SQL> conn sys/adsssd as sysoper
ERROR:
ORA-01031: 权限不足
原因很简单,因为操作系统认证的优先级高于密码文件.所以你只要写as sysdba就可以进入,但sysoper不能使用操作系统来认证,它只能使用密码文件认证,上面的实验证明manager1是正确的密码.
6.启动数据库startup
建立密码文件要重新启动数据库,因为内存中保留有原来的密码.
初始化参数remote_login_passwordfile =none则数据库设置为禁止使用密码文件,只能使用操作系统认证登录到最高的老大用户.即使你以密码认证连接到数据库,也不能启动和停止数据库,报权限不足.
实验3:数据库的两种初始化参数文件
该实验的目的是认识参数文件,两类参数文件的相互转换.如何修改参数.
初始化参数文件是描述实例的行为的文件,文件大小很小.
初始化参数文件在unix操作系统中存在于oracle_home/dbs目录下.
纯文本参数文件,修改参数的时候直接编辑文件,再保存就可以了.
Initsid.ora
二进制参数文件,必须存在于服务器端.使用命令来修改.
spfilesid.ora
server parameter file
纯文本参数文件和二进制参数文件的差别
1。修改参数的方式不同
2。优先级不同
3。是否动态存储修改的参数
4。存在的位置不同
纯文本可以存在于客户端
二进制文件一定存在于server端
5.rman可以备份二进制参数文件,不能备份纯文本参数文件.
验证现在数据库使用的参数文件类型,我们一定要知道我们使用的是什么类型的参数文件,涉及到我们如何修改参数的手