跳到主要內容

發表文章

目前顯示的是有「Database」標籤的文章

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

資料庫欄位設計與正規化

我也沒想到,工作十幾年之後,居然還要寫這樣的題目。資料庫正規化設計,在21世紀的今天,應該早就是攻城獅(工程師)耳熟能詳的必備項目,沒想到還有人用20世紀的思維在設計,因此稍稍抒發小弟我不滿的情緒。

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?

找出SQLServe某個Database裏每個table的使用量

印象中在下用的某個架站機有Log功能,剛才發現DB成長到500MB,但是忘記是哪個table在Log,於是找到 Script to analyze table space usage ,找出此資料庫中列數最多或使用磁碟容量最多的table,就可以解決。 Update: 強者 evi1[c] 在回應中提供了他的SQL,語法精簡效率超高,我已改用他的版本,特此誌謝。

Visual Studio連線到 SQL Server Express 2008問題

故事背景: 某個無聊網管在公司把自己工作用PC灌了Ubuntu玩到膩之後,今年開始裝Windows 7 beta 64 bit,前陣子更新到Windows 7 RC build 7100時發現 SQL Express 2008是32bit,於是移掉改裝為SQL Exress 2008 64bit,結果遇到 連線到 SQL Server 檔案 (mdf) 都需要 SQL Server Express 2005,才能正確運作。 請確認從 URL 下載的元件的安裝: http://go.microsoft.com/fwlink/?LinkId=49251 過程: 看 這裏 有官方解說,用白話解說如下: 老子不讓你用64bit啦,這是進階功能,要用的話拿小朋友來換。 是的,有patch但不能下載。 鳥毅不像VB超人的偶像 璉璉 有免費點數可用,只好摸摸鼻子換回32bit,結果遇到另一個問題: 由於無法啟動使用者執行個體的處理而無法產生SQL Server 的使用者執行個體。此連接將會關閉 ,幸好有解,在XP把 %USERPROFILE%\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS 目錄刪除就可用,Vista/2008/Win7是在 %USERPROFILE%\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS 。 正當終於用32 bit SQL Express 2008時,又看到 SQL Express 2008 x64 Integration with Visual Studio 2008 SP1 ,原來國外的高手找到方法( hotfixr )可以 直接下載patch 。可別忘了啟動Named Pipes呀! 結論: 64bit Windows之路真是辛苦,此時我真的希望微軟能夠學Mac把程式包成一個package直接用呀!

64bit SQLServer無法匯入Excel問題

同事遇到在64bit SQLServer無法在SQLServer直接匯入Excel檔的問題,原因是Jet Engine並沒有64bit版本。 事實上,MS Office並沒有64bit版本,所以Jet Engine也沒有64bit版本呀! 類似 http://www.eggheadcafe.com/software/aspnet/32766378/excel-import.aspx 的情形。 不過,如果選完整安裝的朋友,會在工具列看到「匯出和匯入資料(32位元)」,這個就是32bit版的DTS精靈,產生出來的SSIS封裝可以存在64bit SQLServer上,也可以直接執行。 所以會用Visual Studio寫SSIS封裝的朋友,就可以放心寫了。 什麼?要在Stored Procedure匯入Excel?請參考 How to call SSIS package from the stored procedure 參考資料: 64-bit Considerations for Integration Services how to call a stored procedure in SSIS

OLEDB比ODBC快呀!

看了李維 回覆RURU有關ODBC, OLEDB, ADO和dbExpress的問題 ,想起VB超人告訴過我OLEDB比較快,因為ODBC多了一層呼叫。 雖然李維很強(是高手中的高手呀),但他對微軟資料庫的歷史似乎不是完全正確,記得微軟最早提出RDO,後來才有ADO的出現,而ADO裏再分OLEDB與ODBC。 以前有別人測過,但以讀取為主。(請看 這 、 這 ) 所以在下敝人小弟我,用VB6寫了一個很破的測試程式,為避免cache,就只寫不讀取,完全避開Server的Cache機制,不然比較晚讀取的連線一定比較快呀! 測試方法簡述如下:兩個程式架構完全相同,對同一個DB寫入十萬次,執行前先truncate table。 兩次測試結果相同:OLEDB花了1分16秒,ODBC花了1分21秒。 結論:其他Database不敢說,但在 MS SQLServer 的情況下,OLEDB比ODBC快! Update:一樣的程式,原測試環境在Win2000 VM,剛才心血來潮在Vista 64上執行,居然差不多。微軟在不同OS上可能有許多不同的tuning與cache;所以對於這種非程式技巧的效能,還是別研究了:P 原始碼: Private Sub OleDBTest() Dim conn As ADODB.Connection Dim rst As ADODB.Recordset Dim sql As String Dim before As Date Dim after As Date Dim duration As Date Dim connstr As String connstr = "Provider=SQLOLEDB;" & _ "Data Source=MySQLServer;" & _ "Initial Catalog=TestDB;" & _ "User ID=sa;" & _ "Password=sa;" before = DateTime.Now Set conn = New A...

3rd Party database Provider for Windows

