Oracle数据库常见异常的诊断方法

Oracle数据库常见异常的诊断方法
Oracle数据库常见异常的诊断方法

目录

第1章 Oracle数据库常见问题诊断方法 (1)

1.1 常见错误篇 (1)

1.1.1 ORA-12571、ORA-03113、ORA-03114、ORA-01041 (1)

1.1.2 ORA-01000 (1)

1.1.3 ORA-01545 (2)

1.1.4 ORA-0165x (2)

1.1.5 ORA-01555 (3)

1.1.6 ORA-04031 (3)

1.1.7 ORA-04091 (3)

1.1.8 ORA-01242、ORA-01113 (4)

1.2 内部错误篇 (4)

1.2.1 ORA-00600【12330】错误 (4)

1.2.2 ORA-00604【xxx】错误 (5)

1.2.3 ORA-00600【3339】错误 (5)

1.2.4 ORA-00600【13004】错误 (5)

1.3 分布式事务篇 (6)

1.3.1 诊断分布式事务 (6)

1.3.2 检查其它节点的事务(DBA_2PC_NEIGHBORS) (6)

1.3.3 通过DBA_2PC_PENDING字典表检查事务的状态 (6)

1.3.4 检查处理结果 (7)

1.3.5 COMMIT FORCE或ROLLBACK FORCE命令 (7)

1.4 OPS或RAC篇 (8)

1.4.1 准备工作 (8)

1.4.2 紧急情况下的状态备份 (8)

1.4.3 OPS设计、配置准则 (9)

1.4.4 OPS常见问题 (9)

1.4.5 诊断分析步骤 (9)

1.5 非OPS篇 (18)

1.5.1 ORACLE数据库系统常见问题:空间方面问题 (18)

1.5.2 ORACLE数据库系统常见问题:性能方面问题 (18)

1.5.3 ORACLE数据库系统常见问题:锁争用方面问题 (19)

1.5.4 ORACLE数据库系统常见问题:内存方面问题 (20)

1.5.5 ORACLE问题分析脚本 (20)

1.5.6 SQL*NET篇 (24)

1.5.7 TNS-12154 Error 或ORA-12154 (24)

1.5.8 NL-00462 Error 或ORA-00462 (25)

1.5.9 NL-00405 Error 或ORA-00405 (26)

1.5.10 TNS-01155 Error 或ORA-01155 (26)

1.5.11 TNS-12537 、TNS-12560、TNS-00507 Error (26)

1.5.12 TNS-12203 Error (27)

1.5.13 TNS-12533 Error (27)

1.6 备份与恢复篇 (27)

1.6.1 EXP-00942 或ORA-00942、ORA-00904错误 (28)

1.6.2 EXP-00037 或 ORA-00037 (28)

1.6.3 IMP-00009 或ORA-00009 (28)

1.6.4 EXP-00041或ORA-00041 (29)

1.6.5 IMP-00016 、IMP-00036 、IMP-00037 、IMP-00038 (29)

第1章 Oracle数据库常见问题诊断方法

1.1 常见错误篇

ORACLE的这类错误在ORALCE的文档中有详细说明,但原因及措施说明不

详细,本文当着重说明如何解决这类错误。

1.1.1 ORA-12571、ORA-03113、ORA-03114、ORA-01041

1. 特征

客户端(代理或应用服务器)有时报这类断连错误

2. 原因

如果偶尔出现一次,则可能为网络原因或用户异常中止,如果经常出现则为

客户端与服务端的字符集不一致。

3. 措施

如果偶尔出现,可在服务端的协议配置文件PROTOCOL.ORA中增加一行

TCP.NODELAY=YES;

如果经常出现,则为客户端与服务端字符集不一致或网络原因。

客户端的字符集在注册表里定义:

HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG

在客户端注册表中的TCP参数项中设置

TCPMAXDATARETRANSMITIONS=20。

1.1.2 ORA-01000

1. 特征

达到会话允许的最大游标数

2. 原因

达到会话允许的最大游标数

3. 措施

有两种解决方法:

在初始化文件INIT.ORA文件中增加OPEN_CURSORS的数量,一般

要求大于200。

在应用级,与开发工具有关,例如设置MAXOPEN_CURSORS等。

1.1.3 ORA-01545

1. 特征

某个回滚段不可用

2. 原因

(1) 当使回滚段ONLINE时,但回滚段不可用,例如回滚段所在表空间

OFFLINE;

(2) 当使回滚段ONLINE时,但回滚段已ONLINE,例如回滚段被使用两次,

典型的案例如OPS方式时,回滚段不能公有;

(3) 删除回滚段时,回滚段中有活动的事务;

3. 措施

(1) 确保回滚段可用

(2) 从初始化文件INIT.ORA的参数ROLLBACK)SEGMENTS中删

除指定的回滚段。

(3) 可以将回滚段所在表空间删除,取消UNDO事务

1.1.4 ORA-0165x

1. 特征

表空间没有足够的空间供分配

2. 原因

表空间已满;存储参数不合理,NEXT太小;没有连续的区间

3. 措施

如果表空间已满,则需为表空间增加文件;如果存储参数不合理,则需增加

INITIAL和NEXT;如果没有连续的区间,需要合并空闲的表空间。

查看空间碎片用DBA_FREE_SPACE

1.1.5 ORA-01555

1. 特征

当前会话无法读到以前版本的数据

2. 原因

原因很多,主要原因有下列:回滚段太小、太少;回滚段冲突;交叉提交

(FETCH_ACROSS)

3. 措施

增加回滚段数量;

1.1.6 ORA-04031

1. 特征

共享池内存区内存不够,或产生内存碎片

2. 原因

当试图装载一个大包时或执行一个较大的存储过程时,而共享池没有连续的

内存空间。

3. 措施

如果是内存不够,则增加SHARE)POOL_SIZE;

如果是内存碎片,执行alter system flush share_pool

1.1.7 ORA-04091

1. 特征

触发器工作不正常

2. 原因

一个行触发读取或修改变化的表(正在修改、插入)时,产生这种错误。

3. 措施

检查触发器脚本,保证引用完整性

1.1.8 ORA-01242、ORA-01113

1. 特征

介质故障导致数据库宕机

2. 原因

介质故障。

3. 措施

检查硬件故障;修改dbshut脚本,将其中的STARTUP命令修改为:

Startup open recover

Alter database open

1.2 内部错误篇

ORACLE的错误各种各样,包括应用错误、一般错误、内部错误等,前面两

类错误在ORALCE的文档中有说明,但内部错误没有相应的文档说明,只是

请求报告ORACLE技术支持,本文档主要讨论ORACLE的内部错误,且这

些内部错误在ICD中经常出现,仅供参考。

内部错误一般为格式为ORA-00600或ORA-006XX,其中前者最普遍,后者较

少见,ORA-600中的第一个变量用于标记代码中错误的位置,第二个到第五

个变量显示附加信息,例如文件号、函数号等具体信息。

1.2.1 ORA-00600【12330】错误

1. 特征

数据库告警日志中经常有这个错误及相应的trace文件

2. 原因

用户异常中断操作或客户端字符集与SERVER端字符集不一致

3. 措施

如果偶尔出现,则为用户异常中止,例如代理或应用服务器的断连,有时会

产生这个错误;如果经常出现,则为客户端与服务端字符集不一致。

客户端的字符集在注册表里定义:

HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG

1.2.2 ORA-00604【xxx】错误

1. 特征

