让 MySQL 在 Linux 下表名不区分大小写(实为表名全小写)

把 Windows 下的应用部署到 Linux 下,使用到了 Quartz 集群的特性,所以建了 MySql 的中间表,一启动看到报错:

Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn't retrieve trigger: Table 'unmijob.QRTZ_TRIGGERS' doesn't exist [See nested exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'unmijob.QRTZ_TRIGGERS' doesn't exist]

用 MySQL 客户端连接到那个数据库,看到 qrtz_triggers 表确确实实是存在的,MySQL 也是安装在 Linux 下的。在大小写敏感的操作系统中,估摸着会不会是表名大小的因素呢? 于是把 qrtz_triggers 改为大写的 QRTZ_TRIGGERS,再次启动应用服务器,这时候出现的是: 阅读全文 >>

安装 MySQL 5 后无法启动(不能 Start service) 的解决办法

安装的 MySQL 5.1.48 或是 MySQL 5.5.8,配置好最后点击 Execute 按钮了,但是进行不到 Start service 这一步。检查了下 MySQL 系统服务已添加,但是无法启动,手工也不行。这时候用事件查看器可以看到程序事件里有几个来自于 MySQL 的错误:

Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
Unknown/unsupported table type: INNODB

原来是因为这两版本的 MySQL 默认使用了支持事物的 INNODB 引擎,打开 my.ini 文件,在 MySQL 的安装文件夹, 如 c:\program files\MySQL\ 中,看到:

default-storage-engine=INNODB

解决办法是把该设置改为

default-storage-engine=MYISAM 阅读全文 >>

Logging tool for JDBC

jdbcdslog 是一款知名用来跟踪 JDBC 的全功能工具.

特征包括:
- 可挂接到数据库连接, 驱动或数据源上(XA, 连接池)
- 可记录 PreparedStatement 和 CallableStatement 调用所绑定的参数
- 可记录 ResultSet 对象中的查询记录行
- 可记录查询执行时间
- 支持多种日志引擎 (感谢 SLF4J, 你可以使用多数流行的日志组件库, 像 log4j, apache common logging, java logging 或者简单的输出到 System.out) 阅读全文 >>

了解NoSQL的必读资料汇总

前记:看到 Twitter 和 Digg 相继用 NoSQL 替代了原有的关系型数据库 MySql。显然,NoSQL 定然有它的许多优势,且目前已有相当的 NoSQL 产品实现,所以有必要对 NoSQL 表示一定的关注,故找些资料来看。它也是非关系型的数据库,那它与著名的文档型数据库 Domino 又有何种关系呢,Java 程序又该如何实际应用 NoSQL 呢?

NoSQL 的官网是:http://nosql-database.org/,里面有丰富的介绍
Wiki 百科上的条目:http://en.wikipedia.org/wiki/NoSQL。以及如下文字:

NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库ACID理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。 阅读全文 >>

对SQL说不!NoSQL的数据库技术革命

在NoSQL运动的最新一次聚会中,来自世界各地的150人挤满了CBS Interactive的一间会议室。

就像当年波士顿的爱国者为反抗英国重税的行动一样,NoSQL的支持者们从各地涌来,分享他们如何推翻缓慢而昂贵的关系数据库的暴政,怎样使用更有效和更便宜的方法来管理数据。云计算可能会为数据库技术的发展带来新的契机,如果想在云中获得丰富而随需应变的可伸缩性,你需要一个非关系数据库。

“关系型数据库给你强加了太多东西。它们要你强行修改对象数据,以满足RDBMS (relational database management system,关系型数据库管理系统)的需要,”Java工具提供商SpringSource公司的首席工程师Jon Travis说,他是本次集会的10位发言人之一,在他看来,基于NoSQL的替代方案“只是给你所需要的”。 阅读全文 >>

Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧。然而自 Oracle 8i 起,Oracle 为我们提供了 fetch bulk collect 来批量取游标中的数据,存中即是合理的。它能在读取游标中大量数据的时候提升效率,就像 SNMP 协议中,V2 版比 V1 版新加了 GET-BULK PDU 一样,也是用来更高效的批量取设备上的节点值(原来做过网管软件开发,故联想到此)。

fetch bulk collect into 的使用格式是:fetch some_cursor collect into col1, col2 limit xxx。col1、col2 是声明的集合类型变量,xxx 为每次取数据块的大小(记录数),相当于缓冲区的大小,可以不指定 limit xxx 大小。下面以实际的例子来说明它的使用,并与逐条取记录的 fetch into 执行效率上进行比较。测试环境是 Oracle 10g  10.2.1.0,查询的联系人表 sr_contacts 中有记录数 1802983 条,游标中以 rownum 限定返回的记录数。 阅读全文 >>

查询Oracle正在执行的SQL语句

支持左连接的 Oracle 9i 以上版本

 Oracle 8i 及以前的版本中

自行决定要查询出来的字段以及约束条件。

Oracle 存储过程中发送邮件,并支持用户验证、中文标题和内容

在 Oracle 的存储过程执行中,我们可能希望它本身能完成邮件发送执行的结果,特别是在捕获到了异常时。不能总是依赖于调用存储过程的外部程序--调用后,根据出口参数,发送执行结果。这一需求更迫切的表现在非人工参与的 Oracle Job 调用存储过程的情况下。

所幸,Oracle 为我们提供了发送邮件的工具包 UTL_SMTP,它最早出现在 Oracle 8.1.7 版本中。下面是我从网络上搜索相关资料后、综合整理、多处修正、数次调试、排除万难而写出的一个发送邮件的存储过程。可支持需用户验证的邮件服务器,中文标题和中文内容无乱码,只还未支持附件的发送,相信这方面应用较少,需要的话再 Google 一下,且文后参考中有相应的链接。 阅读全文 >>

Oracle 过程中执行动态 SQL 或 DDL 语句

如果你用的是 Oracle 8i 及以上的版本,那简单,在过程中用 execute immediate sql_str 就行, sql_str 是一个拼凑的 SQL 语句,但这个动态语句中带参数,或 Select 的结果要 into 到变量中时就要稍加留心一下了。而在 8i 以前的版本(谁还用这么古老的玩艺,总有些不得已的地方,老系统考虑升级成本遗留下来的,应用软件所伴随着的等),都没法用 execute immediate,就得使用 DBMS_SQL 包来实现了

何谓动态 SQL 和 DDL 语句呢?通常在过程中要操作的表名、字段名都必须是明确的,否则编译过程时就要报错,但如果这两者也用变量名来表示就是动态的。DDL 就是数据库对象定义的操作,如 CREATE TABLE/VIEW/INDEX/SYN/CLUSTER....,及这些对象的删除、修改操作等等。 阅读全文 >>

Oracle 中重新编译无效的存储过程, 或函数、触发器等对象

Oracle 中的存储过程在有些情况下会变成失效状态,在 PL/SQL Developer 中该存储过程的图标左上角显示一把小红叉叉。比如储过程所引用的对象失效,dblink 出问题啦都可能引起用到它的存储过程失效。再就我的存储过程经常会变成无效,至今原因都未查明。

查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 created 和 last_ddl_time 时间。

上面的那种无效的存储程,只要不是语法上有问题,重新编译一下又是可用的了。总不能每次发现时人工去编译的,所以要实现自动化,有以下两种方法(网上找到的所有的 在Oracle中重新编译所有无效的存储过程 代码排版都很混乱,所以主要是重新整理了): 阅读全文 >>