表結構 序列等注意事項

2021-09-02 12:37:00 字數 1728 閱讀 4685

表結構、序列等注意事項

[color=red][b]序列確認是否需要加上cache,作為主鍵應該nocycle.[/b][/color]

關於cache與nocache區別 參考

[quote]

oracle在建立序列(sequence)時有個引數你可以選擇cache或者nocache,下面來講一下兩者的區別:

先來看下建立sequence的語句:

create sequence seq_id

minvalue 1

maxvalue 99999999

start with 1

increment by 1

cache n / nocache --其中n代表乙個整數,預設值為20

order;

如果指定cache值,oracle就可以預先在記憶體裡面放置一些sequence,這樣訪問的快些。cache裡面的取完後,oracle自動再取一組到cache。使用cache或許會跳號, 比如資料庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失。舉個例子:比如你的sequence中cache 100,那當你sequence取到90時突然斷電,那麼在你重啟資料庫後,sequence的值將從101開始。

如果指定nocache值,oracle就不會預先在記憶體裡面存放sequence,當然這也就可以避免資料庫不正常down掉的sequence丟失。不過會產生一些問題:建立nocache sequence在高併發訪問時,容易導致row cache lock等待事件,主要原因是每次獲取nextval時都需要修改rowcache中的字典資訊。使用nocache sequence,還會導致如下問題:

由於每次修改字典資訊都需要commit,可能導致log file sync等待,nocache sequence在rac環境下,會對基於sequence生成的列建立的索引造成例項間大量索引塊爭用

基於以上問題,避免建立nocache sequence。

row cache lock:在呼叫sequence.nextval情況下需要修改資料字典時發生,對應row cache lock事件

sq lock:在記憶體快取(並非rowcache)上獲取sequence.nextval時發生,對應enq:sq-contention事件

sv lock:rac環境下獲取cache+order屬性的sequence.nextval時發生,對應dfs lock handle事件

什麼情況下使用cache什麼時間上使用nocache?

我個人感覺應該盡量使用cache,因為現在的資料庫很多都是在高併發的情況下執行的,首先這樣可以搞效能,並且也不會產生row cache lock等待事件。可能有些人會擔心資料庫不正常的down掉會產生序列號間斷,但這也是很少的情況。當然如果你的業務要求是絕不能產生間斷的序列號,那就要使用nochache了。

對於nochache的具體使用和實驗可以關注:

[/quote]

[color=red][b]數字統一用number型別[/b][/color]

number(p, s) 宣告乙個定點數 p(precision)為精度,s(scale)表示小數點右邊的數字個數,精度最大值為38,scale的取值範圍為-84到127

[color=red][b]小數點和負號不計入有效位數[/b][/color]

number(p) 宣告乙個整數 相當於number(p, 0)

[color=red][b]表名、表字段等都要有注釋。有資料字典的要寫詳細[/b][/color]

結構體注意事項

include struct stu char name int main void struct stu student struct stu student1 strcpy student1 name,zhangsan 編譯能通過但會出現斷錯誤。strcpy student name,zhang...

序列化注意事項

1.在反序列化的時候必須得有對應的class檔案,否則丟擲classnotfoundexeception。2.序列化物件的直接或者間接父類要麼是能夠序列化的,要麼就得有無參的構造器,否則無法完成反序列化,丟擲invalidclas ception,對與無法序列化但是有無參構造器的情況,父類中的fil...

結構體簡單注意事項

結構體是一些值得集合,這些值稱為成員變數.結構體的每個成員可以是不同型別的變數.甚至可以是結構體.結構體可以用 初始化,不能用 賦值 等價於 先 再 p name 等價於 p name 結構體傳參時,要傳結構體的位址.因為函式傳參的時候,引數是需要壓棧的。如果傳遞乙個結構體物件的時候,結構體過大,引...