回覆列表
  • 1 # 錢布斯

    開發資料庫伺服器遇到這樣的一個問題,使用了一段時間之的後,突然之間資料庫就用不了了,現象是新連線連線不上,已經連線的執行sql時,報出tempdb日誌滿了,無法進行操作的錯誤,而且控制檯無法連線上伺服器,所有操作都無法正常進行。

      經過上網查詢,得知是tempdb日誌滿了,預設情況下,tempdb資料庫是放置在master裝置上,容量為2M,而臨時資料庫是活動最為平凡的資料庫常常被用來排序、建立臨時表、重格式化等操作,所以tempdb的最佳化應該受到特別的關注。安裝Sybase的時候就應該把tempdb的空間擴大,並且最好新建一個表空間給它專門用。

      正常的時候可以用sp_helpdb tempdb命令檢視tempdb,可以看到tempdb佔用空間的情況。

      如果日誌滿了,可以執行dump tran tempdb with truncate_only或者dump tran  tempdb with no_log來清除日誌,但是現在根本無法執行該語句,因為tempdb已經滿了,根本沒有空間來執行該語句(如果出現Sybase的服務也無法啟動的情況就需要把jsj重啟,然後再去啟動Sybase的服務),這該怎麼辦,好像進入了一個死迴圈裡,日誌滿了要清除,但因為滿了又無法清除,看來只能先擴容了,現在已經沒有一個空閒的表空間了,控制檯根本無法連線上資料庫,只能用語句來新建一個表空間,下面是新建表空間的語句:

      執行disk init命令必須先執行use master命令。

      disk init

      name="tempdblog",

      physname="D:/Sybase/tempdblog.dat",

      vdevno=11,

      size= 409600

      go

      新建好表空間後,將該空間分配給tempdb存放日誌用如下命令:

      alter database tempdb log on tempdblog=800

      【注】執行上面的語句之前執行sp_helpdb tempdb命令發現db_size為12MB,執行完上面的語句後db_size變為812MB。  alter database tempdb on tempdbdata=1024  dump tran tempdb with truncate_only

      或者 dump tran tempdb with no_log

      sp_dropsegment "default",tempdb,master

      sp_dropsegment logsegment,tempdb,master 還可以將臨時資料庫與高速緩衝進行繫結

      tempdb資料庫是活動最為平凡的資料庫,常常被用來排序、建立臨時表、重格式化等操作,它會頻繁地使用資料快取,所以應為臨時資料庫建立快取記憶體,從而可以使其常駐記憶體並有助於分散I/O,根據伺服器的實際情況,我們為tempdb資料庫建立100M的快取記憶體,實現方法如下:

      建立命名快取記憶體

      sp_cacheconfig “tempdb_cache”,”100m”,”mixed”

      go

      2、重新啟動server

      3、捆綁臨時資料庫到tempdb_cache快取記憶體

      sp_bindcache “tempdb_cache”, tempdb

      go

  • 中秋節和大豐收的關聯?
  • 紅樓夢裡,有哪些人拿林黛玉的姻緣開過玩笑?