在分析SQL语句时,查询数据字典表发生错误

2. 原因

这类错误一般与内存管理有关,有可能是由于内存泄漏导致该错误

3. 措施

如果偶尔出现,适当加大SHARE_POOL_SIZE;如果经常出现,则需要打相

应的补丁。

1.2.3 ORA-00600【3339】错误

1. 特征

数据冲突,包括:块格式冲突、非法索引入口

2. 原因

oracle系统本身bug;操作系统或介质故障

3. 措施

ORACLE升级或打补丁;检查硬件故障

1.2.4 ORA-00600【13004】错误

1. 特征

逻辑冲突,例如查询返回错误的数据等

2. 原因

oracle系统本身bug;

3. 措施

ORACLE升级或打补丁

1.3 分布式事务篇

对于数据库服务端到服务端的访问(如DBLINK、复制、快照等),由于网络

等原因可能会产生一个节点的事务无法恢复,与之相关的另一个节点的数据

库事务挂起,因而产生分布式数据库事务问题。

1.3.1 诊断分布式事务

(1) 检查alert.log文件,发现相应的错误

确保网络正常,并检查DBLINK是”valid”和可操作的

(2) SELECT * FROM V$DBLINK 或GV$DBLINGK

(3) 查找悬挂的事务( DBA_2PC_PENDING)

SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, HOST,

COMMIT# FROM DBA_2PC_PENDING

LOCAL_TRAN_ID 是本机的事务号(报告错误的机器),如果

LOCAL_TRAN_ID = GLOBAL_TRAN_ID, 即分布式事务来源于本机,也可以

从本机的alert.log中得到 LOCAL_TRAN_ID 。

1.3.2 检查其它节点的事务(DBA_2PC_NEIGHBORS)

(1) 执行下列命令:

SELECT LOCAL_TRAN_ID, IN_OUT, DATABASE, INTERFACE

FROM DBA_2PC_NEIGHBORS

(2) 在init.ora中检查参数COMMIT_POINT_STRENGTH

该参数应有较大值(最好最大值)

1.3.3 通过DBA_2PC_PENDING字典表检查事务的状态

(1) 如果状态是commit,则本地数据库提交成功,即不必在本数据库实施

COMMIT FORCE或ROLLBACK FORCE。

(2) 如果状态是not commited(prepared),则必需在本数据库实施COMMIT

FORCE或ROLLBACK FORCE,SCN号可在DBA_2PC_PENDING

字典表中找到。

(3) 比较个节点的GLOBAL_TRAN_ID及SCN号(DBA_2PC_PENDING)

如果在其它节点没有这个GLOBAL_TRAN_ID及SCN,则RECO已经解决

了这个问题,可以不作任何事情。此时可在进程中看到RECO进程(通常看

不到)

(4) 如果节点存在没有提交事务

如果事务的状态是prepared,则必需在本数据库实施COMMIT FORCE或

ROLLBACK FORCE,SCN号可在DBA_2PC_PENDING字典表中找到。同

时,应通过DBA_2PC_NEIGHBORS字典表检查有无与

DBA_2PC_PENDING中相同的事务ID,如果有,则先处理

DBA_2PC_NEIGHBORS中的事务。

1.3.4 检查处理结果

执行了COMMIT FORCE或ROLLBACK FIRCE后,字典表

DBA_2PC_PENDING 和DBA_2PC_NEIGHBORS应无记录。

如果由于某种原因没有清除,执行下列包

DBMS_TRANSACTION.purge_lost_db_entry,这个是最后的办法,原则上

不许执行。

1.3.5 COMMIT FORCE或ROLLBACK FORCE命令

(1) COMMIT FORCE命令

如果SCN是88123887 (dba_2pc_pending),本地事务ID是 1.13.5197

( dba_2pc_pending或alert.log)

SVRMGR> COMMIT FORCE '本机事务ID', '最高SCN';

SVRMGR> COMMIT FORCE '1.13.5197', '88123887';

(2) ROLLBACK FORCE命令

如果本机事务ID 是1.13.5197 (dba_2pc_pending或 alert.log):

SVRMGR> ROLLBACK FORCE '本机事务ID ';

SVRMGR> ROLLBACK FORCE '1.13.5197';

(3) 强行清除事务命令

如果本机事务ID 是1.13.5197 (dba_2pc_pending或 alert.log),则:

SVRMGR> Execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY

('1.13.5197');

SVRMGR> Execute DBMS_TRANSACTION.PURGE_MIXED ('1.13.5197');

注意:只有当RECO无法解决问题时,采用这个命令。

1.4 OPS或RAC篇

ORALCE并行服务(即OPS)在ICD中应有广泛应用,平台涉及各主流硬件

平台,包括IBM AIX、HP UX、SUN SOLARES、TRU UNIX、WINDOWS

平台,版本也较多,包括7.3.X、8.0.X、8.1.X(8I),由于ORACLE OPS

本身固有的特点及缺陷或使用不当,有时会产生较严重的性能问题,甚至导

致数据库挂起(HUNG)。本文档就是分析、解决OPS的性能及OPS挂起问题。

由于分析、解决OPS问题需要对ORACLE OPS的工作原理有较深刻理解,

所以本文档只是提供通用的分析思路及分析脚本。

该脚本主要用于ORACLE8I以下版本,对于ORACLE9I有些脚本可能不能执

行。

1.4.1 准备工作

以sys用户运行脚本catparr.sql,该脚本位于$ORACLE_HOME/rdbms/admin

目录下。

1.4.2 紧急情况下的状态备份

如果数据库挂起无法执行任何命令,则只能执行状态备份命令,待重启后再

进行分析。

状态备份命令如下(sys或internal用户):

SVRMGR> alter session set max_dump_file_size = 'UNLIMITED';

SVRMGR> alter session set events 'immediate trace name systemstate

level 10';

对于8.1.7以上版本,执行下列命令:

SQL> oradebug setmypid

SQL> oradebug unlimit

SQL> oradebug setinst all

SQL> oradebug -g def dump systemstate 10

1.4.3 OPS设计、配置准则

为了充分利用OPS的特性,应用设计及配置应严格遵循相应准则,否则,采

用OPS系统反而导致性能及安全性下降。OPS应用应遵循的几个准则:

(1) 应用严格分割:例如,不同的应用分别运行在不同的实例上;

(2) 事务分割:即一类事务分别运行于同一个实例,例如,平台的日结应与

平台业务运行在一个实例上;

(3) 功能分割:与设计相关,暂不考虑;

(4) 表分区:大表的数据分区

ICD产品一般采用1、2、4方法。

1.4.4 OPS常见问题

(1) OPS挂起(HANG);

(2) 性能很低,有时一台机器几乎无相应;

(3) 分布式锁进程LMD0占用资源很大;

1.4.5 诊断分析步骤

1. OPS有时挂起(HANG)

ORACLE数据库挂起的原因很多,也不容易分析,一般情况下,除了ORACLE

数据库系统本身的BUG之外,可能应用没有按照第四章的准则配置,下面是

一些检查步骤:

(1) 检查初始化文件参数GC_FILES_TO_LOCKS,保证该参数合理设置,

gc_files_to_locks语法:

GC_FILES_TO_LOCKS = "{ file_list=lock_count[!blocks][EACH]}[:]..."

具体设置时请参考第六章中问题12、13、14的分析结果,一般情况下,

SYSTEM、ROLLBACK、有大量冲突目标所在的文件必须重新设置。

