下班了,寫兩篇文章都回家了:)
以前也用oracle,都是別人弄好了,我直接用,就只感覺預存程序,sql文法比用MSSQL稍微彆扭點,其他配置很少接觸,這次從用pd建表到弄好資料庫讓大家用,都大體弄了偏,瞭解了更多東西,把部分現在記下來的寫下來做個備忘。
PD裡是可以直接設定資料表空間存放位置的,如表存放的資料表空間和lob對象單獨存放資料表空間如:
主鍵存放資料表空間設定如下:
設定後,用PD產生SQL代碼,則會自動產生資料表空間代碼。
oracle中預存程序的單步調試和直接產生結果,以前認為很麻煩,因為要用cursor對象,不想MSSQL直接exec 預存程序名就出來了,而是返回一個cursor,以前也沒有解決怎麼調試預存程序方便,這次發現,原來直接在pl/sql中比如packages裡找到定義包頭下面的預存程序,右鍵測試,自動就產生好對應的測試預存程序的代碼,只需要在下面寫好參數,產生後,點擊cursor後面的...框,就能查看到該預存程序產生的結果了。
感覺還麻煩點,但整合了單獨調試啊等,感覺功能強大點。
oracle DBLINK串連,這個糾結了我半天,其實弄好後發現很簡單,我單獨寫了文字文件記錄:
遠端連線了AAA後,需要串連BBB執行個體,並查詢資料,DBLINK方法如下:
create database link BBB
connect to 使用者 identified by
密碼 using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.254)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = BBB)
)
)'
如果登入的AAA(注意是登入的機器,不一定是本機)執行個體tnsnames.ora檔案裡面添加了類試:
BBB=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.254)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = BBB)
)
)
這樣的代碼,則只需要:
create database link BBB
connect to 使用者 identified by
密碼 using 'BBB'
即可
(注意:Link後面大寫的BBB是取的名字, to後面的 使用者 是登入名稱,by後面的 密碼 是密碼,using 後面雙引號包含的是tnsnames.ora取的名字)
----------------------------------------------------------------
測試如下:
select *
from EW_AREA@BBB;
EW_AREA是遠端資料庫的表, BBB是link的名稱,
查詢登入的機器所建立的所有DBLINK如下:
select owner, db_link from dba_db_links
刪除指定DBLINK串連如下:
DROP DATABASE LINK BB
-------------------------------------------------------------------------
如果建立全域用的,需要加public,比如:
create public database link BBB2 ....
刪除則也需要刪除全域的
DROP public DATABASE LINK BBB2
觸發器的問題,自增欄位開始準備調SQL的時候手寫序列.Nextval,但是最後發現在用一些ORM工具建立對象時,比如直接就insert(item)對象了,這個時候需要先從序列裡擷取ID,再插入資料庫,將串連兩次資料庫,並且寫SQL或者預存程序的時候,如果不寫序列.NextVal,也更好,因此還是決定用觸發器,其他地方儘力少用吧,防止鎖表之類的。
其他細節也還多,但都很容易在網上搜尋到,還有些問題暫時沒在項目中遇到,就不寫了。