目前分類:database (11)

瀏覽方式: 標題列表 簡短摘要

Unused indexes by single query

用INFORMATION_SCHEMA中的statistics找出沒用到的index。

SELECT DISTINCT s.TABLE_SCHEMA, s.TABLE_NAME, s.INDEX_NAME FROM information_schema.statistics s LEFT JOIN information_schema.index_statistics `is` ON(s.TABLE_SCHEMA=is.TABLE_SCHEMA AND s.TABLE_NAME=is.TABLE_NAME AND s.INDEX_NAME=is.INDEX_NAME) WHERE is.TABLE_SCHEMA IS NULL;


Forth 發表在 痞客邦 留言(0) 人氣()

個人對PostgreSQL的訊息翻譯工作,最初從PgAccess開始,接著是JDBC driver,然後是各執行檔和伺服器本身,除了伺服器部份的完成度極低,其它部份只需要偶爾維護即可。曾有人說要主導整個翻譯工作,也號召了有志者數 人,不過後來就沒下文了,記憶所及,也只有JiaYun曾經真的幫過忙。目前翻譯工作處於停擺狀態,翻譯完成度也隨著PostgreSQL的發展而愈來愈低,極需要熱血青年繼續下去,因為,我老了。


Forth 發表在 痞客邦 留言(0) 人氣()

--完整備份(append)--
BACKUP DATABASE "db" TO DISK='db.bak' WITH NAME='Full Database Backup', NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS=10

--差異備份(append)--
BACKUP DATABASE "db" TO DISK='db.bak' WITH NAME='Differential Database Backup', DIFFERENTIAL, NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS=10

--列出backup set--
RESTORE HEADERONLY FROM DISK='db.bak'
使用欄位:Position

--列出第一個backup set的檔名--
RESTORE FILELISTONLY FROM DISK='db.bak'
使用欄位:LogicalName、PhysicalName、Type,Type可能是D或L

--還原至另一個資料庫--
RESTORE DATABASE "db" FROM DISK='db.bak' WITH FILE=1, MOVE 'orig_LogicalName' TO 'db.mdf', MOVE 'orig_LogicalName_log' TO 'db_log.LDF', NORECOVERY, NOUNLOAD, STATS=10
RESTORE DATABASE "db" FROM DISK='db.bak' WITH FILE=2, MOVE 'orig_LogicalName' TO 'db.mdf', MOVE 'orig_LogicalName_log' TO 'db_log.LDF', NOUNLOAD, STATS=10
還原時,除了最後一個backup set,都要NORECOVERY參數

Forth 發表在 痞客邦 留言(0) 人氣()

BACKUP LOG <資料庫> WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE(<資料庫>)

Forth 發表在 痞客邦 留言(0) 人氣()

自1996年起,PostgreSQL一直是我偏好使用的資料庫系統,也持續的幫忙訊息中譯。今天,我把所有的資料庫都轉移到MySQL,只因為需要partitioning和replication。這兩項功能在PostgreSQL設定繁瑣,在MySQL則平易近人;另外,以前需要的UTF-8支援和transaction等也已在MySQL出現,所以決定轉移資料庫系統。 以後不能騙人沒碰過MySQL了。

Forth 發表在 痞客邦 留言(0) 人氣()

在MySQL用latin1儲存big5中文,想改用UTF-8時,可以用 mysqldump備份,再透過iconv轉成UTF-8。但是,如果有用BINARY、VARBINARY、BLOB等資料類型,iconv遇到這些 binary資料會發生錯誤,所以還要用--hex-blob參數,將binary資料輸出成hex格式,再用iconv轉換就不會有問題。 備份:
mysqldump --default-character-set=latin1 --hex-blob dbname > big5.db
轉換:
iconv -f big5 -t utf-8 < big5.db > utf8.db
還原:
mysql dbname < utf8.db

Forth 發表在 痞客邦 留言(0) 人氣()

