顯示具有 Oracle 標籤的文章。 顯示所有文章
顯示具有 Oracle 標籤的文章。 顯示所有文章
2012-03-07 14:06

[Ubuntu] 安裝 Oracle Client 與 PDO_OCI

Oracle Database Instant Client 下載 Client/SDK
(Version 10.2.0.4 Instant Client Package - Basic, Instant Client Package - SDK)
oracle-instantclient-basic-10.2.0.4-1.i386.rpm
oracle-instantclient-devel-10.2.0.4-1.i386.rpm

# 安裝套件轉換器
apt-get install alien 

# 轉換 rpm 套件到 deb,並安裝
alien -i oracle-instantclient-basic*.rpm
alien -i oracle-instantclient-devel*.rpm

# 安裝 Apache2,PHP,MySQL
apt-get install apache2 php5 mysql-server php5-mysql libapache2-mod-php5

# 安裝 PEAR 
apt-get install php-pear php5-dev dh-make-php make re2c

# 下載 PDO_OCI 原始檔 
pecl download pdo
pecl download pdo_oci
tar zxvf PDO-1.0.3.tgz
tar zxvf PDO_OCI-1.0.tgz

mkdir -p PDO_OCI-1.0/include/php/ext/
mv PDO-1.0.3 PDO_OCI-1.0/include/php/ext/pdo
cd PDO_OCI-1.0/
phpize
./configure --with-pdo-oci=instantclient,/usr,10.2.0.4

make -j$(grep processor /proc/cpuinfo |wc -l)
make install  # /usr/lib/php5/20xxxxxx+lfs/pdo_oci.so

vim /etc/php5/conf.d/pdo_oci.ini # 建立 pdo_oci.ini, 內容如下:
extension=pdo_oci.so

vim /etc/apache2/envvars # 在最後面加入環境變數, 內容如下: 
export NLS_LANG="TRADITIONAL CHINESE_TAIWAN.UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

# 重新啟動 Apache 
service apache2 restart

參考來源:
Debian 安裝設定 PHP 連 Oracle extension 使用 PDO(PDO_OCI)
Oracle Instant Client
2011-04-19 09:54

[Oracle] PDO-OCI 的 DSN 連接字串

最近重裝我的開發環境,結果連 oracle 一直連不上,出現了以下幾種訊息,最後是因為我的 TNS listener 沒設好,或是我的 DSN 錯誤,整理出我試過的幾個 DSN 連接字串:

ORA-12154: TNS:could not resolve service name
ORA-06401: NETCMN: invalid driver designator
ORA-12514: TNS:listener could not resolve SERVICE_NAME
ORA-12505: TNS:listener could not resolve SID given in connect descriptor

$DSN="oci:dbname=jaxdb;charset=utf-8";

$DSN="oci:dbname=127.0.0.1:1521/jaxdb;charset=utf-8";

$DSN = "oci:dbname=(
    DESCRIPTION = (
        ADDRESS_LIST = (
            ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)
        )
    )(CONNECT_DATA=
        (SID = jaxdb)
    )
);charset=utf8";
    
$DSN = "oci:dbname=(
    DESCRIPTION = (
        ADDRESS_LIST = (
            ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)
        )
    )(CONNECT_DATA=
        (SERVICE_NAME = jaxdb)
    )
);charset=utf8";
2011-01-19 16:38

[Regedit] Oracle 日期格式及語言編碼設定

上次用到時沒有記下來,結果忘記了,這次先把他記下來。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Oracle]
"NLS_LANG"="AMERICAN_AMERICA.UTF8"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ALL_HOMES\ID0]
"NLS_LANG"="AMERICAN_AMERICA.UTF8"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\HOME0]
"NLS_LANG"="AMERICAN_AMERICA.UTF8"
"NLS_DATE_FORMAT"="YYYY-MM-DD HH24:MI:SS"
2011-01-19 02:36

使用批次檔開關 Oracle 服務

因為在 NB 上灌了 Oracle 做開發用,可是每次開機都變得很慢,而且不是每天都會用到 Oracle,但常常開開關關服務真的很麻煩,索性找了一下批次檔開關服務的方法,寫了一個簡單的小工具,至少在處理這瑣碎的事可以快樂一點。

@echo off

set /p STATUS=Oracle Service status to [start/stop] : 

net %STATUS% "OracleMTSRecoveryService"
net %STATUS% "OracleOraHome92Agent"
net %STATUS% "OracleOraHome92TNSListener"
net %STATUS% "OracleServiceMYDB"

pause
2010-07-16 18:42

[Ubuntu] PHP 連接 Oracle 語系設定

PHP 的環境變數必須在 Apache 中設定

開啟:
vim /etc/apache2/envvars

在最後面加入:
export NLS_LANG="AMERICAN_AMERICA.UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

參考來源:
如何新增apache使用的環境變數
2010-07-16 16:38

[Oracle] 修改 SESSION 的日期格式

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

