
oracle体系结构
文章平均质量分 54
luckman100
这个作者很懒,什么都没留下…
展开
-
生产环境的一次 gc cr multi block request 事件
今天生产环境出现个头大的问题,一个平时只要二三十分钟的程序跑了六七个小时还没跑完,抓出sql,就是平时一个几分钟就能跑完的sql,在看看session,发现等待事件一直都是 gc cr multi block request 。查了下关于这个等待事件的说明:当一个进程访问需要一个或者多个块时,Oracle会首先检查自己的Cache是否存在该块,如果发现没有,就会先通过global ca原创 2013-05-29 23:05:58 · 4358 阅读 · 0 评论 -
ORACLE修改列的数据类型的2种方法
对字段操作操作方法更新字段名alter table TABLE_NAME rename column column_old to column_new;添加字段alter table TABLE_NAME add COLUMN_NAME varchar(10);删除字段alter table TABLE_NAME dr转载 2013-10-19 12:18:32 · 1132 阅读 · 0 评论 -
ORA-12801
今天在并行查询时报了ORA-12801错误,查询语句很简单:select/*+parallel(t 16)*/count(1) from a看看官方解释:ORA-12801: error signaled in parallel query serverstring Cause: A parallel query server reached an exception co原创 2013-11-10 08:40:26 · 32131 阅读 · 0 评论 -
ORA-12986
今天在删除一个大表的列,意外被DBA重启DB后,再执行查询时,就报了ORA-12986这个错误,先来一起了解下这个错误:ORA-12986: columns in partially dropped state. Submit ALTER TABLE DROP COLUMNS CONTINUECause: An attempt was made to access a table原创 2013-11-10 23:23:08 · 1927 阅读 · 0 评论 -
oracle错误代码
ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换会话 ORA-00022: 无效的会话 ID;访问被拒绝 ORA-00023: 会话引用进程私用内存转载 2014-01-05 10:22:34 · 1376 阅读 · 2 评论 -
PRAGMA EXCEPTION_INIT
如果要处理未命名的内部异常,必须使用OTHERS异常处理器或PRAGMA EXCEPTION_INIT 。PRAGMA由编译器控制,或者是对于编译器的注释。PRAGMA在编译时处理,而不是在运行时处理。EXCEPTION_INIT告诉编译器将异常名与ORACLE错误码结合起来,这样可以通过名字引用任意的内部异常,并且可以通过名字为异常编写一适当的异常处理器。 在子程序中使用EXCEP转载 2014-01-05 10:46:48 · 1458 阅读 · 0 评论 -
oralce数据泵
使用EXPDP和IMPDP时应该注意的事项:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。expdp或impdp命令时转载 2014-01-11 18:31:43 · 730 阅读 · 0 评论 -
虚拟列
Oracle11g增加了表的虚拟列,这个列的数据并没有存储在数据文件中,而是Oracle通过列数据的生成放到了数据字典中。虚拟列的数值是通过真实列中的数据计算而来的。虚拟列的位置可以放在它参考的列的前面,也可以包括多个实际列的值,但是不能引用其他的虚拟列:SQL> CREATE TABLE yu_test2 (c_vl_1 NUMBER, c_vl_2 AS (c_vl_1+1)转载 2014-01-15 10:47:53 · 1444 阅读 · 0 评论 -
oracle latch 和 lock的差异
Latch是Oracle提供的轻量级锁资源,他用于快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,他只工作在内存中,我们可以不大准确的说,内存中资源的锁叫latch,数据库对象(表,索引等)的锁叫Lock。比如数据缓存中的某个块要被读取,我们会获得这个块的 latch,这个过程叫做pin,另外一个进程恰好要修改这个块,他也要pin这个块,此时他必须等待,当前一个进程释放latch转载 2014-01-12 20:47:08 · 1001 阅读 · 1 评论 -
ORACE内部视图
1. x$ksmspX$KSMSP的名称含义为: [K]ernal [S]torage [M]emory Management [S]GA Hea[P]其中每一行都代表着shared pool中的一个chunk,监控shared pool的空间碎片情况原创 2014-02-10 23:41:39 · 690 阅读 · 0 评论 -
oracle锁模式
0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4:Share 共享锁(S):阻止其他DML操作,share 5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive 6:exclusive 独占(X)转载 2014-02-25 23:25:16 · 688 阅读 · 0 评论 -
DBMS_JOB
DBMS_Job包含以下子过程: Broken()过程。 change()过程。 Interval()过程。 Isubmit()过程。 Next_Date()过程。 Remove()过程。 Run()过程。 Submit()过程。 User_Export()过程。 What()过程。1、Broken()过程更新一个已提交的工作的状转载 2014-03-09 23:16:07 · 823 阅读 · 0 评论 -
连接与会话
学oracle几年了,今天才真正弄明白连接与会话的区别,真实惭愧,以前一直以为没啥区别,今天自己总结下。1. 连接是物理层级的,是客户端与服务器之间一条具体的连接;会话则是逻辑层级的,可以理解是客户端与数据库实例间交流的基础2. 会话可以理解为一个plsql窗口,开启一个窗口也就是新建了一个会话;连接可以理解为就是一个工作于服务器上的进程(或线程)当客户端与服务器端用专用服务器模式连接原创 2014-03-27 21:51:39 · 1769 阅读 · 0 评论 -
oracle事务槽
一、ITL描述:ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,用来记录该块所有发生的事务,一个itl可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫转载 2014-03-23 22:08:41 · 1243 阅读 · 0 评论 -
CR块
1、概述Cr块consistent read块也就是用来维护oracle的读一致性的数据块。当查询某些数据的时候,发现数据块的版本比我们要查询的新,例如session1执行了dml操作并没有提交,session2此时查找跟session1相关的dml操作的数据信息,此时查询的数据却是原来的数据信息。查询的过程会在undo段中查找该数据块的前映像后,然后把前映像和cu转载 2014-03-23 23:21:09 · 1337 阅读 · 0 评论 -
oracle事务槽(二)
oracle数据块头部有个事务槽(ITL)。当多个事务槽同时修改数据块,而且,此时,pctfree(数据块空闲空间的比例)不足10%,则会出现ITL争用。这种现象容易发生在update和delete身上。因为,insert时,oracle会优先分散地插入其他空闲块。如: 看一下表a有多少个事务槽:[sql] sys@ORCL> select转载 2014-03-23 23:23:47 · 1152 阅读 · 0 评论 -
ora-01795 参数列表过长的问题
今天闲来无聊做了个测试,原创 2014-05-14 20:59:21 · 724 阅读 · 0 评论 -
ORA-01002
今天在测试程序时,发现了一个我之前原创 2014-06-17 23:01:23 · 4932 阅读 · 0 评论 -
DBMS_LOB的用法
公司的系统有个记录日志的功能,日志的显著特点是:长。。。所以用varchar来存储就不合适了(varchar2最多存储40000字符)。都是用的CLOB类型,下面来学习下CLOB类型的一般用法。1. EMPTY_CLOB()the LOB is initialized, but not populated with data.用于清空clob类型2. dbms_lob.create原创 2013-10-19 13:53:13 · 3147 阅读 · 0 评论 -
ORA-04091
先看下官方的解释:ORA-04091: tablestring.string is mutating, trigger/function may not see itCause: A trigger (or a user defined plsql function that is referenced in this statement) attempted to look原创 2013-09-23 23:11:59 · 2443 阅读 · 0 评论 -
for update
相信大家都听说过网上订阅会议室的例子,在这个例子中关键强调的一点就是如何控制并发。一个系统如果在串行使用下表现得很完美,也不一定会在并行的环境下不会出错。例子中就是说,2个人同时订阅某会议室,A首先进行了update动作(将订阅的信息更新到表中),只是没提交,因为查询的性质是非阻塞,所以B在订阅时,发现该会议室也是未使用的状态,从而导致了A和B都订阅到了这个会议室。解决这个问题的关键在于,如何使查原创 2013-09-22 22:47:53 · 632 阅读 · 0 评论 -
oracle中的字符问题
我们在开发过程中,往往会遇到这样的问题,一个字段B VARCHAR2(100),为什么我们在用substr(B,100)后还会报异常?原因是字符串中存在汉字,下面我们先看看有关oracle中汉字究竟占多少字节的问题。1. select userenv('language') from dual; 如果为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,则汉字占2个字原创 2013-05-30 22:20:15 · 808 阅读 · 0 评论 -
ORA-00054 resource busy and acquire with NOWAIT specified
在开发过程中,经常会遇到ORA-00054,被卡住的表谁在用,什么时候能够好,都不知道,只能傻傻的等。。。真是悲哀。。。。从今天开始我不再傻等,我要变主动。。。。首先模拟一下ORA-00054的场景:1. session 1先锁住一个表;SQL> select * from test for update;2. session 2对test表执行drop动作,就报错了;SQL>原创 2013-06-12 22:27:42 · 985 阅读 · 0 评论 -
TABLE的logging属性
我一直以为dba_tables中的logging字段,如果为NO,则表示不对表的更改做log,官方文档也是这么写的:Indicates whether or not changes to the table are logged; NULL for partitioned tables:但是今天试验了下,发现不是那么回事!!!1. 创建两个结构,数据一样的表test1和test2:原创 2013-06-13 22:35:57 · 2549 阅读 · 0 评论 -
ORA-16038&ORA-00257
今天用sqlplus登陆后,startup就报了个错ORA-16038:SQL> startupORACLE instance started.Total System Global Area 285212672 bytesFixed Size 1218992 bytesVariable Size 7549908原创 2013-06-13 23:16:10 · 657 阅读 · 0 评论 -
TABLE的logging属性(续)
前天在 “TABLE的logging属性” 文章中留下了一个问题:table的logging属性到底从哪里可以提现出来???今天在网上找到这么一句话:NOLOGING选项只是在direct-load模式下才不写redo log,nomal DML无效上篇文章已经验证了nologging属性对update动作是无效的,下面就用direct-load模式来验证下这句话对不对。1.原创 2013-06-15 21:57:47 · 1105 阅读 · 0 评论 -
不要小瞧v$mystat
对于v$mystat,我们可能最常用的就是用这个视图来查询当前session的sid(seelct * from v$mystat where rownum=1),不过它的功能可不止简单提供一个sid,它实际上提供了当前session各项统计数据。1. v$mystat提供了session各项指标值(指标: STATISTIC# ,值:value)SQL> select * from v$原创 2013-06-06 22:27:29 · 2082 阅读 · 0 评论 -
DBMS_SPACE包中常用的过程
1. UNUSED_SPACE(返回对象table, index, or cluster未使用的空间) 语法: DBMS_SPACE.UNUSED_SPACE ( segment_owner IN VARCHAR2, --对象的schema segment_name IN VARCHAR2, --对象的名称原创 2013-06-23 17:58:13 · 1149 阅读 · 0 评论 -
v$session_longops
v$session_longops,这是个很有用的视图,记录了运行时间超过6秒的视图,常用来追踪有问题的sql和估算语句执行的剩余时间。先看下官方说明:V$SESSION_LONGOPS displays the status of various operations that run for longer than 6 seconds (in absolute time). The原创 2013-07-10 23:11:57 · 3846 阅读 · 0 评论 -
UNDO_RETENTIOIN
我们先看看对于UNDO_RETENTIOIN的解释:10G的解释:The UNDO_RETENTION parameter is ignored for a fixed size undo tablespace. The database may overwrite unexpired undo information when tablespace space becomes l原创 2013-07-13 15:43:18 · 892 阅读 · 0 评论 -
DBA_JOBS_RUNNING
今天一大早无聊查一下DBA_JOBS_RUNNING发现从昨天开始就一直跑10个job,再在v$parameters中查了一下job_queue_processes参数设置的是10,也是就说oracle允许并行的job数量是10个。我想测试一下,就再启动了一个job,发现也能跑起来,这我就纳闷了,莫非是我理解错误,于是赶快去查了下帮助文档,是这样说的:DBA_JOBS_RUNNING list原创 2013-07-18 23:04:58 · 2449 阅读 · 0 评论 -
v$fast_start_transactions
最近在研究回滚的原理,就了解到了v$fast_start_transactions这个视图,先看看官方的说明:V$FAST_START_TRANSACTIONS displays information about the progress of the transactions that Oracle is recovering.字面上看这个视图记录了oracle的回滚事务,很容易误原创 2013-07-20 18:37:50 · 3822 阅读 · 0 评论 -
如何查session的操作对象
今天总结了下如何查看session的操作对象,有以下几个方法:1. 查v$session的sql_id,再去v$sql中找到对应的sql语句,从sql语句中找出操作对象;2. 查v$session的row_wait_obj#,再去dba_objects中找出对应的对象;3. 如果知道sid,但是session已经在v$session中消失,就要去session的历史视图v$active原创 2013-07-22 20:37:25 · 1156 阅读 · 0 评论 -
oracle用户权限
我们用一个账号登陆oracle进行操作,到底可以执行哪些操作,权限有多大,你可得仔细搞清楚:1. 用户拥有哪些对象的操作权限:对象包括表,视图,存储过程等,操作包括select,update,insert,delete等SELECT * FROM Dba_Tab_Privs t WHERE t.grantee='ORACLE';2. 用户拥有哪些系统操作权限:包括:SELECT A原创 2013-07-27 17:19:15 · 821 阅读 · 0 评论 -
clob类型
varchar2类型的长度最大是4000,如果你要存大于4000的字符,就要使用clob类型字段,它的上限是4G,一般是可以放心写字符串。下面介绍下clob的一般用法:CREATE TABLE TEST (id CLOB);insert into test values ('pppppppppppppppppppppppppppppppppppppppp');update te原创 2013-08-04 23:36:24 · 2579 阅读 · 0 评论 -
ORA-12850
今天在查gv$session视图时,出乎意料报了个错:ORA-12850: Could not allocate slaves on all specified instances: 2 needed, 1 allocated马上找帮助文档看了下:Cause: When executing a query on a gv$ fixed view, one or more insta原创 2013-08-28 23:10:04 · 7617 阅读 · 0 评论 -
ORA-12838
今天在做初始化脚本时遇到这么一个问题:update/*parallel(t 8)*/ a set id=6;然后再 select count(1) from a 时报错:ORA-12838: cannot read/modify an object after modifying it in parallel去官方文档上查了下该错误的说明:Cause: Within原创 2013-08-28 22:56:51 · 1236 阅读 · 0 评论 -
UNION ALL 的排序问题
我们都知道当几个数据集你能确保没有交集时,用UNION ALL能够达到最好的性能效果,但是效果好的代价就是它并不会帮你排序,这就涉及到UNION ALL的一个排序问题。举个例子:1. CREATE TABLE a ( ID NUMBER,m_name VARCHAR2(10));2. CREATE TABLE b ( ID NUMBER,m_name VARCHAR2(10));原创 2013-09-08 08:07:32 · 9319 阅读 · 0 评论 -
LONG的模糊查询的问题
oracle是强烈不建议使用LANG类型的,因为它有太多弊端,很不灵活,bi原创 2014-06-22 20:03:13 · 9285 阅读 · 0 评论