一句SQL解5*5棋盘难题
- 2011年3月7日
- 由naroah
ITPUB第一届“盛拓传媒杯”SQL数据库编程大赛第一期(上周2011年2月25日-3月4日24:00)的题目是
5X5方格棋盘难题

在5X5的方格棋盘中(如图),每行、列、斜线(斜线不仅仅包括对角线)最多可以放两个球,如何摆放才能放置最多的球,这样的摆法总共有几种?输出所有的摆法。 猛击阅读全文
ITPUB第一届“盛拓传媒杯”SQL数据库编程大赛第一期(上周2011年2月25日-3月4日24:00)的题目是
5X5方格棋盘难题

在5X5的方格棋盘中(如图),每行、列、斜线(斜线不仅仅包括对角线)最多可以放两个球,如何摆放才能放置最多的球,这样的摆法总共有几种?输出所有的摆法。 猛击阅读全文
在Oracle Linux Server 6上安装Oracle 11g R2,创建数据库时,MEMORY_TARGET参数(11g新特性)设置为512M,结果建库脚本失败,报错
ORA-00845: MEMORY_TARGET not supported on this system 猛击阅读全文
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版了,真是令人惊喜啊。 猛击阅读全文
最近升级了开发环境的kettle为4.1.0,虽然从3.2.0版本一直升级到4.0版本都没遇到过什么问题,可是4.1.0版突然间给了咱一点惊喜,bug不少啊。 猛击阅读全文
今天整理了下硬盘上的资料,发现了躺在那儿好久的几张图片,就发上来,堪称经典。
分别是Oracle 10g Architecture,Oracle 10g V$ Views和Oracle 11g Architecture。
复合分区move table partitions的问题,就不多说了,Google了下Tom老早就解释得很清楚了,参看Ask Tom “Moving table partitions”。
今天在测试环境上运行一个使用到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错误。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的时候要注意一下。