该参数给每一个数据文件给出一定数量的PCM锁,这样减少锁资源的分配开

销并减少访问冲突

(2) 减少双机之间的通讯,在初始化文件中设置:

_lm_send_direct_send=lkmgr

(3) 检查LM_RESS、LM_LOCKS参数

检查V$resource_limit,保证LM_RESS、LM_LOCKS大于该视图中的最大值,且lm_locks>=lm_ress

(4) DLM(分布式锁管理器)通信量

如果TCKT_AVAIL值特大,会导致系统很慢,有时会导致OPS挂起;如果TCKT_WAIT是’YES’,则系统已经耗尽DLM资源(没有ticket),因此必须确保足够的TCKT_AVAIL。

select * from gv$dlm_traffic_controller

order by TCKT_AVAIL;

2. 性能很低

(1) 检查DLM资源

检查gv$dlm_traffic_controller视图,如果TCKT_AVAIL值特大,会导致系统很慢

select * from gv$dlm_traffic_controller

order by TCKT_AVAIL;

3. 分布式锁进程LMD0占用资源很大

该问题一般是ORACLE的BUG,需要打补丁。另外,也可通过下列设置减少LMD0的工作。

_lm_send_direct_send=lkmgr

4. OPS问题通用分析方法

所有OPS问题均可通过下列脚本进行分析,这些脚本检查OPS涉及的各方面的内容,所以,对所有OPS问题,如果时间允许,应按下列方法全面检查。另外,这些脚本也可用于日常维护。

(1) 等待会话

下列SQL语句查询运行时间较长,且等待一个非空闲的等待事件,事件名可从V$EVENT_NAME中查找。

select sw.inst_id, sw.sid, sw.state, sw.event, sw.seconds_in_wait seconds,

sw.p1, sw.p2, sw.p3, sa.sql_text last_sql

from gv$session_wait sw, gv$session s, gv$sqlarea sa

where sw.event not in

('rdbms ipc message','smon timer','pmon timer',

'SQL*Net message from client','lock manager wait for remote message', 'ges remote message', 'client message', 'pipe get', 'Null event', 'PX

Idle Wait',

'single-task message', 'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal

deqeue',

'listen endpoint status','slave wait','wakeup time manager')

and seconds_in_wait > 0

and (sw.inst_id = s.inst_id and sw.sid = s.sid)

and (s.inst_id = sa.inst_id and s.sql_address = sa.address)

order by seconds desc;

其中p1、p2、p3通过下列语句查找

select distinct event, p1text, p2text, p3text

from gv$session_wait sw

where sw.event not in ('rdbms ipc message','smon timer','pmon timer',

'SQL*Net message from client','lock manager wait for remote message',

'ges remote message', 'client message', 'SQL*Net more data from client',

'pipe get', 'Null event', 'PX Idle Wait', 'single-task message',

'wakeup time manager')

and seconds_in_wait > 0

order by event;

(2) PCM锁资源阻挡

这个脚本显示正在持有锁的会话正在阻挡另一个会话,其中grant_level表示

被授予的PCM锁,request_level表示正在请求的锁,lockstate表示锁的状

态,seconds_in_wait表示会话等待时间。

select dl.inst_id, s.sid, p.spid, dl.resource_name1,

decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-

S (SS)',

'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',

'KJUSEREX','Exclusive',request_level) as grant_level,

decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Ro

w-S (SS)',

'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',

'KJUSEREX','Exclusive',request_level) as request_level,

decode(substr(dl.lockstate,1,8),'KJUSERGR','Granted','KJUSEROP','Ope

ning',

'KJUSERCA','Canceling','KJUSERCV','Converting') as lockstate,

s.sid, sw.event, sw.seconds_in_wait sec

from gv$dlm_locks dl, gv$process p, gv$session s, gv$session_wait sw

where blocker = 1

and (dl.inst_id = p.inst_id and dl.pid = p.spid)

and (p.inst_id = s.inst_id and p.addr = s.paddr)

and (s.inst_id = sw.inst_id and s.sid = sw.sid)

order by sw.seconds_in_wait desc;

(3) PCM锁等待

这个脚本显示正在等待锁资源的会话,其中grant_level表示被授予的PCM

锁,request_level表示正在请求的锁,lockstate表示锁的状态,seconds_in_wait表示会话等待时间。

select dl.inst_id, s.sid, p.spid, dl.resource_name1,

decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-

S (SS)',

'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',

'KJUSEREX','Exclusive',request_level) as grant_level,

decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Ro

w-S (SS)',

'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',

'KJUSEREX','Exclusive',request_level) as request_level,

decode(substr(dl.lockstate,1,8),'KJUSERGR','Granted','KJUSEROP','Ope

ning',

'KJUSERCA','Cancelling','KJUSERCV','Converting') as lockstate,

s.sid, sw.event, sw.seconds_in_wait sec

from gv$dlm_locks dl, gv$process p, gv$session s, gv$session_wait sw

where blocked = 1

and (dl.inst_id = p.inst_id and dl.pid = p.spid)

and (p.inst_id = s.inst_id and p.addr = s.paddr)

and (s.inst_id = sw.inst_id and s.sid = sw.sid)

order by sw.seconds_in_wait desc;

(4) 本地锁等待

这个脚本显示本地锁等待,其中,addr表示锁地址,type表示锁类型,如果锁

类型是TM,则id1表示目标ID,id2为0;如果锁类型是TX,则id1表示事

务槽数(可不管),

select l.inst_id, l.sid, l.addr, l.type, l.id1, l.id2,

decode(l.block,0,'blocked',1,'blocking',2,'global') block,

sw.event, sw.seconds_in_wait sec

from gv$lock l, gv$session_wait sw

where (l.sid = sw.sid and l.inst_id = sw.inst_id)

and l.block in (0,1)

order by l.type, l.inst_id, l.sid;

(5) 门闩锁保持

该锁是oracle的内部锁,用户无法控制,一般持有时间很短,可不考虑。但

如果发现门闩锁冲突或'latch free'等待时间,则应执行下列脚本检查。

select distinct lh.inst_id, s.sid, https://www.360docs.net/doc/1216584646.html,ername, https://www.360docs.net/doc/1216584646.html,ername os_user,

https://www.360docs.net/doc/1216584646.html,

from gv$latchholder lh, gv$session s, gv$process p

where (lh.sid = s.sid and lh.inst_id = s.inst_id)

and (s.inst_id = p.inst_id and s.paddr = p.addr)

order by lh.inst_id, s.sid;

门锁的命中率脚本如下:

select distinct lh.inst_id, s.sid, https://www.360docs.net/doc/1216584646.html,ername, https://www.360docs.net/doc/1216584646.html,ername os_user,

https://www.360docs.net/doc/1216584646.html,

from gv$latchholder lh, gv$session s, gv$process p

where (lh.sid = s.sid and lh.inst_id = s.inst_id)

and (s.inst_id = p.inst_id and s.paddr = p.addr)

order by lh.inst_id, s.sid;

select inst_id, name latch_name,

round((immediate_gets/(immediate_gets+immediate_misses)), 3) hit_ratio,

round(sleeps/decode(immediate_misses,0,1,immediate_misses),3)

"SLEEPS/MISS"

from gv$latch

where round((immediate_gets/(immediate_gets+immediate_misses)), 3)

< .99

and immediate_gets + immediate_misses > 0

order by round((immediate_gets/(immediate_gets+immediate_misses)), 3);

(6) 全局缓存一致性读性能脚本

