2009年3月3日 星期二

PHP Connect Oracle DB

請先參考Oracle 的相關設定,確定安裝PHP 的主機可以連接Oracle DB的(或許應該要先安裝Oracle Client)

首先,需將PHP.INI檔作些修改,找到
;extension = php_oci8.dll
;extension = php_oracle.dll

將前端的";"號去除,並將PHP重新啟動

利用phpinfo(); 指令確定是否有看到頁面中有oci8 及oracle 的字眼存在
可建一檔案,檔名為index.php

If PHP is working, you will see "Hello World" below:


echo "Hello world";
phpinfo(); // Print PHP version and config info
?>



PHP 連接 Oracle db

連接DB的方法有兩種
Using the OCI Extension Module -

if ($c=OCILogon("user_name", "password", "DB_Name")) {
echo "Successfully connected to Oracle.n";
OCILogoff($c);
} else {
$err = OCIError();
echo "Oracle Connect Error " . $err[text];
}
?>

Using the ORA Extension Module -

if ($c=ora_logon("user_name@DB_name","password")) {
echo "Successfully connected to Oracle.n";
ora_commitoff($c);
ora_logoff($c);
} else {
echo "Oracle Connect Error " . ora_error();
}
?>

以上的語法可以放在剛剛建立的index.php下


If PHP is working, you will see "Hello World" below:


echo "Hello world";
phpinfo(); // Print PHP version and config info
?>

Using the OCI Extension Module -

if ($c=OCILogon("user_name", "password", "DB_Name")) {
echo "Successfully connected to Oracle.n";
OCILogoff($c);
} else {
$err = OCIError();
echo "Oracle Connect Error " . $err[text];
}
?>

Using the ORA Extension Module -

if ($c=ora_logon("user_name@DB_name","password")) {
echo "Successfully connected to Oracle.n";
ora_commitoff($c);
ora_logoff($c);
} else {
echo "Oracle Connect Error " . ora_error();
}
?>



如果成功,應該要能看見Successfully connected to xxx 或

Oracle 10G Client Setup

請先安裝oracle 10G Client 軟體
軟體可由官方網頁下載
或是安裝 XEClient
可安裝於C:\XEClient 或其它地方,重點是您找的到為原則

安裝後需手動建立這目錄 於C:\XEClient\NETWORK\ADMIN
其目錄下手動建立一檔案,檔名為tnsnames.ora
其內容如下

NK_IVDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.82)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ivdb)
)
)
內容說明如下
NK_IVDB:在這一部電腦上,如果AP 或 Web 要存取這192.168.0.82 的oracle DB,要透過 NK_IVDB 這名字,這名字可以自行訂義,好記為原則.
HOST:就是 Oracle DB的IP
PORT:就是 Oracle DB連接的端口
SERVICE_NAME:就是Oracle DB 內的名稱,如果一DB內有多個DB的話,就會是用這名稱來區分

Oracle audit

11月28日
oracle audit的使用
大多数情况下,在产品环境中使用audit的dba应该很少吧,如果启用了audit,那么必须小心谨慎的使用,尤其是audit system和audit any权限的控制.我一般情况下在测试和开发环境中都会使用audit.逼近调试跟踪还是很方便.但是需要注意的是audit的enable和disable必须restart database.所以作为产品环境,是否使用audit必须初期就要计划好。在每一次的审计结束后,必须执行noaudit关闭本次审计,要不然会对后期的数据库活动也执行相同的审计.

10G支持的audit_trail参数的值
DB: 审计结果存储与sys.aud$表中,可通过dba_audit_trail 访问这个表的数据
XML:审计结果以xml格式存储在audit_file_dest参数对应的目录里
OS:审计结果存储在audit_file_dest参数对应的目录里,文件格式类似于oracle trace文件格式
EXTENDED:和DB或者XML配合使用,用于扩展获取被审计对象执行的sql语句,不对OS审计起作用
NONE:关闭审计
启用audit
alter system set audit_file_dest='/u01/app/oracle/admin/SCMDEV/adump' scope=spfile;
alter system set audit_trail=DB,EXTENDED scope=spfile;
shutdown immediate
startup
使用audit
audit session; //审计登录数据库所有session的操作
audit select table on hr.users //审计hr.users表的所有查询
audit role whenever successful //审计所有执行成功的操作
audit role whenever not successful //审计所有执行失败的操作
........
查询审计结果
查询dba_audit_trail视图
SQL> desc dba_audit_trail
Name Null? Type
----------------------------------------- -------- ----------------------------
OS_USERNAME VARCHAR2(255)
USERNAME VARCHAR2(30)
USERHOST VARCHAR2(128)
TERMINAL VARCHAR2(255)
TIMESTAMP DATE
OWNER VARCHAR2(30)
OBJ_NAME VARCHAR2(128)
ACTION NOT NULL NUMBER
ACTION_NAME VARCHAR2(28)
NEW_OWNER VARCHAR2(30)
NEW_NAME VARCHAR2(128)
OBJ_PRIVILEGE VARCHAR2(16)
SYS_PRIVILEGE VARCHAR2(40)
ADMIN_OPTION VARCHAR2(4)
GRANTEE VARCHAR2(30)
AUDIT_OPTION VARCHAR2(40)
SES_ACTIONS VARCHAR2(19)
LOGOFF_TIME DATE
LOGOFF_LREAD NUMBER
LOGOFF_PREAD NUMBER
LOGOFF_LWRITE NUMBER
LOGOFF_DLOCK VARCHAR2(40)
COMMENT_TEXT VARCHAR2(4000)
SESSIONID NOT NULL NUMBER
ENTRYID NOT NULL NUMBER
STATEMENTID NOT NULL NUMBER
RETURNCODE NOT NULL NUMBER
PRIV_USED VARCHAR2(40)
CLIENT_ID VARCHAR2(64)
ECONTEXT_ID VARCHAR2(64)
SESSION_CPU NUMBER
EXTENDED_TIMESTAMP TIMESTAMP(6) WITH TIME ZONE
PROXY_SESSIONID NUMBER
GLOBAL_UID VARCHAR2(32)
INSTANCE_NUMBER NUMBER
OS_PROCESS VARCHAR2(16)
TRANSACTIONID RAW(8)
SCN NUMBER
SQL_BIND NVARCHAR2(2000)
SQL_TEXT NVARCHAR2(2000)
关闭审计,切记一定要关闭审计
noaudit all;
noaudit session;
noaudit select table on hr.users

