一句SQL解5*5棋盘难题

ITPUB第一届“盛拓传媒杯”SQL数据库编程大赛第一期(上周2011年2月25日-3月4日24:00)的题目是

5X5方格棋盘难题

在5X5的方格棋盘中(如图),每行、列、斜线(斜线不仅仅包括对角线)最多可以放两个球,如何摆放才能放置最多的球,这样的摆法总共有几种?输出所有的摆法。 猛击阅读全文

ORA-00845: MEMORY_TARGET not supported on this system

在Oracle Linux Server 6上安装Oracle 11g R2,创建数据库时,MEMORY_TARGET参数(11g新特性)设置为512M,结果建库脚本失败,报错
ORA-00845: MEMORY_TARGET not supported on this system 猛击阅读全文

OEL6 安装Oracle11gR2

OEL6 x86 32bit,操作系统依赖的包如下: 猛击阅读全文

Oracle Linux 6尝鲜

Oracle紧跟Redhat的步伐,发布了基于Redhat Enterprise Linux 6的Oracle Linux 6,从Oracle官方e-delivery上下载DVD镜像并安装尝鲜。

RHEL6或者OL6相比之前RHEL5有了显著的变化,首先是Oracle的Linux改名叫Oracle Linux了,原来叫Oracle Unbreakable Linux,其次是内核版本发生了显著的变化,更新到了比较流行的2.6.32,相对应glibc版本也升级到2.12版了,真是令人惊喜啊。 猛击阅读全文

Pentaho Kettle 4.1 requires JDK 1.6

最近升级了开发环境的kettle为4.1.0,虽然从3.2.0版本一直升级到4.0版本都没遇到过什么问题,可是4.1.0版突然间给了咱一点惊喜,bug不少啊。 猛击阅读全文

分享几张Oracle架构图片

今天整理了下硬盘上的资料,发现了躺在那儿好久的几张图片,就发上来,堪称经典。

分别是Oracle 10g Architecture,Oracle 10g V$ Views和Oracle 11g Architecture。

Oracle分区表move table partitions

复合分区move table partitions的问题,就不多说了,Google了下Tom老早就解释得很清楚了,参看Ask Tom “Moving table partitions”

wmsys.wm_concat函数返回CLOB类型

今天在测试环境上运行一个使用到wmsys.wm_concat函数的过程,日志记录错误为

ORA-00932: inconsistent datatypes: expected - got CLOB

但是该过程在生产环境上运行正常不报错。网上google之,该函数为undocumented的,不被oracle官方支持,随着版本变化也会有修改,但并不保证行为一致。

测试环境为

Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 compatible string 10.2.0.3.0

重启并修改compatible string 为10.2.0.5.0,测试wmsys.wm_concat返回值仍为CLOB

生产环境为

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 compatible string 11.2.0.0.0

最终解决方法是在wm_concat外层用to_char作转换。 PS:之前在11g生产环境中用过一次wm_concat,结果发现在同一个select子句中使用该函数不能超过两次,于是换用listagg和正则表达式解决了问题。看来以后尽量避免使用wmsys.wm_concat,不便于移植啊!

ORA-12805:parallel query server died unexpectedly

夜间调度一个耗时较长的作业,碰到ORA-12805错误。Google之,Metalink上关于ORA-12805的解释是:OS error,Oracle PMON进程清除异常的并行事务。

ORA-12805
=========

Error Summary
ORA 12805 parallel query server died unexpectedly (Oerr:ORA.12805)

Error Details
~~~~~~~~~~~~~
Error:  ORA 12805
Text:   parallel query server died unexpectedly
-------------------------------------------------------------------------------
Cause:  The PMON process is cleaning up the process because a parallel query server terminated unexpectedly.
Action: Check for operating system errors and retry the statement.  

猜测可能是由于服务器资源紧张导致并行失败。查看日志,出错时除了我调度的一个作业,还有另外一个耗时较长的作业被提交执行,并且也产生了ORA-12805错。查看该作业执行的存储过程,发现该过程出错行处使用了/*+ parallel(8) */的优化hint,之后又查看我调度的过程,过程中没有使用hint强制优化器并行,但用到了一个临时表,查看该表的并行度被设置为8。

select degree from dba_tables where table_name='STG_TEMP';

该表被使用

alter table STG_TEMP parallel 8;

修改了并行度 ,如果该语句中parallel之后不设置degree,则degree为default,即degree=parallel_threads_per_cpu*cpu_count,当很多session试图进行parallel query时就会报ORA-12805错。但现在限制了degree为8,则在parallel query时产生8个线程,由于怀疑服务器资源耗尽导致,于是重新单独调度该作业,结果没有错误发生,程序成功运行结束。看来在使用parallel query的时候要注意一下。

冥想