这个脚本显示了平均一致性读的等待时间(AVG CR BLOCK RECEIVE TIME),一般情况下该值为15毫秒左右,该值与

DB_MULTI_BLOCK_READ_COUNT参数有关,

DB_MULTI_BLOCK_READ_COUNT值越大,等待时间也越大。

select b1.inst_id, b2.value "GCS CR BLOCKS RECEIVED",

b1.value "GCS CR BLOCK RECEIVE TIME",

((b1.value / b2.value) * 10) "AVG CR BLOCK RECEIVE TIME (ms)"

from gv$sysstat b1, gv$sysstat b2

where https://www.360docs.net/doc/1216584646.html, = 'global cache cr block receive time' and

https://www.360docs.net/doc/1216584646.html, = 'global cache cr blocks received' and b1.inst_id = b2.inst_id ;

(7) 全局缓存锁性能

该脚本显示平均全局队列得到时间(AVG GLOBAL LOCK GET TIME),一般情况下,

AVG GLOBAL LOCK GET TIME为20-30毫秒(包括分配全局队列和初始化时间)。如果该值很大,则系统必然存在许多超时时间,请按上述方法检查。

select b1.inst_id, (b1.value + b2.value) "GLOBAL LOCK GETS",

b3.value "GLOBAL LOCK GET TIME",

(b3.value / (b1.value + b2.value) * 10) "AVG GLOBAL LOCK GET TIME (ms)" from gv$sysstat b1, gv$sysstat b2, gv$sysstat b3

where https://www.360docs.net/doc/1216584646.html, = 'global lock sync gets' and

https://www.360docs.net/doc/1216584646.html, = 'global lock async gets' and https://www.360docs.net/doc/1216584646.html, = 'global lock get time' and b1.inst_id = b2.inst_id and b2.inst_id = b3.inst_id;

(8) 资源应用

这个脚本检查资源利用情况。

select inst_id, resource_name, current_utilization, max_utilization, initial_allocation

from gv$resource_limit

where max_utilization > 0

order by inst_id, resource_name;

(9) DLM(分布式锁管理器)通信量

如果该值特大,会导致系统很慢,有时会导致OPS挂起。如果TCKT_WAIT 是’YES’,则系统已经耗尽DLM资源(没有ticket),因此必须确保足够的TCKT_AVAIL。

select * from gv$dlm_traffic_controller

order by TCKT_AVAIL;

(10) DLM杂项

select * from gv$dlm_misc;

(11) 锁转换详细信息

select * from gv$lock_activity;

(12) 前10个写PING/FUSION数最大的的目标

select inst_id, name, kind, file#, status, BLOCKS,

READ_PINGS, WRITE_PINGS

from (select p.inst_id, https://www.360docs.net/doc/1216584646.html,, p.kind, p.file#, p.status,

count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS,

sum(p.forced_writes) WRITE_PINGS

from gv$ping p, gv$datafile df

where p.file# = df.file# (+)

group by p.inst_id, https://www.360docs.net/doc/1216584646.html,, p.kind, p.file#, p.status

order by sum(p.forced_writes) desc)

where rownum < 11

order by WRITE_PINGS desc;

(13) 前10个读PINGING/FUSION数最大的目标

select inst_id, name, kind, file#, status, BLOCKS,

READ_PINGS, WRITE_PINGS

from (select p.inst_id, https://www.360docs.net/doc/1216584646.html,, p.kind, p.file#, p.status,

count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS,

sum(p.forced_writes) WRITE_PINGS

from gv$ping p, gv$datafile df

where p.file# = df.file# (+)

group by p.inst_id, https://www.360docs.net/doc/1216584646.html,, p.kind, p.file#, p.status

order by sum(p.forced_reads) desc)

where rownum < 11

order by READ_PINGS desc;

(14) 前10个FALSE PINGING数最大的目标

这个可通过gc_files_to_locks避免。

select inst_id, name, kind, file#, status, BLOCKS,

READ_PINGS, WRITE_PINGS

