2008年3月28日 星期五

Table Last Update Time

Method1 : but no reliability
select ora_rowscn from table
select scn_to_timestamp(ora_rowscn) from table

Method2 : Audit to Monitor
One option is as follows:

(1) Turn the auditing on: AUDIT_TRAIL = true in init.ora

(2) Restart the instance if its running.

(3) Audit the table:

AUDIT INSERT,SELECT,DELETE,UPDATE on TableName
by ACCESS WHENEVER SUCCESSFUL
(4) Get the desired information using :

SELECT OBJ_NAME,ACTION_NAME ,to_char(timestamp,'dd/mm/yyyy , HH:MM:SS')
from sys.dba_audit_object.

2008年3月26日 星期三

SQL> create tablespace test1
2 datafile 'C:\oracle\product\10.1.0\oradata\orcl\test1.dbf' size 2M;

drop tablespace test1
SQL> create tablespace test1
2 datafile 'C:\oracle\product\10.1.0\oradata\orcl\test1.dbf' reuse;

drop tablespace test1
including contents and datafiles;

SQL*PLUS Command Regular Expression

SQL> select name,issys_modifiable from v$system_parameter where issys_modifiable
<>false;

c /false/'FALSE'/

run

2008年3月25日 星期二

Insert Into Statement

INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...)

INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2"

Note that this is the simplest form. The entire statement can easily contain WHERE, GROUP BY, and HAVING clauses, as well as table joins and aliases.

ALTER TABLE

1.ALTER TABLE NAME
ALTER TABLE [PROJECT.]OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME;
2.ALTER TABLE COLUMN NAME
ALTER TABLE [PROJECT.]TABLE_NAME RENAME COLUMN OLD_COLUMN_NAME TO NEW_COLUMN_NAME;
3.ALTER TABLE COLUMN DATA TYPE
ALTER TABLE [PROJECT.]TABLE_NAME MODIFY COLUMN_NAME NEW_DATATYPE;
4.ADD COLUMN
ALTER TABLE [PROJECT.]TABLE_NAME ADD COLUMN_NAME DATATYPE;
5.DROP COLUMN
ALTER TABLE [PROJECT.]TABLE_NAME DROP COLUMN COLUMN_NAME;

2008年3月23日 星期日

Oracle Install Attention

Built DB時,
密碼可不能設 XXX@XXX , 夾了 "@" 是建不起來的.
可能是 把 @後的 XXX 當成 SID ~ 有點鳥 試了一晚才發現.

2008年3月18日 星期二

Mysql Character Set 問題解決

轉載自
http://bluecat.csie.net/2007/12/17/2498/


老問題,不過一直懶得弄,都用懶人法先撐著。

懶人設定法,在 connect 後呼叫

SET NAMES ‘latin1′
如果要根本上治好,或是說連資料庫內的資料都正確的轉成 utf8 ,那就得作點苦工了。首先 MySQL 的 Character Set 變數有三

character_set_client client 傳給 server 使用的 charset ,即輸入
character_set_results server 傳給 client 使用的 charset ,即輸出
character_set_connection db 實際上存放時的 charset ,通常用 utf8

正常自動設定的話,character_set_connection 會是建立 db 時選擇的 charset,如果 table 或 field 有特別指定不同的 charset ,那麼就以指定的為準,不過這部份是 MySQL 自動轉換,所以不需要管,重點在於輸入與輸出的 charset 必須正確,才能正確的轉換。可以當成語言翻譯,首先必須指出自己使用的語言,伺服器就能正確的翻譯並紀錄成指定的語言,然後指出需要的語言,如此伺服器就能從紀錄翻譯出需要的語言。

懶人設定法就是不管是啥,一概都不轉碼,因為 SET NAMES ‘x’ 等同於

SET character_set_client = ‘x’
SET character_set_results =’x’
SET character_set_connection = ‘x’
也就是告訴資料庫設定傳進去的是 latin1 編碼,並且存成 latin1 編碼,跟存 raw byte data 很像,因此雖然 Database Charset 設成 UTF-8 ,但實際卻還是用 latin1 在處理資料;用 phpMyAdmin 的時,因為網頁編碼是 UTF-8,character_set_client & character_set_results 就會被設成 UTF-8,這時候,懶人設定法的資料就全部都會變亂碼, 因為 UTF-8 的編碼被當作 latin1 ,而這時又要求輸出 UTF-8,於是把原本就是 UTF-8 的資料又做了一次 latin1 -> UTF-8 轉換,會變亂碼也不奇怪了。如果是用 phpMyAdmin 插入資料,雖然 character_set_client 是 UTF-8 做了一次 UTF-8 -> latin1 轉換,但輸出時,因 character_set_results 也是 UTF-8,所以做了 latin1 -> UTF-8 的反轉換,因此得到原本的正常字串。

根本的 UTF-8 修正方式就是先用 latin1 編碼倒出資料,然後依據原始編碼轉碼成 UTF-8 後再倒回去,比較省事的方法是用 mysqldump 抓下來,然後用 vim 轉碼後在倒回去。

之前有個網頁是 Big5 ,就用 php 一筆筆拉出來,然後 mb_convert_encoding 成 UTF-8 ,再存回去,當然 Database 本身的 charset 已經設成 UTF-8 ,需要注意的是 field 的校對也要先設成 utf8_general_ci ,因為要順便作點處理,所以才用 php 做,不然用 mysqldump 應該比較快。

實例

資料庫是 UTF-8 編碼,可是資料都是 Big5 ,並用懶人設定寫入資料庫,現在要把資料庫內的資料從偽 UTF-8 轉成正確的資料以在 phpMyAdmin 中也正常顯示

connet 後,呼叫
mysql_query("SET NAMES utf8"); // 設定輸出為 utf8
mysql_query( "SET character_set_results = ‘latin1′"); // 但吐資料請給我 latin1 (即 Big5 的資料)
接著一筆筆拉出來,用 mb_convert_encoding 從 Big5 轉成 UTF-8 再存回去。

或是

connet 後,呼叫
mysql_query( "SET character_set_client = ‘big5′"); // 設定輸出為 big5
mysql_query( "SET character_set_results = ‘latin1′"); // 但吐資料請給我 latin1 (即 Big5 的資料)
mysql_query( "SET character_set_connection = ‘utf8′"); // 資料庫是 utf8
接著一筆筆拉出來,再直接存回去就好