oracle-11g-R2体系结构和用户管理

更新时间:2023-10-25 18:22:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.1. Oracle 11g R2体系结构

安装oracle软件----创建数据库----在数据库中创建表----表里存储信息---这些表文件需要存储在物理硬盘上面。

假如有一个用户(这个用户可以是远程用户,也可以是本地的,也可以是一个应用程序)连接到oracle数据库上面,用户是不能直接连接在硬盘上存储的数据文件,所以在oracle中要运行一个实例,实例并不是保存在硬盘上面的,实例是内存的一部分,而库和表文件是存放在硬盘上面的,用户不能直接访问库里面的数据,只能访问实例,实例是一个特殊的内存块,只有实例能和数据库直接通信,在咱们的实验环境中实例和数据库是在同一台机器上,我们称之为单实例环境,对于用户而言所有的操作都是在实例中完成的,oracle为实例划分了一个内存块,这个内存块我们称之为SGA,其实oracle实例启动的时候,将会分配一个SGA系统全局区并启动一些oracle的后台进程(守护进程)。 SGA核心组件介绍: 在oracle中内存=SGA+PGA

一个实例只能有一个SGA,所有的服务器进程和后台进程都共享一个SGA PGA:

我们先看一下一个select语句是如何被执行的? 如果hr用户写了一个select * from scott.emp;

第一步:先做编译,编译包含了语法的检查和语义的检查。

第二步:如果编译没有问题会进入shared pool(共享池 )中,而shared pool 是由library cache和data dictionary cache(数据字典缓存)组成。Sql语句第一时间会进入library cache中,即library cache中会存放被编译过的正确的sql语句,仅仅是sql语句而已。library cache中没有缓存的sql语句需要进行硬解析(即需要耗费设备的I/0资源从硬盘读取)。假设library cache中有这个sql语句,就不需要做硬解析,接着会查 data dictionary cache。data dictionary cache中缓存了权限和对象数据及属性,所有data dictionary cache检查hr用户是否对scott.emp表是否具有访问权限,如果有权限继续往下执行,如果没有权限,直接给hr用户返回一个结果。如果一条语句从来都没有被执行过,这条语句首先被缓存在share pool中的library cache中,下一次被执行的时候直接从share pool中取sql语句。存放sql语句也需要占用空间,share pool的空间也是有限的,为了防止share pool空间不够用,采用先进先出

的规则即后执行的sql语句会覆盖先执行的sql语句来释放空间,当然share pool的空间越大越好。

我们通过企业管理器来查看share pool的相关信息

在sql plus中可以用以下方式查看,图中“0”表示自动化管理

可以从v$sgainfo中查看shared pool size

SQL> select name,bytes/1024/1024||'MB' from v$sgainfo; Shared Pool Size 256MB Large Pool Size 16MB Java Pool Size 16MB

第三步:data buffer cache现在hr用户可以访问scott.emp表了,data buffer cache的作用就是从磁盘或存储中将数据块调入内存,缓存在buffer cache中。

举例:

用户第一次访问scott.emp的内容

SQL> set timing on

SQL> select * from scott.emp;第一次执行sql语句 已选择14行。

已用时间: 00: 00: 00.05

SQL> /再次执行上一条命令所用的时间为00: 00: 00.00 已选择14行。

已用时间: 00: 00: 00.00

总结:buffer cache缓存数据本身,library cache缓存sql语句本身。 可以通过show parameter db_cache_size查看buffer cache的大小

第四步:redo log buffer<重做日志缓冲区>当用户执行insert,update,delete,create,alter等操作后,数据发生了变化,这些变化了的数据写入数据缓冲区(buffer cache)之前,先写入重做日志缓冲区,同时变化之前的数据也放入重做日志缓存中,这样做,是为了保证在数据恢复时oracle就知道哪些事务需要提交,哪些事务需要撤回。

1.2. Oracle 进程

1. 用户进程

Ps –elf | greporacleocl |grep–v grep

2. 数据库进程

Ps –elf |greporacleorcl

3. 守护进程

Ps –elf |grep oha

大池:在SGA中,大池是一个可选的缓冲区域,管理员可以根据需要对其进行配置,在大规模输入输出及备份过程中需要大池作为缓存空间,例如,大数据操作、数据库备份与恢复之类的操作。

Java池:Java池是一个可选的缓冲区,但是在安装java或者java程序时必须设置Java池,它用于编译Java语言编写指令。

六大核心进程:

DBWn进程:用来将buffer cache中的脏数据写入到硬盘中数据文件中。

什么是脏数据,例如我执行如下语句 SQL> update emp set sal=sal+100;

此时修改过的数据存放在内存中,并没有保存到硬盘上的数据文件中,这些数据缓存在buffer cache中,该事务还没有提交(commit),这样修改过还没有写入硬盘数据文件的数据我们称之为脏数据。其实此时在打开一个会话,使用SCOTT用户连接查看emp表中数据是未修改过的数据。所以在oracle中这样的操作是异步写入,多个进程可以同时写入,多个账户就会有多个DBWn进程,其实进程名叫DMW,后面的n是产生的进程标识

SQL> update scott.emp set sal=sal+100; 已更新14行。 SQL>

LGWR:日志写入进程只有一个

