今天,把 秋色園QBlog 的資料導到Oracle中運行,重拾Oracle,過程的主要問題記錄下:
1:服務啟動問題
這個問題發生多次了,那個毛網管沒事又讓人改計算名稱,Oracle久沒開了也沒在意,Oracle服務啟動總失敗,折騰後才發現,於是把電腦名稱改回去,重啟電腦,再啟用服務,正常。
2:索引問題
資料導到Oracle後,發現一些簡單的查詢變的相當的慢如:
select id,username,title from blog_content where userid=111 order by id desc
後來經網頁點拔,給title加上索引就快了:“select中的放在包含索引(oracle中稱覆蓋索引)”
後來其它查詢慢的,全給加索引,速度才上去,看來搞Oracle不搞索引,是沒法玩的。
3:子查詢語句問題
正常代碼:
SELECT count(*) as UserCount,
(SELECT count(*) FROM Blog_Content WHERE TypeID=0) as ArticleCount
FROM Blog_User
此語句在Access、Mssql、Sqlite、Mysql下皆正常,唯獨 Oracle不成,加個函數解決如下:
SELECT count(*) as UserCount,
min((SELECT count(*) FROM Blog_Content WHERE TypeID=0)) as ArticleCount
FROM Blog_User
4:預存程序調用問題
問題:
預存程序的參數varchar2,如果代碼中參數為空白,會報異常:ORA-01084: invalid argument in OCI call view
如果在PL/SQL中執行,而不會錯。
解決方案是為空白時,傳遞DBNull.Value。
5:完善 CYQ.Data for Oracle 版本分頁預存程序。
直接修改了文章:折騰Oracle問題小菜記[分頁預存程序/查詢所有表、視圖、預存程序/查詢表、視圖、預存程序欄位結構與參數](三)
6:修改欄位順序
增加列,又不想放在最後面,拉不上去,只好寫代碼更改順序號。
select object_id from all_objects where object_name='BLOG_COMMENT'--查表ID
select COL#,name from sys.col$ where obj#=49244--看一下欄位順序序號
update sys.col$ set COL#=8 where obj#=49244 and name='CREATETIME'--把序號更新了
7:更新序列初始值
資料庫共用一個序列為自增ID,導完資料後序列值沒變,需要調整值。
ALTER SEQUENCE 序列名稱 Increment By 新的數字;