隨着國產化項目的推進,使用國產數據庫是免不了的了,但國產數據庫真的很xx,下面來盤點一下對接達夢數據庫遇到的坑。本文書寫時使用的版本為DM8。
1,數據庫實例,表空間
達夢數據庫的設計類似於Oracle,即采用了表空間形式,MySQL為非表空間形式。在達夢數據庫的概念中,數據庫用戶與表空間是一一對應的,即A用戶默認只能操作模式A(表空間A)。如果需要對其他的表空間進行操作,則需要在SQL語句中將原有的 表名 改寫為 表空間名.表名 來解決。另一種解決方案,則是將用戶名與模式名對應,如登陸的用戶是SYSDBA,則操作的模式也是SYSDBA。
表空間類型配置:dbc:oracle:thin:@localhost:1521:orcl(配置支持連接同一個端口下不同數據庫實例,不同用戶登錄使用不同表空間)
非表空間類型配置:jdbc:mysql://localhost:3306/數據庫名(配置支持連接同一個端口下不同數據庫實例,不同用戶登錄使用同一數據庫)
oracle數據庫一個監聽端口號可以對應多個數據庫實例,而達夢數據庫一個監聽端口號對應一個數據庫實例,要建立多實例,必須配置多個監聽端口號。
達夢連接配置:jdbc:dm://172.19.45.26:5236(無需配置數據庫名,端口即代表了數據庫名,無需配置表空間名,因為配置也不會生效!)
2,字母大小寫、單引號、雙引號
初始化達夢數據庫的時候,默認勾選了“字符串比較大小寫敏感”,建表的時候,如果表名或列名使用小寫字母,那么今后書寫SQL語句的時候就要麻煩很多了,必須嚴格區分單引號、雙引號的使用。字符串常量應使用單引號括起,關鍵字、對象名、字段名、別名等則使用雙引號括起。
而且,在大小敏感的數據庫下,使用dexp導出數據庫、模式正常,但導出小寫字母創建的表時,可能會提示“表不存在或者為系統內部對象,請核對后再進行輸入”。
所以,盡量在新建庫時,去掉勾選“字符串比較大小寫敏感”
3,導入導出命令
導入:dexp SYSDBA/123456789@172.19.45.26:5236 FILE=dexp01.dmp LOG=dexp01.log DIRECTORY=./dexp FULL=Y
導出:dimp SYSDBA/12345678@172.19.45.26:5236 FILE=./dexp/dexp01.dmp LOG=dimp02.log DIRECTORY=/DM8/data/dimp SCHEMAS=SYSDBA,OTHER,PERSON