当用户commit(提交事务)时触发lgwr进程

当red log buffer空间的三分之一空间被使用完时会触发lgwr进程

把脏数据写入磁盘之前,该LGWR进程将日志信息先写入到日志文件中,每隔3秒中执行这样的动作。

LGWR进程不能有多个,因为日志是顺序是写入的,不能做并行写入,否则无法做数据恢复。 CKPT进程:检查所有数据文件和控制文件的头部是否一致,是确保在数据缓冲区中所有修改过的数据块都被写入到数据文件中的一种机制,就是确保数据完整性的一种机制。但检查点完成后,CKPT进程负责更新数据文件和控制文件的头部信息,并保存检查点信息,以保证数据库日志文件和数据文件的同步。其原理是在数据库恢复时,只需找到CKPT保存的最后一次检查点,就可以根据它确定在日志文件中恢复数据的起始位置,重新执行之后的日志信息即可。

SMON进程:如果数据文件和控制文件头部不一致,就会触发SMON进程。在实例启动时SMON进程会检查所有数据文件的同步信息与控制文件中记录的检查点信息是否一致,不一致就启动实例恢复操作。其实CKPT进程是给SMON进程使用的。

PMON进程:进程监控进程,PMON进程管理用户会话,这个进程会在某个会话出现问题时执行的适当的操作。例如用户的个人计算机在登录到数据库时重新启动,PMON就能能够检测到这个问题,而且还会整理用户正在进行的任何操作。

为了好管理,我们希望表空间的名字和数据文件的名字一致。 解决办法:

1. 使用操作系统命令将数据文件拷贝一份 2. 把表空间offline

3. 然后对数据文件重命名

将表空间offline

对数据文件重命名

查看修改情况

将表空间online

提示需要恢复/u01/yy.dbf

将表空间online

如何扩展表空间大小 1. 直接改变数据文件大小

2. 给表空间增加数据文件

如果表空间所在的分区的空间不够用了

删除表空间

创建临时表空间

创建临时表空间

删除临时表空间与删除表空间的命令是一样的。

1.4. oracle 用户管理

如果想查看oracle系统中存在用户可以查看dba_users视图

如果使用sqlplus查询需要提前格式化

SQL> col username for a20 SQL> col account_status for a20 SQL> col default_tablespace for a20 SQL> set linesize 120 SQL> set pagesize 120

SQL> select username,account_status,default_tablespace from dba_users;

USERNAME ACCOUNT_STATUS MGMT_VIEW SYS

SYSTEM DBSNMP SYSMAN SCOTT OUTLN MDSYS

OPEN

SYSTEM

SYSTEM SYSAUX SYSAUX

SYSTEM SYSAUX SYSAUX

OPEN OPEN OPEN

USERS

DEFAULT_TABLESPACE SYSTEM

-------------------- -------------------- --------------------

OPEN

OPEN

EXPIRED & LOCKED EXPIRED & LOCKED EXPIRED & LOCKED

FLOWS_FILES

ORDSYS EXFSYS

EXPIRED & LOCKED EXPIRED & LOCKED

SYSAUX SYSAUX

Oracle 用户管理---

要想访问数据库,任何人都必须成为能够通过oracle身份验证的有效数据库用户,我们可以配置应用程序要求每个需要进行访问的个体都具有不同的数据库账户,也可以配置应用程序自身作为公共用户连接数据库并在内部处理应用程序级别的权限。无论选用哪种方法,在数据库内部都需要创建一个或多个允许操作数据的用户。

1.5. 用户与模式(schema)

创建用户的语法:

Create user用户名 identified by 密码 default tablespace表空间 quota 大小 on 表空间;

注意:在创建用户的时候虽然用户名写的时小写的,但是存储到数据字典的时候却是大写的,比如create user tom.如果非要使用小写的话,用户名需要使用双引号括起来 create user “tom” 创建的用户没有任何权限,连登陆数据库的权限都没有。

如果没有设置用户对某个表空间的配额,那么即使这个用户对该表空间有写权限,也是无法写入的。

举例说明:

查看HR用户的状态

修改HR用户的密码为oracle

手工设置过期;

解锁用户

举例说明oracle的授予权限和撤销权限 在创建用户之前,创建一个表空间xxx

创建一个表空间xxx

createtablespace xxx datafile '/u01/xxx.dbf' size 100m autoextend on next 10m maxsize unlimited; 创建用户tom

create user tom identified by oracle; 查询创建的用户tom

虽然创建的时是小写tom,但存储到数据字典中的是大写,所以查询时也需要写大写

删除tom用户 Drop user tom;

create user\ identified by oracle;

删除tom用户

正确的删除方式应该是: drop user\;

创建用户tom,默认的表空间是”XXX”,并没有指定配额,所以tom用户也无法在xxx表空间上创建对象

使用tom用户连接数据库的结果

SQL>conn sys/oracle as sysdba Drop user tom; 删除tom用户

创建tom用户的同时指定默认的表空间是xxx,tom用户的磁盘配额是10m 可以使用dba_ts_quotas视图查看每个用户的磁盘配额

刚才我们测试创建的tom用户连创建会话的权限都没

本文来源:https://www.bwwdw.com/article/ni02.html

Top