from (select p.inst_id, https://www.360docs.net/doc/1216584646.html,, p.kind, p.file#, p.status,

count(p.block#) BLOCKS, sum(p.forced_reads) READ_PINGS,

sum(p.forced_writes) WRITE_PINGS

from gv$false_ping p, gv$datafile df

where p.file# = df.file# (+)

group by p.inst_id, https://www.360docs.net/doc/1216584646.html,, p.kind, p.file#, p.status

order by sum(p.forced_writes) desc)

where rownum < 11

order by WRITE_PINGS desc;

(15) 前10个等待事件

select inst_id, event, time_waited, total_waits, total_timeouts

from (select inst_id, event, time_waited, total_waits, total_timeouts from gv$system_event where event not in ('rdbms ipc message','smon timer',

'pmon timer','SQL*Net message from client',

'lock manager wait for remote message','ges remote message', 'client message',

'SQL*Net more data from client', 'pipe get', 'Null event', 'PX Idle Wait', 'single-task message', 'wakeup time manager')

order by time_waited desc)

where rownum < 11

order by time_waited desc;

(16) 显示会话、进程、程序

select p.inst_id, s.sid, s.serial#, p.pid, p.spid, p.program,

https://www.360docs.net/doc/1216584646.html,ername,

https://www.360docs.net/doc/1216584646.html,ername os_user, sw.event, sw.seconds_in_wait sec

from gv$process p, gv$session s, gv$session_wait sw

where (p.inst_id = s.inst_id and p.addr = s.paddr)

and (s.inst_id = sw.inst_id and s.sid = sw.sid)

order by p.inst_id, s.sid;

(17) 没有授予等待会话的PCM锁

这个脚本显示当前没有授予任何等待会话的锁,由于冲突这些锁很可能有问

题。

select dl.inst_id, s.sid, p.spid, dl.resource_name1,

decode(substr(dl.grant_level,1,8),'KJUSERNL','Null','KJUSERCR','Row-

S (SS)',

'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',

'KJUSEREX','Exclusive',request_level) as grant_level,

decode(substr(dl.request_level,1,8),'KJUSERNL','Null','KJUSERCR','Ro

w-S (SS)',

'KJUSERCW','Row-X (SX)','KJUSERPR','Share','KJUSERPW','S/Row-X (SSX)',

'KJUSEREX','Exclusive',request_level) as request_level,

decode(substr(dl.lockstate,1,8),'KJUSERGR','Granted','KJUSEROP','Ope

ning',

'KJUSERCA','Cancelling','KJUSERCV','Converting') as lockstate,

s.sid, sw.event, sw.seconds_in_wait sec

from gv$dlm_locks dl, gv$process p, gv$session s, gv$session_wait sw

where lockstate not like 'KJUSERGRANTED%'

and (dl.inst_id = p.inst_id and dl.pid = p.spid)

and (p.inst_id = s.inst_id and p.addr = s.paddr)

and (s.inst_id = sw.inst_id and s.sid = sw.sid)

and sw.event not in ('rdbms ipc message','smon timer','pmon timer',

'SQL*Net message from client','lock manager wait for remote message',

'ges remote message', 'client message', 'pipe get', 'Null event', 'PX

Idle Wait',

'single-task message', 'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal

deqeue',

'listen endpoint status','slave wait','wakeup time manager')

and sw.seconds_in_wait > 0

order by sec desc;

PCM锁没有授予等待会话的锁全部信息:

select * from gv$dlm_all_locks

where resource_name1 in

(select dl.resource_name1

from gv$dlm_locks dl, gv$process p, gv$session s, gv$session_wait sw where lockstate not like 'KJUSERGRANTED%'

and (dl.inst_id = p.inst_id and dl.pid = p.spid)

and (p.inst_id = s.inst_id and p.addr = s.paddr)

and (s.inst_id = sw.inst_id and s.sid = sw.sid)

and sw.event not in ('rdbms ipc message','smon timer','pmon timer', 'SQL*Net message from client','lock manager wait for remote message', 'ges remote message', 'client message', 'SQL*Net more data from client', 'pipe get', 'Null event', 'PX Idle Wait', 'single-task message',

'wakeup time manager') and sw.seconds_in_wait > 0)

order by resource_name1, inst_id, lockstate, pid;

PCM锁没有授予等待会话的资源全部信息:

select * from gv$dlm_ress

where resource_name in (select dl.resource_name1

from gv$dlm_locks dl, gv$process p, gv$session s, gv$session_wait sw where lockstate not like 'KJUSERGRANTED%'

and (dl.inst_id = p.inst_id and dl.pid = p.spid)

and (p.inst_id = s.inst_id and p.addr = s.paddr)

and (s.inst_id = sw.inst_id and s.sid = sw.sid)

and sw.event not in ('rdbms ipc message','smon timer','pmon timer', 'SQL*Net message from client','lock manager wait for remote message', 'ges remote message', 'client message', 'pipe get', 'Null event', 'PX Idle Wait',

'single-task message', 'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue',

'listen endpoint status','slave wait','wakeup time manager')

and sw.seconds_in_wait > 0)

order by resource_name, inst_id, master_node;

(18) 当前等待的会话

select sw.inst_id, sw.sid, sw.seconds_in_wait sec, sa.sql_text sql from gv$session_wait sw, gv$session s, gv$sqlarea sa

where sw.sid = s.sid (+)

and sw.inst_id = s.inst_id (+)

and s.sql_address = sa.address

and sw.event not in ('rdbms ipc message','smon timer','pmon timer', 'SQL*Net message from client','lock manager wait for remote message', 'ges remote message', 'client message', 'pipe get', 'Null event', 'PX Idle Wait',

'single-task message', 'PX Deq: Execution Msg', 'KXFQ: kxfqdeq - normal deqeue',

'listen endpoint status','slave wait','wakeup time manager')

and seconds_in_wait > 0

order by sw.seconds_in_wait desc;

1.5 非OPS篇

1.5.1 ORACLE数据库系统常见问题:空间方面问题

1. 现象

随着数据库使用时间的增长,数据库系统存储的数据就越多,不断增长的数

据可能导致空间不足、目标的范围分配数太大、SQL语句的性能下降等问题,

因此应该经常检查空间使用情况。

2. 解决思路

定期检查主要表空间的使用情况,执行表空间的剩余空间检查脚本(语句4),

剩余空间应该保持在20%以上,否则需要备份、增加数据文件或清理历史数

据;

注意:空间的标志位。有时空间高位标志位远远大于实际使用的空间数量,

此时应截断高位标志位。

表或索引的Extents数(语句1)应该小于50,核心表数据表Extents数应该

小于100,否则要参考集成案例来调整表的存储参数。由于索引对EXTENT

比较敏感,所以,对于有大量UPDATE、INSERT操作的索引,EXTENT应

更小。

空间碎片问题:对于ICD业务来讲,由于DDL操作较少,所以,表空间碎片

问题基本不存在,但表、索引的空间碎片问题普遍存在,例如

COMMONINFOMATION表及其索引。此时需要对表数据备份、TRUNCATE、

导入操作,对索引需要REBUILD。

1.5.2 ORACLE数据库系统常见问题:性能方面问题

1. 现象

座席端的调用慢甚至死机,应用服务器队列全忙、不断重连并最终断连。在

数据库服务器上的现象是CPU资源或者IO资源消耗很大。

oracle数据库基本命令

oracle数据库基本命令 oracle安装后 sys:超级管理员(dba),默认密码为:change_on_install system:系统管理员(dbaoper),默认密码为:manager; sys与system的不同在于sys能够create datebase而system则不能。scott:普通用户,默认密码:tiger 1.切换用户:conn 用户名/密码; SQL> conn system/manager; Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as system SQL> conn sys/change_on_install as sysdba; Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as SYS 注意:sys与其他用户在命令窗口切换时的不同。 2.修改密码:passw username;(普通用户可以修改自己密码,管理员可以修改其他人的密码) 3.显示当前用户。show user; 4.断开数据库同时推出:exit; 文件操作 5.运行sql脚本,start d:\a.sql; 6.编辑指定的sql脚本。Edit d:\a.sql; 7.将屏幕上指定的内容输出到指定文本中去。spool e:\b.sql;执行语句;spool off;

8.显示设置环境变量; 可以用来控制输出的各种格式,如果希望永久保存可以修改glogin.sql脚本。 Linesize(行宽): show linesize;显示行宽 set linesize 90;设置行宽为90个字符。 Pagesize(页面大小): Show pagesize;显示页面大小 Set pagesize 180;设置页面的小。 (做报表时可以用。一页设定几行。)

ORACLE常用SQL语句大全

ORACLE常用SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not nul l],..) 根据已有的表创建新表: A:select * into table_new from table_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle> 5、说明:删除表 drop table tablename

6、说明:增加一个列,删除一个列 A:alter table tabname add column col type B:alter table tabname drop column colname 注:DB2DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、添加主键: Alter table tabname add primary key(col) 删除主键: Alter table tabname drop primary key(col) 8、创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、创建视图:create view viewname as select statement 删除视图:drop view viewname 10、几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、几个高级查询运算词 A:UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B:EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C:INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、使用外连接

Oracle常用函数及使用案例(珍藏版)

Oracle常用函数及使用案例(珍藏版) 一:sql函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char,m,n):取字符串的字串。 案例1.将所有员工的名字按小写的方式显示 select lower(ename),sal from emp; 案例2.将所有员工的名字按大写的方式显示。 select upper(ename),sal from emp; 案例3.显示正好为五个字符的的员工的姓名。 select * from emp where length(ename)=5; 案例4.显示所有员工姓名的前三个字符。 select substr(ename,1,3) from emp;//从名字的第一个字符开始取,向后取三个字符。 案例5.以首字母为大写的方式显示所有员工的姓名。 (1)首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp; 案例6.以首字母为小写的方式显示所有员工的姓名。(需要有较高的灵活度,细心分析和清晰思路) (1)首字母小写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母大写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp; 案例7.函数(替换):replace(char1,search_string,replace_string); 显示所有员工的姓名,用“我要替换A”替代所有“A”。 select replace(ename,'A','我是老鼠')from emp; 案例8.以首字母为小写的方式显示所有员工的姓名。 select replace(ename,substr(ename,1,1),lower(substr(ename,1,1)))from emp; 案例9.以首字母为大写的方式显示所有员工的姓名。 Select replace(ename,substr(ename,2,length(ename)-1),lower(substr(ename,2,length(ename) -1)))from emp; 二:数学函数:(在财务中用的比较多) ronud(sal)用于四舍五默认取整; ronud(sal,1)用于四舍五留一位小数。 trunc(sal)取整,忽略小数。截去小数部分。 trunc(sal,1)截取;小数点留一位,之后的右边的省去。 trunc(sal,-1)截取;只留整数,个位数取零。 floor(sal)向下最接近取整;比如1.1值为1.