ParameterExplanation
YEARYear, spelled out
YYYY4-digit year
YYY
YY
Y
Last 3, 2, or 1 digit(s) of year.
IYY
IY
I
Last 3, 2, or 1 digit(s) of ISO year.
IYYY4-digit year based on the ISO standard
QQuarter of year (1, 2, 3, 4; JAN-MAR = 1).
MMMonth (01-12; JAN = 01).
MONAbbreviated name of month.
MONTHName of month, padded with blanks to length of 9 characters.
RMRoman numeral month (I-XII; JAN = I).
WWWeek of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
WWeek of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IWWeek of year (1-52 or 1-53) based on the ISO standard.
DDay of week (1-7).
DAYName of day.
DDDay of month (1-31).
DDDDay of year (1-366).
DYAbbreviated name of day.
JJulian day; the number of days since January 1, 4712 BC.
HHHour of day (1-12).
HH12Hour of day (1-12).
HH24Hour of day (0-23).
MIMinute (0-59).
SSSecond (0-59).
SSSSSSeconds past midnight (0-86399).
FFFractional seconds.
2010-05-22 23:32

[Oracle] Sequence 取號函數


-- [新增]
CREATE SEQUENCE my_sequence
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999999
NOCYCLE
CACHE 10
;

-- 參數說明:
INCREMENT BY n -- 每次疊加的值(正負數)

START WITH n -- 指定初始值,建立後將無法透過 ALTER 修改

MAXVALUE n -- 最大編號
NOMAXVALUE -- (預設)不設置最大值,由系統上限決定

MINVALUE n -- 最小編號
NOMINVALUE -- (預設 1)不設置最小值

CYCLE -- 當取至最大值後,是否循環再由最小值開始
NOCYCLE -- (預設)不設置循環,當超過限制時將返回異常

CACHE n -- (預設 20)系統會一次取出 n 個數作為快取,但會造成跳號的現象
NOCACHE -- 不使用快取,保證在產生的編號中沒有跳號,但這樣會降低性能.



-- [修改]
ALTER SEQUENCE my_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE
NOCACHE
;



-- [刪除]
DROP SEQUENCE my_sequence;



-- [使用方式]
my_sequence.CURRVAL -- 返回序號的當前值
my_sequence.NEXTVAL -- 增加序號的值,然後返回序號值



參考來源:
Oracle 產生自動編號方式
2010-05-15 02:12

[Oracle] 基礎 Table Schema 指令


-- 建立資料表
CREATE TABLE table_name(
column1 NUMBER,
column2 CHAR,
column3 VARCHAR2,
column4 DATE,

-- 主鍵(PRIMARY KEY)
CONSTRAINT pk_table_name PRIMARY KEY(column1,column2),
-- 唯一鍵(UNIQUE KEY)
CONSTRAINT unique_table_name UNIQUE(column1,column2),
-- 外來鍵(FOREIGN KEY)
CONSTRAINT fk_table_name_column1
FOREIGN KEY(column1, column2)
REFERENCES parent_table(column1, column2)
[ON DELETE [CASCADE|SET NULL]]
-- 當參考鍵刪除時,相對應做的處理:
-- 預設 UPDATE No Action & DELETE No Action
-- ON DELETE CASCADE: 刪除參考鍵時連同刪除
-- ON DELETE SET NULL: 刪除參考鍵時將外鍵設為 NULL
);


-- 為資料表標示註釋
COMMENT ON TABLE table_name IS '資料表註釋';

-- 為資料欄位標示註釋
COMMENT ON COLUMN table_name.column1 IS '資料欄位註釋';


-- 附加主鍵(PRIMARY KEY)
ALTER TABLE table_name
ADD CONSTRAINT pk_table_name PRIMARY KEY(column1,column2);


-- 附加唯一鍵(UNIQUE KEY)
ALTER TABLE table_name
ADD CONSTRAINT unique_table_name UNIQUE(column1,column2);


-- 附加外來鍵(FOREIGN KEY)
ALTER TABLE table_name
ADD CONSTRAINT fk_table_name_column1
FOREIGN KEY(column1, column2)
REFERENCES parent_table(column1, column2)
[ON DELETE [CASCADE|SET NULL]];


-- 建立索引(Index)
CREATE [UNIQUE] INDEX idx_table_name ON table_name(column1, column2);

最近剛剛接觸 Oracle
很多觀念一時轉不過來
雖然 SQL 都大同小異
但就是這些被這些小異搞翻掉

整體架構跟 MySQL 差蠻多
只能說 MySQL 真的很容易上手
而且社群跟文獻都很多
所以要找參考資料比較容易

參考連結:
Oracle Commands
Oracle SQL
Oracle/PLSQL Topics
Oracle 開發筆記
Oracle基本语法集锦
oracel 數據完整性
2010-05-15 01:12

[Oracle] 快速建立使用者


CREATE USER user_name IDENTIFIED BY user_password; -- 建立使用者
GRANT dba TO user_name; -- 授與最大權力

為了這個簡單的指令上 google 找半天
最後還是去請教 MIS 的前輩