如果不小心安裝錯 SQL Server 為 Evaluation 的版本,要小心當超過 180 天之後,系統就會無法正常使用了
這幾天遇到一個蠻特別的案例,原本收到的問題是 「維護計畫」 忽然無法使用,即便是裡面沒有任何的 Task,都無法順利地執行。但從對方所提供的錯誤訊息卻看不出來問題在哪裡,因此花了一點時間研究一下。
原來這台機器正常有設定維護計畫去備份資料庫,但不知道是否沒有準備兒童節禮物 – 乖乖,居然過完兒童節就忽然無法正常執行,因此就先寫瞭一段 SQL 語法給朋友,看是否把語法放到排程內是否可以順利執行。
DECLARE @cursor AS CURSOR
DECLARE @dbname AS VARCHAR(20), @query AS VARCHAR(100)
DECLARE @today AS VARCHAR(12) = CONVERT( varchar(12), GETDATE() , 112 )
SET @cursor = CURSOR SCROLL FOR
SELECT name FROM master..sysdatabases
WHERE name NOT IN('master','model','msdb','tempdb','distribution')
OPEN @cursor
FETCH NEXT FROM @cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = 'BACKUP DATABASE ['+ @dbname +'] TO DISK = ''C:\Temp\'+@dbname+'_'+@today+'.bak '' WITH INIT,COMPRESSION'
EXEC(@query)
FETCH NEXT FROM @cursor INTO @dbname
END
CLOSE @cursor
DEALLOCATE @cursor
透過朋友回應,如果讓排程去執行上述的 Backup 的語法,就可以正常地去執行備份,因此整個推論應該不是 SQL Agent 或者是權限的問題,那看起來就真的很難隔空把脈了,似乎要連線看一下狀況。而查看之後發現當 SQL Agent 去執行維護計畫的 Job 的時候,會當出 0xC0000033 的錯誤訊息,有了這個蛛絲馬跡,就可以從官方文件的「Integration Services 錯誤和訊息參考」的說明中找到,原來那個錯誤訊息的意思是 SSIS 超過試用期了 ?! 正常來說 SSIS 和 SQL Engine 不可能一個是正式版,而另外一個是試用版,因此決定查了一下 SQL Server 安裝的紀錄,以及 SQL Server 的啟動紀錄中來查看,原來一開始的時候安裝是試用版,只是剛好這段時間都沒有把 SQL Server 給重新啟動,因此雖然 SQL Engine 也過了試用期,但因為還沒有重新啟動,因此都還可以正常使用,但 SSIS 則是剛好執行的時候去檢查,因此就會當出那個過期的資訊了。
既然知道問題的原因,那就好解決了。
首先我們先檢查一下目前有問題的 SQL Server ,透過 Error Log 中的啟動紀錄,我們可以看到目前是安裝 SQL Server Evaluation 的版本
接著我們拿出安裝片出來,執行安裝程式之後,選擇「維護」→「版本升級」
記得不要在選錯了,這次確定要安裝正式的版本
確認一下我們要升級的 Instance
確認沒有人使用之後,就可以按下「升級」的按鈕了
經過了幾秒鐘之後,就可以看到升級完成的畫面了
一般來說我們只要這樣做就可以完成升級了,但實在不免好奇,到底在這個升級過程中,SQL Server 是怎麼做的,因此查看一下 Error Log,從訊息中我可以看出一些端倪,SQL Server 在升級過程中,其實是把 SQL Server Engine 的服務給關閉,然後加入一些啟動參數來做啟動。
而做完上述整個程序之後,在重新把 SQL Server 給啟動起來,就完成相關的升級動作了。
看起來下次要是手邊沒有安裝光碟片,或許也可以來測試看看,就不用那麼麻煩還要去找安裝片了。
PS. 又安裝一台起來測試,不能直接利用啟動參數來改變,那樣是沒有效果的,看起來還要在測試看看有沒有更快的方式了。