ORACLE数据库学习心得

ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于oracle数据库的一些知识。 1.ORACLE的特点: 可移植性ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件须有两个或两个以上,用来记录所有数据库的变化,

用于数据库的恢复。控制文件可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程用来执行用户应用程序的。 ②服务进程处理与之相连的一组用户进程的请求。 ③后台进程ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON (Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。

Oracle数据库基本知识点

1、数据库基本语句 (1)表结构处理 创建一个表:cteate table 表名(列1 类型,列2 类型); 修改表的名字 alter table 旧表名 rename to 新表名 查看表结构 desc 表名(cmd) 添加一个字段 alter table 表名 add(列类型); 修改字段类型 alter table 表名 modify(列类型); 删除一个字段 alter table 表名 drop column列名; 删除表 drop table 表名 修改列名 alter table 表名 rename column 旧列名 to 新列名; (2)表数据处理 增加数据:insert into 表名 values(所有列的值); insert into 表名(列)values(对应的值); 更新语句:update 表 set 列=新的值,…[where 条件] 删除数据:delete from 表名 where 条件 删除所有数据,不会影响表结构,不会记录日志, 数据不能恢复--》删除很快: truncate table 表名 删除所有数据,包括表结构一并删除: drop table 表名 去除重复的显示:select distinct 列 from 表名 日期类型:to_date(字符串1,字符串2)字符串1是日期的字 符串,字符串2是格式 to_date('1990-1-1','yyyy-mm-dd')-->返回日期的 类型是1990-1-1 (3)查询语句 1)内连接 select a.*,b.* from a inner join b on a.id=b.parent_id

oracle数据库操作手册

操作手册 目录 一.表空间 (4) 1.创建表空间 (4) 2.增加表空间 (4) 3.删除表空间 (5) 4.查询表空间状态 (5) 5.查询数据文件路径 (5) 6.移动表空间中数据文件的路径 (5) 7.移动表和索引到其他表空间 (6) 8.查看表空间的使用率 (7) 二.用户和权限 (9) 1.创建用户 (9) 2.修改用户的密码 (9) 3.给用户授权 (9) 4. 查询数据库系统上有多少用户,文件名和创建时间 (10) 三.归档和非归档模式 (10) 1.查看数据库的归档模式 (10) 2.修改数据库的归档模式 (10) 四.日志文件 (11) 1.查询日志文件信息 (11) 2.增加日志文件配置信息 (12) 3.增加日志成员 (12) 4.删除一组日志 (12) 五.密码文件 (13) 1.创建密码文件 (13) 六.参数文件(SPFILE PFILE) (13) 1.查看数据库使用参数文件(SPFILE 还是PFILE) (13) 2.创建SPFILE (13) 3.通过PFILE 启动数据库 (13) 七.STATSPACK (14) 1.安装STATSPACK (14) 2.数据采集 (14) 3.设置自动快照 (14) 4.设置数据采集的时间 (14) 八.ORACLE信息查询 (15) 1.查询ORACLE数据库的名字,创建日期 (15) 2. 查询ORACLE所在操作系统的主机名,实例名,版本 (15) 3.查询ORACLE数据库系统版本详细信息 (15) 九.控制文件 (16) 1.查询控制文件 (16) 2.备份控制文件 (16)

十.索引 (16) 1.创建普通索引 (16) 2.创建位图索引 (16) 3.查询索引所在的表,表空间,索引类型 (16) 4.查询索引所在的列 (17) 十一.主键 (17) 1.定义主键 (17) 2.查询主键索引 (18) 3.查询约束信息 (18) 4.禁止约束 (18) 5.开启主键 (19) 十二.手工建库脚本 (19) 十三..PROFILE文件内容 (19) 十四.做定时JOB (20) 1.创建存储过程,为此存储过程作定时JOB (20) 2.定时JOB 的参数说明 (21) 十五.查询出SQL语句 (22) 1.通过SID 找出HASH VALUE 值 (22) 2.通过HASH VALUE 值查询出SQL 语句 (22) 3.根据HASH VALUE 值查询出对应的 SESSLIN SID (22) 4.根据HASH VALUE 找出对应的机器名称 (22) 5.通过HASH VALUE 查询出该语句的执行计划 (23) 6.查询存储过程 (23) 7.查询对象属于哪个用户 (23) 8.查询表的分析时间 (23) 9.查询对象(表)的类型 (23) 十六.查询脚本 (24) 1.查询等待事件 (24) 2.查询大表已经索引超过2G 的对象 (24) 3.查看锁 (25) 十七.基本的SQL语句 (25) 1.对表的操作 (25) 2.常用的函数 (26) 十八.安装手册 (27) 十九.错误总结 (27) 1. ORA-00257: 归档程序错误 (27) 二十.故障处理 (29) 1.日志挖掘 (29) 2.行链接行迁移 (30) 3.逻辑备份(exp/imp) (35) 4.关闭和启动数据库的步骤 (36) 二十一.METALINK操作 (37) 1.开二级别SR (37) 2.OPATCH 下载地址 (37)

Oracle数据库基础题库【含答案】

1、判断题,正确请写写"T",错误请写写"F", 1、oracle数据库系统中,启动数据库的第一步是启动一个数据库实例。( T ) 2、Oracle服务器端的监听程序是驻留在服务器上的单独进程,专门负责响应客户机的连接请求。( F) 3、oracle数据库中实例和数据库是一一对应的(非ORACLE并行服务,非集群)。( T) 4、系统全局区SGA 是针对某一服务器进程而保留的内存区域,它是不可以共享的。( F ) 5、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信息。( F ) 8、数据字典中的内容都被保存在SYSTEM表空间中。( T ) 9、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的条件中也可以有聚集函数。( F ) 10、"上海西北京" 可以通过like ‘%上海_’查出来。( F ) 11、表空间是oracle 最大的逻辑组成部分。Oracle数据库由一个或多个表空间组成。一个表空间由一个或多个数据文件组成,但一个数据文件只能属于一个表空间。( T ) 12、表空间分为永久表空间和临时表空间两种类型。( T ) 13、truncate是DDL操作,不能 rollback。( T ) 14、如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使用WHERE语句。( F ) 15、Oracle数据库中字符串和日期必须使用双引号标识。( F ) 16、Oracle数据库中字符串数据是区分大小写的。( T ) 17、Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作时候保证操作能正常进行。( F ) 18、为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表的末尾。( T ) 20、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是全外连接。( T ) 21、自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接将失去意义。( T ) 23、PL/SQL代码块声明区可有可无。( T ) 24、隐式游标与显式游标的不同在于显式游标仅仅访问一行,隐式的可以访问多行。( F )

oracle常用命令大全和环境变量路径

Oracle 命令大全 底部为环境变量配置路径。 1 运行SQLPLUS工具 sqlplus 2 以OS的默认身份连接 / as sysdba 3 显示当前用户名 show user 4 直接进入SQLPLUS命令提示符 sqlplus /nolog 5 在命令提示符以OS身份连接 connect / as sysdba 6 以SYSTEM的身份连接 connect system/xxxxxxx@服务名 7 显示当然用户有哪些表 select * from tab; 8 显示有用户名和帐户的状态 select username,account_status from dba_users; 9 将SCOTT帐号解锁(加锁) alter user scott account unlock(lock); 10 以SCOTT的身份连接并且查看所属表 connect scott/tiger select * from tab; 11 查看EMP的表结构及记录内容 desc emp select empno,ename from emp; 12 以OS的身份登看SGA,共享池,CACHE的信息 connect / as sysdba show sga select name,value/1024/1024 from v$sga; show parameter shared_pool_size select value/1024/1024 from v$parameter where name ='shared_pool_size';

