Cara Mengatasi Database ‘In Recovery’ Pada SQL Server 2008

Beberapa saat yang lalu, saya pernah mengalami masalah (lagi) πŸ™‚ di database SQL Server 2008. Ketika sedang melakukan proses restart services SQL Server, tanpa diketahui sebabnya, aplikasi yang mengarah ke database tersebut tidak bisa running. Setelah saya masuk ke SSMS (SQL Server Management Studio), ternyata status database bertuliskan “Database (In Recovery)” dan tidak bisa di akses.

811a-M-2Lyon__d

Panik. Ya itu satu kata singkat yang bisa menggambarkan suasana hati saya saat itu. Karena baru pertama kali menemui kasus tersebut. Seperti biasa, saya menggunakan senjata pamungkas yaitu mencari informasi di Google :). Dan berikut ini adalah solusi untuk mengatasi masalah tersebut di atas :

1. Don’t Panic.
Jangan panik :), karena segala sesuatu jika dilakukan dengan ceroboh pasti akan berakibat fatal.

2. Disable User Login
Masuk ke SSMS dan disable semua user login yang mengarah ke database terkait.

3. Tunggu.
Selama status database masih bertuliskan ‘In Recovery’, jangan lakukan proses apapun. Termasuk restart services SQL Server. Karena jika services SQL Server di restart, maka proses ‘In Recovery’ akan dimulai dari awal lagi. Dan tentunya akan membuang waktu cukup lama.

4. Gunakan Script
Terkadang kita belum tahu persis kapan proses ‘In Recovery’ itu selesai. Untuk mengetahui proses tersebut, maka kita perlu gunakan script di SSMS sebagai berikut :

DECLARE @DBName VARCHAR(64) = ‘databasename’
DECLARE @ErrorLog AS TABLE([LogDate] CHAR(24), [ProcessInfo] VARCHAR(64), [TEXT] VARCHAR(MAX))
INSERT INTO @ErrorLog
EXEC sys.xp_readerrorlog 0, 1, ‘Recovery of database’, @DBName
SELECT TOP 5
[LogDate]
,SUBSTRING([TEXT], CHARINDEX(‘) is ‘, [TEXT]) + 4,CHARINDEX(‘ complete (‘, [TEXT]) – CHARINDEX(‘) is ‘, [TEXT]) – 4) AS PercentComplete
,CAST(SUBSTRING([TEXT], CHARINDEX(‘approximately’, [TEXT]) + 13,CHARINDEX(‘ seconds remain’, [TEXT]) – CHARINDEX(‘approximately’, [TEXT]) – 13) AS FLOAT)/60.0 AS MinutesRemaining
,CAST(SUBSTRING([TEXT], CHARINDEX(‘approximately’, [TEXT]) + 13,CHARINDEX(‘ seconds remain’, [TEXT]) – CHARINDEX(‘approximately’, [TEXT]) – 13) AS FLOAT)/60.0/60.0 AS HoursRemaining
,[TEXT]
FROM @ErrorLog ORDER BY [LogDate] DESC

Kemudian klik tombol Execute, maka akan tampil progress waktu ‘In Recovery’ terhadap database yang terkait. Tunggu hingga proses tersebut selesai dan refresh database terkait. Biasanya setelah statusnya sudah 99%, database yang bermasalah tadi sudah bisa di akses kembali.
Semoga bermanfaat πŸ™‚

Advertisements

2 thoughts on “Cara Mengatasi Database ‘In Recovery’ Pada SQL Server 2008

  1. mas,, pas dijalanin ada pesannya seperti ini..
    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near ‘β€˜’.
    Msg 102, Level 15, State 1, Line 4
    Incorrect syntax near ‘β€˜’.
    Msg 102, Level 15, State 1, Line 7
    Incorrect syntax near ‘β€˜’.

    mohon bantuannya
    terimakasih

    • Coba jalankan script ini (database name jangan diganti, biarkan semua script default aja) :

      DECLARE @DBName VARCHAR(64) = ‘databasename’

      DECLARE @ErrorLog AS TABLE([LogDate] CHAR(24), [ProcessInfo] VARCHAR(64), [TEXT] VARCHAR(MAX))

      INSERT INTO @ErrorLog
      EXEC sys.xp_readerrorlog 0, 1, ‘Recovery of database’, @DBName

      SELECT TOP 5
      [LogDate]
      ,SUBSTRING([TEXT], CHARINDEX(‘) is ‘, [TEXT]) + 4,CHARINDEX(‘ complete (‘, [TEXT]) – CHARINDEX(‘) is ‘, [TEXT]) – 4) AS PercentComplete
      ,CAST(SUBSTRING([TEXT], CHARINDEX(‘approximately’, [TEXT]) + 13,CHARINDEX(‘ seconds remain’, [TEXT]) – CHARINDEX(‘approximately’, [TEXT]) – 13) AS FLOAT)/60.0 AS MinutesRemaining
      ,CAST(SUBSTRING([TEXT], CHARINDEX(‘approximately’, [TEXT]) + 13,CHARINDEX(‘ seconds remain’, [TEXT]) – CHARINDEX(‘approximately’, [TEXT]) – 13) AS FLOAT)/60.0/60.0 AS HoursRemaining
      ,[TEXT]

      FROM @ErrorLog ORDER BY [LogDate] DESC

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s