PreparedStatement l_stmt = null;
PreparedStatement l_stmtFetch = null;
PreparedStatement l_stmtClose = null;
ResultSet l_rset = null;
try { //exception
 try { //finally
   //open the cursor
   l_stmt = m_dbcon.prepareStatement("DECLARE FOO CURSOR FOR SELECT BAR FROM FOOBAR");
   l_stmt.execute();

   l_stmtFetch = m_dbcon.prepareStatement("FETCH FORWARD 10 FROM FOO");
   while (true) {
     //perform a fetch from the cursor (possibly multiple fetches will be done)
     l_rset = l_stmtFetch.executeQuery();
     l_rows = 0;
     while (l_rset.next()) {
       String l_bar = l_rset.getString(1);
       //do something useful with the data
       l_rows++;
     }
     l_rset.close();
     l_rset = null;

     if (l_rows == 0) {
       //no more rows, so we are done
       break;
     }
   }

   //don't forget to close the cursor
   l_stmtClose = m_dbcon.prepareStatement("CLOSE FOO");
   l_stmtClose.execute();
 } finally {
   if (l_rset != null) {
     l_rset.close();
   }
   if (l_stmt != null) {
     l_stmt.close();
   }
   if (l_stmtFetch != null) {
     l_stmtFetch.close();
   }
   if (l_stmtClose != null) {
     l_stmtClose.close();
   }
 }
} catch (SQLException l_se) {
 //do something useful here
}

Forth 發表在 痞客邦 留言(0) 人氣()

您可以從PostgreSQL網站下載最新的版本,目前是7.2版。下載後,建立一個叫postgres 的使用者,然後建立/usr/local/pgsql目錄,並將擁有者設為postgres,再將/usr/local/pgsql/bin加入postgres的PATH,再以postgres身分進行安裝。如果不要編譯JDBC driver的話可以不用--with-java,JDBC driver可以由jdbc.postgresql.org下載。

$ cd /tmp
$ tar xzf postgresql.7.2.tar.gz
$ cd /tmp/postgresql-7.2
$ ./configure --enable-locale --enable-multibyte --enable-nls --with-java
$ make all install
$ setenv PGDATA /usr/local/pgsql/data
$ setenv PGLIB /usr/local/pgsql/lib
$ setenv LD_LIBRARY_PATH /usr/local/pgsql/lib
$ initdb
$ postmaster -i &
$ createdb -E UNICODE dbname

Forth 發表在 痞客邦 留言(0) 人氣()

PointBase發表PointBase Micro、PointBase Embedded和PointBase Server等產品的4.1版。新的版本支援了Java Transaction API(JTA)、XADataSource、XAConnection和2-phase commit。


Forth 發表在 痞客邦 留言(0) 人氣()

如果要同時用Big5、MS950、GB2312和Shift-JIS等charset,JSP、Servlet、EJB container的charset要設為 ISO-8859-1,資料庫的charset用SQL_ASCII,JDBC URL用 jdbc:postgresql://hostname/database?charSet=ISO-8859-1,如果不加charSet,PostgreSQL的JDBC driver會因資料庫的charset是SQL_ASCII而將client端的charset當成ASCII,這樣會把第8個bit去掉。


Forth 發表在 痞客邦 留言(0) 人氣()

啟動PostgreSQL前設定PGCLIENTENCIDING的話,PostgreSQL會先將資料轉換成PGCLIENTENCODING所指定的charset,再傳送給client端,同樣的,server會將client端送來的資料一律視為   PGCLIENTENCODING所指定的charset,在儲存前會轉換成資料庫所使用的charset。client端是用Java程式如JSP、Servlet、EJB且container是用Big5或MS950做為編碼格式(setenv LC_CTYPE zh_TW.Big5),資料庫的編碼可以用UNICODE,在啟動PostgreSQL前不設定PGCLIENTENCODING,JDBC URL用jdbc:postgresql://hostname/database?charSet=UTF-8,這樣JDBC driver就會將資料以UTF-8格式送到server端,如果要用簡體中文,只要將container的設charset定為GB2312就可以了。


Forth 發表在 痞客邦 留言(0) 人氣()