修改 Oracle XE 的CHARACTERSET


从Oracle 11g上导出一些资料至 oracle xe上时,会出现长度不足的情况。经查发现是NLS_CHARACTERSET设置不同导致的。
Oracle XE安装后,默认为AL32UTF8,这样一个中文字符会占用三个字节,而原来的数据库设置为:ZHS16GBK。以下为将Oracle XE上的AL32UTF8改为ZHS16GBK的方法:

以 sysdba 角色 进入sqlplus 之后执行以下命令:

D:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlplus.exe / as sysdbaSHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SESSION SET SQL_TRACE=TRUE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
ALTER SESSION SET SQL_TRACE=FALSE;

查看Oracle 參數

select * from v$NLS_PARAMETERS

重启数据库

SHUTDOWN IMMEDIATE;
STARTUP;

修改完成后管理界面会乱码,不用管它。

参考:修改 Oracle XE 的CHARACTERSET

Install Oracle 11gR1 x64 on CentOS


首先需要注意安装之前修改本地主机名。

  • 修改/etc/sysconfig/network文件中的HOSTNAME
  • 修改/etc/hosts中的127.0.0.1以及::1对应域名

修改完成后重启。原因是电信的DNS把localhost.localdomain指向了202.106.199.39,导致oracle em启动时不正常。

下面开始安装

创建Oracle用户及用户组

[root@localhost ~]# groupadd oinstall
[root@localhost ~]# groupadd dba
[root@localhost ~]# useradd -m -g oinstall -G dba oracle
[root@localhost ~]# passwd oracle

修改系统参数

[root@localhost ~]# vim /etc/sysctl.conf
# Oracle Install
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576[root@localhost ~]# sysctl -p

创建Oracle目录 Continue reading “Install Oracle 11gR1 x64 on CentOS”

TNS-12537: TNS:connection closed 之 Linux Error: 29: Illegal seek


出现TNS-12537: TNS:connection closed错误的原因有很多种。

我这里碰到的是域名解析的问题,详细错误日志如下:

/opt/app/oracle/product/11.1.0/db_1/bin/dbstart: Starting Oracle Net Listener

LSNRCTL for Linux: Version 11.1.0.6.0 - Production on 07-JUN-2011 08:48:45

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Starting /opt/app/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...TNS-12537: TNS:connection closed
 TNS-12560: TNS:protocol adapter error
  TNS-00507: Connection closed
   Linux Error: 29: Illegal seek

已经在/etc/hosts中添加了127.0.0.1 localhost.localdomain,但就是无法启动Oracle 监听程序

后来执行nslookup localhost.localdomain,却发现localhost.localdomain并没有指向127.0.0.1,而是指向了202.106.199.35,真是令人惊奇。直接注释掉外网DNS服务器地址,然后重启监听服务,这次正常了。

Weblogic 部署工程到虚拟主机


部署步骤(仅作备忘)

  1. 修改 base_domain/环境/服务器/AdminServer (管理) 的监听端口为80
  2. 进入base_domain/环境/虚拟主机 点击新建,输入虚拟主机名。
  3. 修改虚拟主机的 网络访问点名称 以及 目标
    网络访问点名称 设置为域名
    目标 设置为AdminServer
  4. 检查工程的 weblogic.xml ,确保包含了<context-root>/</context-root>
  5. 部署工程,目标设置为虚拟主机
  6. 检查域名解析是否正常。
  7. 使用域名访问网站

ORA-06553: PLS-307: too many declarations of ‘MD5’ match this call


最近因为项目需要做两个库之间的数据交换,但是因为一些客观原因导致不能使用数据库的高级复制功能,遂想到通过两个中间库 作为数据交换的节点进行数据交换,但是这样子一来,就需要自己处理数据的更新、插入、删除判断了。

插入的数据比较好判断,通过一个表记录数据的主键即可,但是更新的数据怎么判断出来呢?通过调查发现,可以采用记录数据主键以及创建记录数据体的MD5校验码来检查数据是否被更新了。

Oracle本身提供了一个md5函数可以生成文本的md5值,连接数据执行

select dbms_obfuscation_toolkit.md5(‘test’) from dual;

居然显示ORA-06553: PLS-307: too many declarations of ‘MD5’ match this call错误,上网一查,发现需要指明接收的参数名称。通过下面的方法可以解决该问题。

select dbms_obfuscation_toolkit.md5(input_string => ‘test’) from dual;

增加了input_string类型的参数,至此问题解决。

最近决定往分布式系统架构方向走,得努力了。在卓越买了两本书,一本Java 消息服务,还有一本Spring技术内幕:深入解析Spring架构与设计原理。关于分布式,还是先从消息服务入手,然后再搞定Hadoop的配置和基本开发。Spring方面的话虽然自己一直在用,也经常看一些源代码,并且模仿Spring的设计方法在自己的系统里面做一些实现。但是没有全面的了解,感觉还是不扎实,所以看一下Spring技术内幕全盘掌握Spring的一些技术。

——谨此勉励自己

Oracle实现多行拼接/行转列拼接


数据格式一

—————————————————————————————————————————

CARD_CODE   Q
———   ————————————————
001               quarter_1
001               quarter_2
001               quarter_3
001               quarter_4
002               quarter_1
002               quarter_2
002               quarter_3
002               quarter_4

数据格式二
CARD_CODE   Q
———   ——————————————————————————–
002               quarter_1;quarter_2;quarter_3;quarter_4
001               quarter_1;quarter_2;quarter_3;quarter_4

从格式一到格式二

SELECT   t1.card_code,   substr(MAX(sys_connect_by_path(t1.q,   ‘; ‘)),   2)
FROM   (SELECT   a.card_code,
a.q,
row_number()   over(PARTITION   BY   a.card_code   ORDER   BY   a.q)   rn
FROM   t_change_lc_comma   a)   t1
START   WITH   t1.rn   =   1
CONNECT   BY   t1.card_code   =   PRIOR   t1.card_code
AND   t1.rn   –   1   =   PRIOR   t1.rn
GROUP   BY   t1.card_code