Oracle9i SQL Reference Release 2 (9.2)
Oracle® Database Security Guide 10g Release 2 (10.2)
文章載自http://shadowfalao.spaces.live.com/blog/cns!80DF4F7FDCD57166!369.entry

2009年2月12日 星期四

檢查磁碟空間

df -Plk|grep -v "Used Avail" | sed 's/\%//g' |awk '{if (($5>90)&&($4 < 10000000)) print "APS16 Disk Space: "$6 }'

df  :檢查磁碟空間
     -P: 訊息將不斷行
     -l  :僅列出本地磁碟機
     -k :空間大小表示單位為KB
     -m:空間大小表示單位為MB
     -h:空間大小表示單位自動換算成GB、MB、KB、Bytes,但會加上單位符號

grep :字串找尋工具
-v:排除

sed  :字串修改器
欲修改之內容以單引號 " ' "包住
s:自串置換
   語法:s/oldword/newword/
g:置換至文件最後一行
           語法:s/oldword/newword/g
        本例欲尋找之字串為%,恐被系統認為是系統特殊符號,因此加上"\"讓系統忽略其特殊符號之功能

awk :字串修改器
欲修改之內容以單引號及大括號 " '{}' "包住
if :可用以比對文字內容
    欲比對之內容,以小括號"()"包住
$5:以"TAB"之空白為分割欄,由左至右依序編號,此例為df -Plk結果之第5欄
1                       2                         3               4                         5                     6
Filesystem     1024-blocks     Used        Available          Capacity       Mounted on
    &&:表兩個比對式符合為真
    ||:表兩個比對式只要其中一個符合就為真
print :當前述結果為真,就秀出訊息,訊息以 雙引號包住 " " "
    $6:也可以秀出剛剛欄位之訊息

2009年2月5日 星期四

Solaris 較良好的 shell :tcsh

sendmail 的執行Script 在 /etc/rc2.d/S88sendmai [start | stop]

測試發信情況
# /usr/lib/sendmail -bv antonio.hsu@xxx.com
回報的情況如下,是ok的
antonio.hsu@xxx.com... deliverable: mailer relay, host 10.10.2.10, user antonio.hsu@xxx.com
發出信件
# /usr/lib/sendmail  antonio.hsu@xxx.com
Hello  <<  內容
. << 結束

Adding a Swap File on Solaris

This is straight out of the man pages, but I had a hard time finding it the first time that I needed it. If you have a Solaris system that badly needs more swap but you don't have a free swap device available, you can create a file in the file system and add it as additional swap.

  1. Use mkfile to create a file suitable for a local swap area. For example, to create a 1GB swap file:

        /usr/sbin/mkfile 1024m /swap

    where /swap is the name of the file to be used as swap space. Units for the size can be kilobytes (k), blocks (b), or megabytes (m).

  2. Tell the system to start using the file as swap:

        /usr/sbin/swap -a /swap

    Use swap -l to verify that the swap file has been activated. 

    文章摘自http://www.eyrie.org/~eagle/notes/solaris/swap-file.html

2009年1月7日 星期三

Oracle Command

建帳號及提供權限
CREATE USER dlink IDENTIFIED BY "rd10g"
DEFAULT TABLESPACE "USERS" 設定使用的TABLE空間為"USERS"
QUOTA UNLIMITED ON "USERS";

提供Dlink連接DB的權限
GRANT CONNECT TO dlink;
GRANT RESOURCE TO dlink;

提供dlink 擁有 glink.xxx Table 具有Select 的權限
grant select on glink.error_message to dlink;

查詢目前的連線數
select count(*) from v$session
show parameter max



1. 新增帳號CREATE USER 使用者名稱  IDENTIFIED BY 密碼;

2. 權限設定: GRANT 權限 ON 資料庫物件 TO 使用者名稱;

                      GRANT 角色 TO 使用者名稱

3. 取消權限: REVOKE 權限 ON 資料庫物件 FROM 使用者名稱;

4. 新增角色: CREATE ROLE 角色名稱 [ NOT IDENTIFIED | IDENTIFIED { BY 密碼 | USING [ 鋼要 .] PACKAGE | EXTERNALLY | GLOBALLY } ] ;

5. 取消角色: DROP ROLE 角色名稱

6. 更改密碼: ALTER USER  使用者名稱 IDENTIFIED BY 密碼;

7. 強制變更密碼: ALTER USER 使用者名稱 PASSWORD EXPIRE;

8. 鎖住現有的使用者: ALTER USER 使用者名稱 ACCOUNT LOCK;

9. 解鎖現有的使用者: ALTER USER 使用者名稱 ACCOUNT UNLOCK;

10. 刪除現有的使用者: DROP USER 使用者名稱  cascade ;