Postgresql .Net data provider ( Npgsql ) PostgreSQL OLE DB Provider ( PgOleDb ) PostgreSQL ODBC Driver ( psqlODBC ) PostgreSQL JDBC Driver MySQL ADO.Net provider unofficial: MySQL OLE DB Provider another: MyOleDB MySQL Connector/ODBC MySQL JDBC Driver MySQL Visual Studio Plugin ADO.NET 2.0 Provider for SQLite ( System.Data.SQLite ) SQLite OLE DB Provider SQLite ODBC Driver SQLite JDBC Driver Oracle Data Provider for .NET Oracle Providers for ASP.NET Oracle OLE DB Provider Oracle ODBC Drivers for Windows Oracle SQLJ/JDBC

PostgreSQL的 table partitioning

ingramchen老大寫了篇 Database Index 筆記 ,特別厚著臉皮請他寫再寫一篇partitioning的文章。可惜他客氣表示對DB外行,在下更是外行,連"SQL的奧秘"這本書都沒讀完。 剛才去查了一下, PostgreSQL supports basic table partitioning. , 這裏 有文件。 MySQL也有Partitioning,在 這裏 有文件。 SQL Server 2005開始有Partitioning, SQL Server 2005 Features Comparison 說要Enterprise以上才有。 Oracle當然早就有partition,因為我沒有用也不會,請自己找。 Partitioning主要的好處就是快!假設你的網站有百萬會員,所以table有百萬筆資料時,光是查詢就得花不少時間,就算加再多的key也是一樣。鳥毅以前待的網路公司有幸遇到這種問題,當時採用分散式處理會員資料,先做一個table的index table,再把不同字母開頭的會員放在不同的table。但問題也來了,要合併查詢時得做不少的暫存table,所以這種問題的正解應該是table partitioning。 (未完)

Rainbow Portal 2005改用SQL2005的相容性問題

Rainbow Portal 2005改用SQL2005後,若將相容性層級(Compatibility Level)設定為SQL Server 2005 (90),則會造成錯誤,問題發生在 rb_GetModulesSinglePortal 這支Stored Procedure,修改方法如下: ALTER PROCEDURE [dbo].[rb_GetModulesSinglePortal] ( @PortalID int ) AS SELECT 0 AS ModuleID, 'NO_MODULE' AS ModuleTitle, -1 AS TabOrder UNION SELECT rb_Modules.ModuleID, rb_Tabs.TabName + '/' + rb_Modules.ModuleTitle + ' (' + rb_GeneralModuleDefinitions.FriendlyName + ')' AS ModTitle, rb_Tabs.TabOrder FROM rb_Modules INNER JOIN rb_Tabs ON rb_Modules.TabID = rb_Tabs.TabID INNER JOIN rb_ModuleDefinitions ON rb_Modules.ModuleDefID = rb_ModuleDefinitions.ModuleDefID INNER JOIN rb_GeneralModuleDefinitions ON rb_ModuleDefinitions.GeneralModDefID = rb_GeneralModuleDefinitions.GeneralModDefID WHERE (rb_Tabs.PortalID = @PortalID) AND (rb_GeneralModuleDefinitions.GeneralModDefID 'F9F9C3A4-6E16-43b4-B540-984DDB5F1CD2' AND ...

SQLite的.Net Provider

今天看到 簡介SQLite 、 SQLite使用教學 後向朋友推薦 SQLite ,他問為什麼要不用SQLExpress。可能是他大部份在開發Web AP,像我這種苦命小工程師,偶爾得替使用者寫點小程式,就很需要。以前在Windows下通常用Access格式的mdb檔處理小型資料庫,現在改用 SQLite 不但是能跨平台的資料庫,還可能做出跨平台的AP,處理速度也可能變快。 有位同事要用VB6呼叫,但找到的OLEDB Provider要錢 :( 所以就不考慮,只好改用 SQLite ODBC Driver 。 SQLiteJDBC 有完整範例,也有native driver。 對我朋友最近都改用.Net寫程式,所以需要 ADO.NET 2.0 Provider for SQLite 可惜文件很爛,Compact和標準混在一起,沒有好的範例。 幸好有孤狗,看過 SQLite for C# 測試 就知道該怎麼寫。另外可參考 Nhibernate+SQLite 實例指南(1)

再次推薦PostgreSQL

剛在 寢飾店老板 那看到 PostgreSQL vs MySQL (比較) ,看來還是和我印象中相同: PostgreSQL 在SMP下的表現遠比MySQL好。個人猜測一顆單核心CPU時應該差異不大,這得測試才知結果。我還是最欣賞 PostgreSQL 功能完整及不易損毀的特性。

Data Mining

前兩天去參加微軟的Data Mining短期課程,有80%都是Statistics,我唯一比較熟的是Neural Network和Linear Regression。大部份都是大學教授在講理論,所以算頗有深度;參與的學生似乎以中階主管居多,而且大部份都有Data Mining經驗。 雖然我對微軟不太滿意,但SQL2005的Data Mining做得真好用,實在厲害!不過bug也不少,April就要出SP1,真是MS風格呀! 上課心得: 1. SpamAssassin用的Bayes是蠻爛的方法,錯誤率頗高。 2. Data Mining不求精準,只求增加判斷率,能賺錢就好。 3. 資料採礦是需要許多背景知識、Domain Know How與經驗。 4. 其實微軟的軟體真的不算貴,唔,讓我想起當年的Unix工作站和PC的價差。(現在我用的Mac Mini市價13500,A牌的PC要20000,變成Unix工作站比Win PC便宜)