show parameter db_cache_size select value/1024/1024 from v$parameter where name ='db_cache_size'; 13 查看所有含有SIZE的信息 show parameter size bitmap_merge_area_size integer 1048576 create_bitmap_area_size integer 8388608 db_16k_cache_size big integer 0 db_2k_cache_size big integer 0 db_32k_cache_size big integer 0 db_4k_cache_size big integer 0 db_8k_cache_size big integer 0 db_block_size integer 4096 db_cache_size big integer 33554432 db_keep_cache_size big integer 0 db_recycle_cache_size big integer 0 NAME TYPE V ALUE ------------------------------------ ----------- ------------- global_context_pool_size string hash_area_size integer 1048576 java_max_sessionspace_size integer 0 java_pool_size big integer 33554432 large_pool_size big integer 8388608 max_dump_file_size string UNLIMITED object_cache_max_size_percent integer 10 object_cache_optimal_size integer 102400 olap_page_pool_size integer 33554432 oracle_trace_collection_size integer 5242880 parallel_execution_message_size integer 2148 NAME TYPE V ALUE ------------------------------------ ----------- ------------- sga_max_size big integer 143727516 shared_pool_reserved_size big integer 2516582 shared_pool_size big integer 50331648 sort_area_retained_size integer 0 sort_area_size integer 524288 workarea_size_policy string AUTO 14 显示SGA的信息 select * from v$sgastat; POOL NAME BYTES

Oracle数据库技术课程学习大纲详细

《现代数据库技术》教学大纲 课程名称:《现代数据库技术》 课程编号:学时数:56 学分数:3.5 适应专业:计算机与信息学院所有专业 一、本课程的地位、任务和作用 现代数据库技术是计算机在数据处理应用领域中的主要内容和坚实基础;也是今后若干年内研究和应用的最活跃的分支之一。因此,信息管理、软件开发、计算机等专业的学生,特别是以应用为目标的学生都必须学习和具备数据库原理与应用的知识。本课程通过介绍Oracle数据库基本操作、体系结构与数据库基本管理使学生初步掌握大型数据库的基本原理,了解大型数据库的管理方法。了解大型数据库的管理方法,使学生熟练掌握Oracle数据库系统下的SQL语言运用及PL/SQL程序设计。 本课程是一门理论和实践相结合的课程,要求学生在完成本课程的学习以后,能够结合自己所熟悉的某一门高级语言和Oracle,开发出一个小型的数据库应用系统。 二、本课程的相关课程 本课程的先修课程为《计算机组成原理》,《离散数学》,《数据结构》,《计算机网络》及《数据库原理》等课程。 三、本课程的基本内容及要求 教学内容: 第一章数据库概述(2学时) 1、教学内容: 1.1数据库基础知识 1.2关系数据库系统 1.3 Oracle基础知识 (1)Oracle的发展历史 (2)Oracle的特点 第二章O racle体系结构(6学时) 1、教学内容: 2.1 Oracle 体系结构概述 2.2Oracle的存储结构 (1)物理存储结构 (2)逻辑存储结构 2.3Oracle的实例 (1)Oracle内存结构

(2)Oracle进程 2.4数据字典 2、教学重点:Oracle的物理结构、oracle实例、Oracle的逻辑结构 3、教学难点:数据库实例与进程 第三章O racle11g的安装(2学时) 1、教学内容: 3.1 Oracle 11g环境介绍 3.2Oracle 11g for Windows的安装 (1)安装Oracle 11g服务器 (2)Oracle 11g与Windows (3)安装Oracle 11g客户端 3.3 Oracle 11g 的卸载 2、教学重点:学会Oracle的安装 第四章O RACLE数据库管理工具及网络配置(2学时) 1、教学内容: 4.1 SQL*Plus命令 (1)设置SQL*Plus 运行环境 (2)常用SQL*Plus命令 (3)格式化查询结果 4.2 Oracle企业管理器 4.3 数据库配置助手 4.4 启动与关闭oracle实例 2、教学重点:学会使用SQL*Plus 第五章S QL语言基础(5学时) 1、教学内容: 5.1SQL简介 5.2SQL的基本语法 5.3数据查询语言 5.4数据操纵语言 5.5数据定义语言 5.6数据控制语言 5.7常用函数 5.8 事务处理 2、教学重点:数据查询语言、数据操纵语言、数据定义语言、数据控 制语言 3、教学难点:SQL的基本语法 第六章P L/SQL编程(8学时)(课本第6,7章) 1、教学内容: 6.1PL/SQL基础 (1)变量及声明 (2)数据类型 (3)表达式 (4)PL/SQL程序块结构 6.2PL/SQL控制结构

Oracle查询语句基本命令一

oracle查询语句大全--基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba to username;//授权grant connect,resource,dba,sysdba to username; 3.connect username/password//进入。 4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。 5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql; 6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体. 使用C#描述应如下所示: https://www.360docs.net/doc/1216584646.html,mandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) V ALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) V ALUES (2, \'2\'); end;"; 7.查询用户下的表的信息select distinct table_name from user_tab_columns; 8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum show user 3、查看系统拥有哪些用户SQL> select * from all_users; 4、新建用户并授权 SQL> create user a identified by a;(默认建在SYSTEM表空间下) SQL> grant connect,resource to a; 5、连接到新用户SQL> conn a/a

Oracle常用数据字典的查询使用方法

查看当前用户的缺省表空间 1. SQL>select username,default_tablespace from user_users; 查看当前用户的角色 1. SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 1. SQL>select * from user_sys_privs; 2. SQL>select * from user_tab_privs; 查看用户下所有的表 1. SQL>select * from user_tables; 显示用户信息(所属表空间) 1. select default_tablespace,temporary_tablespace 2. from dba_users where username='GAME'; 1、用户 查看当前用户的缺省表空间 1. SQL>select username,default_tablespace from user_users; 查看当前用户的角色 1. SQL>select * from user_role_privs; 查看当前用户的系统权限和表级权限 1. SQL>select * from user_sys_privs;

2. SQL>select * from user_tab_privs; 显示当前会话所具有的权限 1. SQL>select * from session_privs; 显示指定用户所具有的系统权限 1. SQL>select * from dba_sys_privs where grantee='GAME'; 显示特权用户 1. select * from v$pwfile_users; 显示用户信息(所属表空间) 1. select default_tablespace,temporary_tablespace 2. from dba_users where username='GAME'; 显示用户的PROFILE 1. select profile from dba_users where username='GAME'; 2、表 查看用户下所有的表 1. SQL>select * from user_tables; 查看名称包含log字符的表 1. SQL>select object_name,object_id from user_objects

登录oracle数据库时常用的操作命令整理

oracle系统默认的用户和密码是 创建数据库是创建的用户 scott 密码是 tiger sys 密码是 change_on_install system 密码是 manager sysman 密码是 oem_temp 也可以 sqlplus / as sysdba 不用密码登录!! 登录oracle数据库时常用的操作命令整理 1、su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面。 2、sqlplus /nolog 或sqlplus system/manager 或./sqlplus system/manager@ora9i; 3、SQL>connect / as sysdba ;(as sysoper)或 connect internal/oracle AS SYSDBA ;(scott/tiger) conn sys/change_on_install as sysdba; 4、SQL>startup; 启动数据库实例 5、查看当前的所有数据库: select * from v$database; select name from v$database; desc v$databases; 查看数据库结构字段 7、怎样查看哪些用户拥有SYSDBA、SYSOPER权限: SQL>select * from V_$PWFILE_USERS; Show user;查看当前数据库连接用户 8、进入test数据库:database test; 9、查看所有的数据库实例:select * from v$instance; 如:ora9i 10、查看当前库的所有数据表: SQL> select TABLE_NAME from all_tables;

