⑴ ORACLE資料庫表自動擴展
首先說明一下,數據文件在加入的時候就可以直接設定為自動擴展,不用再次alter。
再把語句給你解析一下:
create tablespaceSIRM2
datafile'路徑+文件'size1024M --存儲地址 初始大小1G
autoextend on next10M maxsize unlimited --每次擴展10M,直到不能再擴展為止EXTENT MANAGEMENT local autoallocate --區管理方式為本地管理,segment space management auto; --段管理方式為自動
然後再回答你的問題:
並不是只能增加2G,這里的2G是你設定的數據文件的初始大小,並不是最後的大小。因為你的表空間是small datafile組成(區別於bigfile),所以每個數據文件最多隻能有4M個block塊。也就是說,假設你設定的block塊的大小是8K,那麼這里的每個數據文件最大就是32G(理論最大值,其實並不能完全達到這么大),你的數據文件初始大小2G,也就是說還有30G的可擴展大小左右(small datafile,以8K的block塊大小計算,如果是16K,或者32k,那麼也就是說可擴展空間更大一些),擴展到不能再擴展了,那麼自然就需要增加數據文件了。個人建議:表空間自動擴展關閉(起碼我不喜歡用),直接建立需要大小的數據文件,比如每個數據文件30G,一次加4個,那麼表空間大小直接增加120G,足夠你用了,就算不夠再加,工作量也不是很大(比如每月操作一次,一次加四個,估計5分鍾搞定,工作量不大吧)。不然天天看著表空間要滿,很難受的。
你的alter database datafile '全路徑' autoextend on;語句本身沒有問題,但是你沒有設定next大小,所以資料庫會根據自己的判斷增加數據文件的大小,默認參數是多少我忘記了,這個是有默認值的,不過這個默認值真的不大(好像是初始參數的百分之幾,你初始設定2G,假設是5%,那麼也就是100M左右,對於你來說幾乎感覺不到,而且擴展速度慢),所以幾乎感覺不到也是可以理解的。
如果實在感覺麻煩,那麼就直接建立一個bigfile的表空間,那你就基本不用管了,那可是4G個數據塊,也就是說按照每個block塊8K計算,最終能擴展到32T,足夠了。不過如果不是數據量特別大,個人感覺還是不要這么干,有利就有弊,而且一個文件那麼大,總是感覺不太好。
⑵ 求SQL表擴展欄位屬性的思路
大家在使用SQL Server開發的時候一定會遇到這樣的需求,那就是通過Table_Name1表的兩個欄位Column1、Column2來查詢在Table_Name2表中符合這兩個條件的記錄,並返回Table_Name2中的欄位Column3,面對這樣的需求,你也許會說使用表連接就可以了,對的,沒錯,我也是這樣想的,但是有的時候往往要面對不同的突發情況,那就是並不是一定會Column1與Column2是全匹配的查詢,可能中間還需要一些邏輯的處理,比如字元串的截取後再匹配等等。這個時候我們通常會在SQL Server中寫一個函數,這個函數接收兩個參數:Column1、Column2,函數體裡面做一些邏輯處理,在通過處理好的參數去查詢Table_Name2表,並返回相應的值。很好,那下面我們來計算下圖中數據的查詢情況。假設表1的數據有50W,表2的數據有4W,在表2沒有索引的條件下,查詢的復雜度就有50W*4W了,兩個表都需要做全表掃描,表2的全表掃描就會達到50W次。(圖1:需求說明)優化1:這一個優化,每個開發人員都知道,那就是對表2的兩個查詢欄位分別建立索引。這樣的優化和之前相比,性能將會提高N個等級。優化2:這第二個優化方法是使用SQL Server的復合索引,在表2上創建一個復合索引,這個符合索引包括需要查詢的兩個欄位,其實就是把兩個欄位的內容生成一個索引,其中索引包含了兩個索引的排序。優化3:這第三個優化方法是使用SQL Server2005之後版本才有的索引-包含性索引(Include),就是在優化2的基礎上,把需要返回的欄位也一起放入到索引中,這樣的查詢就只需要查詢索引就夠了,不需要再讀取數據頁了,減少磁碟的IO消耗。不過這個方法也不是萬能,因為有時可能返回的欄位會比較多,有時幾個欄位加起來的長度有可能超出了900個字元(索引大小范圍),如果想了解可以進入:SQL Server 索引中include的魅力(具有包含性列的索引)優化4:在不考慮一些分區、分表、分到不同的磁碟等優化方式的情況下,我們是否還能進一步優化我們的查詢呢?這就是這篇文章想要告訴你的,因為我們的回答是:有的。那就是通過SQLCLR的UDT,把表2的數據一次性載入到內存,那麼在進行表1查詢的時候,我們不需要通過B+樹來查詢數據了,直接到內存中查詢,這樣之所以快是因為操作內存要比操作磁碟要快得多。這其中會有些局限性和缺點,具體見下面的缺點描述。設計思路1、去資料庫中把表2讀取出來,並放到private static readonly IDictionary<string, string> resultCollectionDic的靜態變數中。在資料庫服務啟動的時候是會初始化2、SQLCLR函數的,所以在啟資料庫服務的時候,也一起把表2的數據保存到了內存當中了。3、上面的查詢中包括了兩個欄位Column1、Column2和一個返回欄位Column3,那麼我們如何把這些數據保存到IDictionary字典當中呢?我的做法就是把Column1、Column2的中間加一個字元「+」,把這個字元串作為Key值,把Column3這個返回值做為Value,這樣就解決了多個And的查詢的問題。這個會有些局限性,具體可以見下面的缺點描述。在函數FunctionImsi2HLR2中傳進的兩個字元後,就要進行上面的拼湊方式來拼湊Key值,再到IDictionary中查詢。
⑶ 如何設計一個好的,可擴展性的資料庫
如何設計一個好的,可擴展性的資料庫
資料庫設計(Database Design)是指對於一個給定的應用環境,構造最優的資料庫模式,建立資料庫及其應用系統,使之能夠有效地存儲數據,滿足各種用戶的應用需求(信息要求和處理要求)。
在資料庫領域內,常常把使用資料庫的各類系統統稱為資料庫應用系統。