2011年1月25日 星期二

修改 Oracle XE 的CHARACTERSET

從AMD64的Oracle 9i要把ddsysV2資料轉入到acoldev oracle xe上,有些資料會出現欄位長度不夠的狀況
發現是原資料庫的 NLS_CHARACTERSET=ZHT16BIG5,但是Oracle XE上的是AL32UTF8,前者會把一個中文字視為2個字元集,後者則為3個字元集,所以長度就會不夠了,以下為將Oracle XE上的AL32UTF8改為ZHT16BIG5的方法:


以 sysdba 角色進入 sqlplus 之後執行以下

SHUTDOWN 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 ZHT16BIG5;
-- >>會出現Error: ORA-12712: new character set must be a superset of old character set
-- 改為
ALTER DATABASE CHARACTER SET INTERNAL_USE ZHT16BIG5;
ALTER SESSION SET SQL_TRACE=FALSE;

查看Oracle 參數
select * from v$NLS_PARAMETERS

Perl DBD Oracle on Ubuntu

sudo apt-get install alien rpm

從oracle網站下載 Instant Client
oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm

安裝 alien , 把rpm檔轉成deb檔
sudo apt-get install alien rpm
sudo alien oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm

wget http://ftp.debian.org/debian/pool/contrib/libd/libdbd-oracle-perl/libdbd-oracle-perl_1.24b-1_i386.deb

dpkg -i oracle-instantclient11.2-basic-11.2.0.2.0.i386.deb
dpkg -i --force-depends-version libdbd-oracle-perl_1.24b-1_i386.deb

libdbd-oracle-perl_1.24b-1_i386.deb是用 perl 5.10.1-13編譯但是acoldev上的是perl 5.10.1-12,所以用--force-depends-version來強制安裝

2011年1月22日 星期六

Ubuntu 10.10 安裝 Oracle XE 10

安裝Oracle XE要注意交換分區是否足夠大(1024M的swap空間)
確認記憶體大於1G,要是小於1G的話就增加一個Swap
sudo dd if=/dev/zero of=/swpfs1 bs=1M count=1024
sudo mkswap /swpfs1
sudo swapon /swpfs1

必要存在的package
檢查 libaio1 是否有安裝
檢查 bc 是否有安裝

編輯/etc/apt/source.list 增加:
deb http://oss.oracle.com/debian unstable main non-free
將該源服務器的公鑰添加到本地密鑰庫中:
sudo wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle
sudo apt-key add RPM-GPG-KEY-oracle
執行更新
sudo apt-get update
安裝Oracle Xe, Oracle Xe Client (裝了Oracle XE,應該就不需要再裝client了)
sudo apt-get install oracle-xe
sudo apt-get install oracle-xe-client

設定環境變數
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY
export TNS_ADMIN=/usr/lib/oracle
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME
export ORACLE_SID=XE
export NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5

設定 Orcale XE
/etc/init.d/oracle-xe configure
不過發現安裝後預設已經Configure好一個Instance "XE",web 管理介面為http://127.0.0.1:8080,sys & system 預設密碼為oracle沒法重新Configure
預設密碼是沒差,但是8080跟TOMCAT衝突,是可以用SQLPLUS改掉,但是有點麻煩
所以後來移除掉,必須包含configure file
apt-get remove --purge oracle-xe-universal
改下載deb檔用dpkg來安裝
wget -c http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb
sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb
這樣就可以用/etc/init.d/oracle-xe configure來configure了


啟動的指令
/etc/init.d/oracle-xe {start|stop|restart|force-reload|configure|status|enable|disable}

2011年1月20日 星期四

有關Crontab設定

Crontab 主要是在做排程設定, 一般寫法如下:
分 時 日 月 週 指令
範例:0 0 * * * /usr/local/backup/appbackup.sh

field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)

上面範例寫法另外可寫成:@daily /usr/local/backup/appbackup.sh

string meaning
------ -------
@reboot Run once, at startup
@yearly Run once a year, "0 0 1 1 *"
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *"
@weekly Run once a week, "0 0 * * 0"
@daily Run once a day, "0 0 * * *"
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *"

在寫crontab指令時須注意要用絕對路徑如 rm 執行檔必須寫成 /usr/bin/rm