Oracle 数据库 常用命令

SPOOL将屏幕所有的输出输出到指定文件 -- spool 文件路径名; spool g:\mysql.sql; --业务操作 --结束输出 spool off; 执行一个SQL脚本文件 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 --start file_name -- @ file_name start g:\mysql.sql; @ g:\mysql.sql; 对当前的输入进行编辑 edit ed 重新运行上一次运行的sql语句 / 显示一个表的结构 desc table_name ; 清屏 clear screen; 退出 exit; 置当前session是否对修改的数据进行自动提交 --SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n} set autocommit on; 在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句 -- SET ECHO {ON|OFF}; set echo on; 是否显示当前sql语句查询或修改的行数 --SET FEED[BACK] {6|n|ON|OFF}

-- 默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off 时,一律不显示查询的行数 set feedback 1; 是否显示列标题 --当set heading off 时,在每页的上面不显示列标题,而是以空白行代替 --SET HEA[DING] {ON|OFF} set heading on; 设置一行可以容纳的字符数 -- 如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示 --SET LIN[ESIZE] {80|n} set linesize 100; 设置页与页之间的分隔 -- SET NEWP[AGE] {1|n|NONE} --当set newpage 0 时,会在每页的开头有一个小的黑方框。 --当set newpage n 时,会在页和页之间隔着n个空行。 --当set newpage none 时,会在页和页之间没有任何间隔 set newpage 1; 设置一页有多少行数 --如果设为0,则所有的输出内容为一页并且不显示列标题 --SET PAGES[IZE] {24|n} set pagesize 20; 是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。 --SET SERVEROUT[PUT] {ON|OFF} set serveroutput on; 是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。 --在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,--设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度 --SET TERM[OUT] {ON|OFF} set termout off; 在dos里连接oracle数据库 CONNECT user_name/passwd@l_jiayou

oracle9i常用操作

ORACLE9I日常操作 获取数据库日期 select sysdate from dual; 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup SVRMGR>quit b、关闭ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>shutdown SVRMGR>quit 启动oracle9i数据库命令: $ sqlplus /nolog SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected to an idle instance. SQL> startup^C SQL> startup ORACLE instance started. 2、在双机环境下 要想启动或关闭ORACLE系统必须首先切换到root用户,如下 su -root a、启动ORACLE系统 hareg -y oracle b、关闭ORACLE系统 hareg -n oracle Oracle数据库有哪几种启动方式 说明: 有以下几种启动方式: 1、startup nomount 非安装启动,这种方式启动下可执行:重建控制文件、重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。

Oracle数据库的日常使用命令(SAG_考核)

Oracle数据库的日常使用命令 1.基本知识 (2) 2.启动和关闭数据库 (3) 3.控制监听 (3) 4.数据库用户管理 (3) 5.Oracle的权限管理 (4) 6.更改字符集为中文 (5) 7.查询语句 (5) 8.表空间管理 (6) 9.数据文件被误删后的处理 (7) 10.查询当前系统的配置参数 (7) 11.显示当前用户 (8) 12.Oracle排错处理 (8) 13.查看表结构 (8) 14.查看数据库文件 (8) 15.将select查询出的结果保存至一个文件 (9) 16.存储过程 (9) 17.数据库的备份与恢复 (10) Export 转入程序 (10) Import 恢复程序 (12) 增量卸出/装入 (14)

18.如何查看各个表空间占用磁盘情况? (15) 19.如何知道数据裤中某个表所在的tablespace? (15) 20.内核参数的应用 (15) 21.如何单独备份一个或多个表? (16) 22.如何单独备份一个或多个用户? (16) 23.如何显示当前连接用户? (16) 24.如何外连接? (16) 25.如何执行脚本SQL文件? (17) 26.如何搜索出前N条记录? (18) 27.为表创建序列 (18) 28.查看本用户下的各种对象的SQL脚本 (18) 29.SQL*Plus系统环境变量有哪些?如何修改? (20) 30.如何在PL/SQL中读写文件? (20) 31.某个数据文件损坏,如何打开数据库? (21) 1. 基本知识 一个表空间只能属于一个数据库 每个数据库最少有一个控制文件(建议3个,分别放在不同的磁盘上) 每个数据库最少有一个表空间(SYSTEM表空间) 建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起,以提高使用效率,只应存放数据字典 每个数据库最少有两个联机日志组,每组最少一个联机日志文件 一个数据文件只能属于一个表空间 一个数据文件一旦被加入到一个表空间中,就不能再从这个表空间中移走,也不能再加入到其他表空间中 建立新的表空间需要建立新的数据文件

Oracle数据库基本数据类型

oracle基本数据类型

oracle 数据库中讨论char ,varchar ,varchar2 数据类型! 这3种字符串数据类型是我们使用最多的,我们在数据库设计时到底该怎么使用了? 首先我们先来分析3个数据类型的说明: 1。char CHAR的长度是固定的,最长2000个字符。 2。varchar 和 varchar2 可以肯定的是oracle中目前是可以使用varchar数据类型的,但他们的区别我查了不少资料也没有找到一个准确的答案最常见的说话是说oracle中的varchar只是varchar2的别名也就是同义词。 其次也有人认为varchar是最大长度为2000的可变字符串(和sql server中的varchar一致),而varchar2最大长度为4000。 知道了他们的特点我们就来讨论下使用区别 1.char和varchar、varchar2 由于varchar和varchar2用途类似,我们先来讨论char和他们的使用区别: varchar和varchar2比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的

‘以空间换效率’。 varchar和varchar2虽然比char节省空间,但是如果一个varchar和varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar和varchar2会更好一些。 当然还有一种情况就是象身份证这种长度几乎不变的字段可以考虑使用char,以获得更高的效率。 2。varchar和varchar2 这里就进入重点了,前面的区别我们在sql server中我们已经基本了解了,大家可能都知道,最多也就是复习下,但oracle增加了一个varchar2类型,是大家以前所没有用到过的。 因为oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar,还有其他数据中一般都有varchar这个数据类型。 所以我得出了以下结论: 如果想在oracle新版本的数据库兼容就不要用varchar,如果想和oracle 之外其他数据库兼容就不要用varchar2。 ORACLE中的数据类型分类 ORACLE中的数据类型不可谓不多,下面把我这两天来的学习体会写一下吧! 1、字符数据类型:包括我CHAR,VARCHAR2,LONG。 CHAR型可以存储字母数字值,这种数据类型的 列长度可以是1到2000个字节。如果未指明,则默认其占用一个字节,如果用户输入的值小于指定的长度,数据库则用空格填充至固定长度。 VARCHAR2型其实就是VARCHAR,只不过后面多了一个数字2,VARCHAR2就是VARCHAR的同义词,也称别名。数据类型大小在1至4000个字节,但是和CHAR不同的一点是:当你定义了VARCHAR2长度为30,但是你只输入了10个字符,这时VARCHAR2不会像CHAR一样填充,在数据库中只有10具字节。

相关文档
最新文档