Oracle管理工具
OUIOracle Universal Installer
DBCADatabase Configure Assisant
sqlplusCLI
OEMOracle Enterprise ManagerGUI
emctl status dbconsole
emctl start dbconsole
Enterprise Manager Console,安装Oracle客户端方可使用
Net Manager客户端服务端通用
OFAOptimal Flexible Architectureoracle应用程序目录结构
PL/SQL Developer开发工具(一家荷兰公司提供)
Oracle SQL DeveloperOracle提供开发工具
oracle启动、关闭
alter database read only
执行查询
使用本地管理的表空间来执行磁盘排序
数据文件脱机和联机,但不能对表空间进行操作
执行数据文件和表空间的脱机恢复
alter database read write
startup restrict
alter system enable restricted session
数据库运行在限制模式,仅restricted session系统权限能登录
维护数据库的结构,或对数据库进行导入导出
已经连接的用户进程能正常工作,用 alter system kill session杀死用户进程
shutdown normal|transactional|immediate|abort
Database Control --> listener.ora --> database
emctl start|stop|status dbconsole
https://ip:1158/em
lsnrctl start|stop|status listener
sqlplus /nolog (不登录)启动sqlplus
connect user/pwd@orcl.domain本地|远程登录oracle,通过数据字典身份验证,普通用户
user/pwd用户名密码,用/隔开
@网络连接,如使用IPC协议(即本地)不用@
orcl.domain连接字符串(在客户端本地命令文件中定义,连接协议、侦听器IP、端口、实例名称)
connect user/pwd@orcl.domain as sysdba|sysoper本地|远程登录oracle,通过口令文件验证
connect / as sysdba|sysoper本地登录,通过操作系统验证,/u01目录属组的操作系统用户
sysdba,sysoper是权限(非用户),默认仅sys用户所有,不允许sys用户以口令身份验证登录
如果为用户授权sysdba sysoper权限,则将用户权限从数据字典复制到外部口令文件中
常用数据字典视图
数据字典视图:Oracle数据字典信息,物理或逻辑上描述数据库信息,DBA_ ALL_ USER_
显示关闭和启动期一直持久保存的信息
动态性能视图:Oracle实例和控制文件信息,v$...
实例生命周期的值,关闭即消失
V$FIXED_TABLE所有可用的动态性能视图
V$INSTANCE当前例程的详细信息
V$SGASGA详细的信息
V$PARAMETER初始化参数的详细信息
V$SPARAMETER初始化参数的详细信息(内存)
V$VERSIONoracle版本的详细信息(SPFILE文件)
V$OPTION 显示已经安装的oracle选项
V$SESSION 显示会话的详细信息
V$PROCESS 显示与oracle相关的所有进程的信息(包括后台进程和服务器进程)
V$BGPROCESS 显示后台进程的详细信息
V$DATABASE 数据库的详细信息(如数据库名,日志模式以及建立时间)
V$CONTROLFILE 控制文件的信息
V$DATAFILE 数据文件的详细信息
V$DBFILE 数据文件编号及名称
V$LOGFILE 重做日志成员的信息
V$LOG 日志组的详细信息
V$THREAD 重做线程的详细信息
V$LOCK 锁信息
V$LOCKED_OBJECT 被加锁的数据库对象
V$ROLLNAME处于online状态的undo段
V$ROLLSTAT显示undo段统计信息
V$TABLESPACE 表空间的信息
V$TEMPFILE 显示临时文件
考点:use_catalog表、视图、序列和同义词
use_objects群集、数据库链接、目录、函数、索引、库、程序包、程序包体、Java 类、抽象数据类型、资源计划、序列、同义词、表、触发器、物化视图、LOB 和视图
Oracle体系结构
Oracle体系结构
图⑴
图⑵
Oracle服务器由Oracle实例和Oracle数据库组成
Oracle实例一种访问数据库的机制,由内存结构(system global area,SGA)和后台进程组成
Oracle数据库为信息提供真正的物理存储,由数据文件、重做日志文件、控制文件组成
⒈Oracle 服务器进程
用户登录oracle服务器如验证成功,oracle创建一个服务器进程为该用户提供服务,用户进程和服务器进程一对一关系。用户进程向服务器进程发出请求,服务器进程对数据库进行实际操作并把结果返回给用户进程。Oracle创建一个服务器进程的同时为该进程分配一个内存区,称为program global area, PGA,私有不能共享,仅属一个进程,随进程的创建而被分配,中止而被收回。
program global area, PGA包括
排序区 sort area处理SQL语句所需的排序
游标状态区 cursor state指示会话当前所使用的SQL语句的处理状态
会话信息区 session information会话的用户权限和优化统计信息
堆栈区 stack space其他的会话变量
如果使用共享服务器体系架构,排序区、游标状态区、会话信息区存在SGA的large pool,如没有large pool则存在共享池。
⒉system global area,SGA
⑴数据库缓冲区
Oracle用来执行SQL的工作区域。执行insert update delete前,先将数据块从数据文件复制到数据库缓冲区并在缓存区进行更改,然后缓存一段时间。查询操作前,先将数据块从数据文件复制到数据库缓冲区然后转交PGA处理
⑵重做日志缓冲区
任何DML、DDL操作在改变数据之前将恢复所需的信息写入重做日志缓冲区,然后写入
数据库高速缓冲区之前。
⑶共享池 share pool
①库高速缓存
②数据字典缓存
③PL/SQL区
④SQL查询结果和PL/SQL函数结果缓存
⑷大池 large pool
⑸Jave池 jave pool
⑹流池 stream pool
⒊、后台进程
⑴SMON系统监督进程
查找验证控制文件 mount数据库;
查找验证数据文件联机日志文件open数据库;
自动执行Oracle实例的恢复,前滚/回滚;
回收组合数据文件相连的空闲区;
清理临时表空间
⑵PMON进程监督进程
进程崩溃后,回滚用户当前未提交事务、释放用户加的表锁行锁、释放用户PGA
自动、定期的向监听进程注册、更新信息
⑶DBWn
将数据从数据库高速缓冲区的脏缓冲区中的数据写到数据文件。以下情况DBWn执行写
脏缓冲区数量超过限额;时间间隔已到;校验点发生;drop/truncate表;表空间设为只读;表空间联机备份begin backup;临时表空间设为offline或normal时;
⑷LGWR
将重做日志缓冲区数据顺序地写入重做日志文件,以下情况执行写
提交事务;重做日志缓冲区中的变化记录超过1MB;重做日志缓冲区中的所存记录超过1/3;每3秒钟;DBWn将高速缓冲区的块写到数据文件前。
⑸CKPT
校验点发生时,DBWn进程把SGA中所有已经改变了的数据库高速缓冲区中的数据(包括提交、未提交)写入数据文件;Oracle将校验点号码写入数据文件的文件头,将校验点号码、重做日志序列号、归档日志名称、SCN号写入控制文件。
⑹ARCn
把切换后的重做日志文件复制到归档日志文件,归档操作完成之前不充许使用该组重做日志。
⑺MMON, MMNL
定期从MMON捕获统计数据写入数据字典表(AWR)同时启动ADDM。MMNL辅助MMON工作⑻MMAM
观察PGA、SGA内存需求,实现内存自动管理
⑼其他进程
RECO分布式事务
CJQ0,J000作业队列协调器,作业队列进程
D000调度进程,SQL调用发送到共享的服务器进程S000
DBRM数据库资源管理器
DIA0诊断进程,持起检测和解析死锁
DIAG诊断进程,执行诊断转储和ordebug
FBDA闪回数据库归档器进程
PSP0进程生成器,创建和管理其他Oracle进程
QMNC,Q000队列管理器协调器监视数据库中的队列,并分配Q000进程使消息入队或出队。
SHAD支持用户会话的服务器进程
SMC0,W000空间管理协调器进程协调与空间管理相关的各种任务,如主动空间分配置和空间回收。
它动态生成从属进程W000来执行任务
VKTM虚拟时间监视器,负责跟踪时间,集群环境特别重要
网络连接
专用服务器 dedicated server每个用户进程连接到自己的服务器进程
会话存在PGA(空间不够存到临时表空间)
共享服务器 shared server多个用户进程连接到共享的服务器进程池,会话存在Large Pool
会话期间,会话与侦听器进程短暂,与调度进程持久
所有调度进程共享一个公共请求队列,每个调度进程有自己的调度进程响应队列
用户会话信息(PGA中除堆栈外)存在SGA中,称用户全局区(UGA)
专用服务器网络配置
listener.ora(服务器端)
LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = ip|host)(PORT = 1521)) )SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = e:\oracle\product\10.2.0\db_1) (SID_NAME = orcl)
))静态注册
local_listener 参数告诉实例侦听器信息,PMON自动执行运态实例注册(首选)
lsnrctl start|start|stop|status
tnsname.ora(客户端)
ORA817 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = sun62)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = ora817.huawei.com)
(SERVER=DEDICATED)--默认,可不选))
tnsping ORA817
sqlplus user/pwd@ORA817-- ORA817连接字符串,客户端连接数据库服务器时,用tnsname.ora解析
sqlnet.ora(服务器端、客户端皆可,应用于所有listener或连接的设备,如加密、安全规则)
TNS_ADMIN环境变量,指定listener.ora tnsname.ora sqlnet.ora位置(默认/ORACLE_HOME/network/admin
),多个oracle_home目录的服务器常用
数据库链接
create database link prodstore
connect to store indentified by 1234 using 'prod'
从当前数据库连接到远程数据库(由连接字符串prod定义的远程数据库),链接存在当前用户模式,仅此用户能用select * from orders@prodstore-- 用户sotre
共享服务器配置
alter system set dispatchers='(dispatchers=2)(protocol=tcp)'唯一必设参数
alter system set shared_servers=20--默认设dispatchers时,shared servers=1
可选
max_shared_servers
max_dispatchers
tnsname.ora
SKY3 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SKYSH.heysky.net)(SERVER = SHARED)-- 配置为共享服务器
))理解数据名实例名.....
DB_NAME数据库名,用于区分数据库的内部标识,以二进制方式存储在参数文件
INSTANCE_NAME数据库实例名,用于和操作系统之间的联系,用于对外部连接时使用
ORACLE_SID操作系统环境变量,默认要连接的实例,区别多实例位于同一服务器
SERVICE_NAME服务名单实例环境一个实例对应一个服务名,RAC多个实例对应一个服务名
默认= INSTANCE_NAME
DB_DOMAIN域名
GLOBAL_NAME全局数据库名= DB_NAME + DB_NAME,网络中唯一标识数据库名
Net service name网络服务名,又称为数据库别名database alias
DB_NAME GLOBAL_NAME
DB_NAME数据库的唯一标识符。分布式环境中难以区别多个数据库,引入GLOBAL_NAME,表示组织中数据库的唯一标识符
INSTANCE_NAME SERVICE_NAME GLOBAL_NAME
单实例1个INSTANCE_NAME 对应1个SERVICE_NAME;RAC多个INSTANCE_NAME对应1个SERVICE_NAME
tnsname.ora
SKY3 =
(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SKYSH.heysky.net)-- SERVICE_NAME(SERVER = SHARED) ))listener.ora
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = e:\oracle\product\10.2.0\db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = oracle) -- GLOBAL_DBNAME, 这里=DB_NAME
(ORACLE_HOME = e:\oracle\product\10.2.0\db_1) (SID_NAME = oracle) --INSTANCE_NAME ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) )SQLPlus
desc emp查看emp表结构
l列出上个语句
/ 重复执行上个语句
del n 删除上个语句的第n行
n text重写上个语句的第n行
n 回车,将上个语句的n行调到当前;
a, text增加
c /原句/新句修改
save d:\select.sql将上个语句保存为脚本
get d:\select.sql调脚本到当前,可修改
@d:\select.sql执行脚本
spool d:\out.txtspool 保存屏幕输出
语句
spool off
show 环境变量|ALL
set 环境变量值
set echo on|off 执行脚本前显示脚本语句
set feedback 20 on|off行数较多时,返回多少行,默认6
set line 100设置行宽
set page 25每页多少行
set heading on|off是否显示列标题
set array 100 sqlplus每次能从表取多少行,最大5000
col 列名 for 99999|a5列5位宽
col 列名 heading '标题名' for a9
col 列名查看列属性
select * from emp
where sal > &salary
提示输入变量salary值,输入后显示信息。
salary值输入有讲究:数据直接输,日期和时间须加' ',或直接在语句中加入' '
select empno,job,&&var
from emp
order by &var
提示输入:输入sal(列名)显示以sal排序的信息,仅一次输入即可。
ACCEPT
accept var prompt '请输入您的职位(job):'
select empno,empname,sal
from emp
where job = &var
执行时出现请输入您的职位(job):
accept var prompt '请输入您的职位(job):' HIDE
select empno,empname,sal
from emp
where job = &var
执行时出现请输入您的职位(job):****HIDE在输密码或某敏感信息非常有用
初始化参数文件
v$parameter当前正在运行的实例参数
v$sparameterspfile参数值
动态参数,更改后立即生效,可选地写入spfile成为永久值,否则实例重启后恢复为spfile参数值
静态参数,更改写入spfile,实例重启后生效
SCOPE=spfile不指定scope,无法更改静态参数,写入spfile,重启后(实例用此spfile启动)生效
SCOPE=memory更改动态参数,立即生效,但未保存至spfile,实例重启后丢失
SCOPE=both默认,更改动态/静态参数,写入spfile,动态立即生效,静态重启后生效
alter systemset实例级别设置参数
alter session set会话级别设置参数
参数文件默认位置ORACLE_HOME/dbs
pfile 能文本修改
spfile能打开,不能修改,rman备份
create pfile from spfile或create spfile from pfile默认位置
create spfile=’xxx’ from pfile=’xxxx’指定位置
启动指定参数文件
startup spfile|pfile=’xxxx’
控制文件
数据库名字
数据库标识符
数据库创建的时间
联机重做日志文件的名字和准确位置
当前日志序列号
校验点信息
日志的历史信息
归档日志文件的准确位置和状态
数据文件的名字和准确位置
表空间的信息
备份的准确位置和状态
alter system set control_files = 'd:\control01.ctl',修改spfile
尽量利用当前控制文件而不是备份控制文件进行数据库恢复,因为会造成数据丢失
alter database backup controlfile to 'd:\backup\control.bak'
alter database backup controlfile to trace
联机重做日志
至少2个重做日志组,循环使用;每组多个成员,成员数据一致性(镜像)
如启用归档日志,未归档的日志文件不能覆盖
添加重做日志组
alter database add logfile('d:\redo04a.log','e:\redo04b.log')
size 15M;
删除重做日志组
alter database drop logfile group 3
添加重做日志组成员
alter database add logfile member
'd:redo01b.log' to group 1,
'd:redo01b.log' to group 2,
'd:redo01b.log' to group 3;
删除重做日志组成员
alter database drop logfile member
'd:\redo01b.log';
alter system switch logfile手动切换日志组
alter system checkpoint手动产生检查点
fast_start_mttr_target = 900 强制产生检点时间,秒
select* from v$log;
status: inactive实例恢复不需要这组重做日志组,已写入数据文件
active 活动,但不是当前,恢复时需要这组联机重做日志组
current当前
unused未使用过
select * from v$logfile
status:空白该文件正在用
stale该文件中的内容是不完全的
invalid该文件不可以被访问
deleted该文件已不再有用了
归档重做日志
shutdown immediate
startup mount
alter database archivelog启用联机归档日志后,立即对数据库做全备份,因为以前备份将失效
alter database open
archive log list
show parameter log_archive_max_processes;
alter system set log_archive_max_processes=6;
ps -ef | grep arc
show parameter log_archive_dest
show parameter RECOVERY默认归档到此目录
alter system set log_archive_dest_1=’xxx mandatory reopen=300’; 仅当联机重做日志成功归档到此目录下,才能覆盖重做日志,否则300秒重试一次
alter system set log_archive_dest_2=’xxx optional’; 可选归档日志冗余,默认optional
show parameter log_archive_min_succeed
alter system set log_archive_min_succeed_dest=3;至少需3份成功归档
Alter system set log_archive_dest_state_2=defer;此目录暂时不可用
存储管理
存储管理
区管理添加数据文件到表空间时,数据文件格式化为ORACLE块,大小由db_block决定
AUTOEXTEND数据文件自动扩展,当数据文件满时,自动扩展其大小,直至无空间可用
AUTOALLOCATE |UNIFORMORACLE自动决定下一次分配的区间大小,或统一区间大小
表空间如何管理将区间分配给段
LOCAL|DICT区间空闲或已使用记录在数据文件头部,采用位图管理
传统是放在数据字典,使用free list管理
段管理段获得区间后,如果管理
AUTO|MANUAL段分配区间或回收区间,段的扩展与收缩
pctfree 表示数据块里剩余的可用空间占数据块总空间的百分比,默认10,AUTO仅设此值
段添加区间失败,sql语句报错,会话立即回滚。以下情形导致段添加区间失败
数据文件或临时文件已满,数据文件,或临时文件自动扩展,但磁盘满
撤消表空间已满
用户配额限制
块管理每个数据库块管理
表空间示例
create tablespace tbs_name
smallfile|bigfile
datafile 'xxx' size 200M | autoextend
uniform size 1 M| autoallocate区间大小
default initial 100K next 100K MAXEXTENTS 200??
blocksize 16k使用非标准块大小
logging|nologging
online|offline
permanent|temporary
extent management local
segment space manageme auto
表空间脱机、联机、只读取
数据库处于打开状态移动数据文件
数据为处于打开状态恢复表空间或数据文件
对表空间执行脱机备份
使数据库一部分不可用,另一部分可用
系统表空间、正在使用的还原表空间、默认临时表空间不可脱机
alter tablespace user offline
alter tablespace user online
alter tablespace user read only
alter tablespace user read wire
alter tablespace user datafile 'd:\user01.dbf' resize 100M重设数据文件大小
alter tablespace example offline;
! cp
alter tablespace example rename datafile ‘原位置’ to ‘新位置’移动非系统表空间数据文件
shutdown immedate
startup mount
! cp
alter database rename datafile ‘原位置’ to ‘新位置’移动系统表空间数据文件
drop tablespace user
drop tablespace user including contents and datafiles;包括segment 和数据文件
drop tablespace user including contents and datafiles cascade constraints;segment 、数据文件、约束
OMF管理
设置这些目录后,Oacle自动管理数据文件名、大小
alter system set db_create_file_dest='d:\'
alter system set create_online_log_dest_1='e:\'
alter system set create_online_log_dest_2='f:\'
alter system set create_online_log_dest_3='g:\'
resumable 可恢复空间分配
遇空间分配问题会话挂一段时间,等待修复
alter session enable resumable timeout=60 name xxx会话挂起60秒后停止(报错)
alter system set resumale_timeout=60实例级别启用可恢复空间
DBA_RESUMABLE视图查看挂起会话
会话挂起时,保持对使用的所有资源的控制,包括撤销空间、临时空间、PGA内存、记录锁定
段重组
区间管理,如何分配空间给表空间的段;段空间管理,如何将行分配给段中的块。
oracle强烈建议使用带有自动段空间管理功能的本地管理的表空间。
insert和段增长时,位图管理技术对空间分配很有效,但update导致行迁移,delete导致空间浪费。
行链接,存储在多个块中的行
行链接行迁移仅update
行迁移,表段的默认设置是每个块保留10%作为行扩展的空间。update行有时10%空间不够,须将整行迁往其他块。由于行迁移时未调整索引项,索引键指向行原始位置,会话读取时用两次表块读取来获取行。
alter table tbs pctfree 50自动段管理的表空间仅需调整此值,默认10%
重组表修复行迁移,索引破坏、能查询不能DML(表锁定)、如表有未提交事务不能移动
alter table tbs move tbs_space
检测行链接、或行迁移
analyze table tbs compute statistcs或用DBMS_STATS包分析
select avg_row_len,chain_cnt from user_tables
where table_name=''tbsavg_row_len小于块行迁移,大于块链接行
段收缩
不适用数据字典管理表空间、带LONG列的表、有refresh-on-commit物化视图的表
alter table tbs enable row movement仅适用自动段空间管理和启用了行移动的表空间
alter tbs shrink space cascade|compact生成撤销和重做,索引有效,压缩期间表不锁定,移动独行时锁定
shrink两个阶段,压缩阶段通过生成撤销和重做数据的DML将行移入小事务,行锁定
第二阶段DDL命令,针对数据字典,锁定表。
alter tbs shrink space compact 重组段,不释放空间
alter tbs shrink space cascade 收缩依赖表的对象,如索引
alter index shrink space cascade|compact可手动收缩索引,不能减少其大小,但能阻止其变大
临时表空间
内存排序区 PGA可能不够用,部分排序结果写到磁盘 -->临时表空间
create temporary tablespace temp
tempfile 'd:\temp.dbf'
size 10 M
extent management local
uniform size 2 M;
不能设为只读
数据文件不能重命名
设置为nologging
不能使用alter database创建临时数据文件
只读运行的数据库需要临时文件
不能恢复临时数据文件
uniform size是PAG中的sort_area_size整数倍
alter database default temporary tablespace temp
临时表空间组
创建多个临时表空间,把它们组成一个临时表空间组,临时表空间组的优点: 数据库层面可以同时指定多个临时表空间,避免当临时表空间不足时所引起的磁盘排序问题; 为用户指定临时表空间组,当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间;并行操作中,不同的从属进程可以使用不同的临时表空间
SQL> create temporary tablespace tempts1 tempfile '/home/oracle/temp1_02.dbf' size 2M tablespace group tempgroup; Tablespace created SQL> create temporary tablespace tempts2 tempfile '/home/oracle/temp2_02.dbf' size 2M tablespace group tempgroup; Tablespace created SQL> select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAME------------------------------ ------------------------------tempgroup TEMPTS1tempgroup TEMPTS2 SQL> alter user scott temporary tablespace tempgroup;User altered SQL> alter database <db_name> default temporary tablespace tempgroup; Database altered. SQL> drop tablespace tempts1 including contents and datafiles;删最后一个临时表空间时,组自动删除Tablespace droppedSQL> select * from dba_tablespace_groups;GROUP_NAME TABLESPACE_NAMESQL>alter tablespace tempts1 tablespace group <another group> 移动表空间到另一个表空间组undo表空间
事务恢复:正在运行的事件崩溃,重启实例就要回滚没有提交的变化,还原段的变化受联机日志保护
事务回滚:用户提交后回滚
读一致性:一个用户未的提交的写,另一个读用户不应看到
系统还原段
系统表空间对象变化时使用,数据库创建时在系统表空间创建,可自动或手动管理
非系统还原段
非系统表空间对象变化时使用,至少需一个非系统还原段
自动模式,创建还原表空间 undo tablespace,系统自动管理还原表空间中的还原数据
手动模式,数据库管理员创建,分私有还原段(1个instance)和公有还原段(rac)
延迟还原段
表空间设置为脱机后重新联机时回滚事物,数据库自动创建和删除
自动管理还原段
parameter初始参数文件
undo_management=auto|manual不是动态参数
create undo tablespace undotbs2 datafile 'xxxx' size 20M autoextend on;
oracle 允许创建多个还原表空间,但仅一个正在使用
alter system set undo_tablespace=undotbs2指定正在使用的还原表空间
alter system set undo_retention=900; 事物提交后,还原数据保持15分钟
固定大小undo tablespace,忽略retention,oracle自动调整retention最佳保留期限
自动管理模式中,事务可以在不同的undo segment之间动态交换undo空间(交换extents)
一个事务需要更多的undo空间时,获取更多extents步骤:
获取undo表空间里可用的、空的extents(segment的最小分配单元是extent)
获取其他undo segment里的expired状态的extents
如果undo表空间里的数据文件启用了自动扩展,则数据文件进行自动扩展
如果undo表空间里的数据文件没有启用自动扩展,则获取undo segment里的inactive状态的extents
如果还是没有获得可用空间,报空间不足的错误
锁
select … for update锁定select检索的行
select … for update of…指定锁定范围
select …for update wait|nowait|skiplocked改变系统排队机制
审核
审核SYSDBA活动
AUDIT_SYS_OPERATIONS=TRUE默认为false,静态参数
SYSDBA、SYSOPER连接数据库发布的每条语句都会写入操作系统的审核跟踪
Windows 写入application log,unix/linux写入参数AUDIT_FILE_DEST指定目录
数据库审核
跟踪特定权限使用、特定命令执行、特定表访问、登录尝试
AUDIT_TRAIL=NONE,FALSE|OS,XML,XML_EXTENTDED|DB,DB_EXTENDED静态参数
NONE,FALSE关闭数据库审核,默认
OS,XML,XML_EXTENDED跟踪文件存入操作系统审核跟踪结果查看操作系统文件
DB,DB_EXTENDED跟踪文件存入数据字典表SYS.AUD$
结果查看DBA_AUDIT_TRAILDBA_common_audit_trail
审核权限
audit create any tiger
audit select any table by session|by access,默认by session
违反审核条件的每个会话生成一条审核记录,by session
每次违反条件的情况生成一条记录,by access
审核对象
audit insert on hr.tbs whenever sucessful | not sucessful审核insert权限,默认审核所有操作。
audit all on hr.tbs审核select dml ddl权限
审核连接
audit session whenever not sucessful,与审核create session权限效果相同
基于值的审核
基于数据库的审核能捕获针对表的命令,但不能跟踪受影响的行的实际变化值
如 audit insert on hr.employees
insert into hr.employees values(50,’张三’) 数据库审核能获知insert命令,但不能获得插入行的实际值
用数据库触发器执行基于值的审核能记录事件全部细节
细粒度审核 fine-grained auditing FGA
只在访问表的特定行或特定列时生成审核记录,还可以在违返审核条件时执行一个PL/SQL代码块
FGA结果查看 DBA_FGA_AUDIT_TRAILDBA_COMMON_AUDIT_TRAIL
用户、角色、权限
sys
sysdba sysoper,一种系统权限,最高数据库管理权限,默认sys用户拥有此权限
普通用户账号存在数据字典表中里面,数据库没有启动以前,不能对用户进行认证。
sys用户需要在数据库没有启动时进行登录,采用操作系统认证和密码文件认证
1、操作系统认证(本地外部认证)
unix属于DBA组用户、windows属于ora_dba组用户
用户登录操作系统后就可以用sysdba进行登录connect/as sysdba
os_authent_prefix 默认ops$
oracle_home目录的组用户(linux/unix通常dba组用户),被授予 sysdba sysoper sysasm权限(默认sys)
不输入用户名和密码本地登录connect / as sysdba
remote_os_authent 默认false
允许操作系统用户(拥有sysdba,sysoper,sysasm权限)不输入用户名和密码远程登录
2、口令文件认证(远程登录)
remote_login_passwordfile=none|exclusive|shared
none 禁用口令文件认证,不允许远程登录
exclusive 启用口令文件认证,允许远程登录
shared 启用口令文件认证,允许远程登录,共享口令文件
v$pwfile_user 查看哪些用户拥有sysdba sysoper权限
作为sysdba连接实例不管是否输入用户名或口令,最终用户是sys,用sysoper连接实际用户是public
orapwd file=orapworaclr11g password=oracle enteries=5;
用户权限
系统权限:访问(使用)数据库(系统资源)的权力(能力)
create/ drop user | table | view | sequence | tiger | procedure
select|create|drop any table任何用户(schema)表
用户权限:维护数据库中对象的权力
table: alter select insert update delete index references
view: select insert update delete
sequence: alter select
procedure: execute
Example:
create user bob identified by pass!@#
alter user bob identified by Pass!@#
create role bob_g
create role bob_g identified by pass!@#
drop user|role cascade删除该用户所有对象
grant privs to user| role with admin option(不级联回收)
revoke privs from user| role
grant role to user
revoke role from user
grant select on scott.emp to dog with grant option(级联回收)
select * from session_privs查看该用户所有系统权限
07_dictionary_accessibility=true|false拥有select any table权限用户不可访问数据字典
create user bob identified by pass!@#$
default tablespace user
temporary tablespace temp
profile bob_profile |default-- profile:密码策略、用户资源限制
account lock | unlock
password expire
quota 100M on tablespace_name
7、用户和权限
⑴不能修改用户名,须先删除后再建,删除时连同用户的所有模式对象一并删除
⑵如多个用户登录到同一个用户账户,将共用一个临时表空间,可能导致性能问题,可采用
临时表空间组来解决
系统权限:影响数据字典的操作
对象权取:影响数据的操作
如果用户拥在create table权限,则拥有此表的对象权限
ANY权限针对数据库中的每个用户账户中的每个对象授权,是系统权取,不是对象权限
关于默认角色
角色授权用户账户后,当用户账户连接数据库时默认启用角色的权限。如果不希望这种默认方式
可alter user jon default role none,此时用户jon仅拥有自己被授予的权限,虽然有角色授予他,但他没有启用角色的权限
alter user job default role hr,此时用户jon拥有自己被授予的权限和角色hr拥有权限,但他没有启用gm角色权限,虽然他被授予了gm角色。
在软件嵌入命令来启用gm角色权限
配置文件:口令策略、资源限制
口令限制始终实施,资源限制仅参数文件 RESOURCE_LIMIT=TRUE时实施
授予public权限,所有连接到数据库的用户均拥有,以下权限建议从public回收
revoke execute on utl_file from public允许用户读取oracle所有者可以访问的文件和目录
revoke execute on utl_tcp from public
revoke execute on utl_smtp from public
revoke execute on utl_http from public