2009-08-20 12 views
11

मैं एक टी-एसक्यूएल स्क्रिप्ट चला रहा हूं जो डेटाबेस को छोड़ देता है और फिर उसे पुनर्स्थापित करता है। स्क्रिप्ट एक SQL सर्वर 2008 डेटाबेस के खिलाफ चलाता है। कभी-कभी बैकअप फ़ाइल में कोई समस्या होती है और डेटाबेस पुनर्स्थापना स्थिति में फंस जाता है।जांच कर रहा है कि डेटाबेस को पुनर्स्थापित करने में डेटाबेस

IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name = 'dbname') 
BEGIN 
    ALTER DATABASE [dbname] 
    SET SINGLE_USER WITH 
    ROLLBACK IMMEDIATE 
END 

IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name = 'dbname') 
BEGIN 
    DROP DATABASE [dbname] 
END 

RESTORE DATABASE [dbname] 
FROM DISK = N'C:\dbname.bak' 
WITH FILE = 1, 
NOUNLOAD, 
STATS = 10 

अगली बार स्क्रिप्ट स्क्रिप्ट चलाने त्रुटि संदेश

ALTER DATABASE is not permitted while a database is in the Restoring state. 

यदि डेटाबेस ALTER डेटाबेस आदेश को चलाने के लिए प्रयास करने से पहले बहाल अवस्था में है की जाँच करने के लिए सबसे अच्छा तरीका क्या है उत्पन्न करता है?

संपादित करें: मैं जो रिकॉर्टर डेटाबेस चला रहा हूं वह कोई रिकवरी विकल्प नहीं उपयोग करता है।

उत्तर

23

ऐसा लगता है कि आप NORECOVERY विकल्प के साथ डेटाबेस पुनर्स्थापित कर रहे हैं। कारण यह है कि आप ऐसा करना चाहते हैं यदि आप प्रारंभिक पुनर्स्थापना के बाद बाद के लेनदेन लॉग बैकअप लागू करने की योजना बना रहे थे।

यदि आप केवल एक डेटाबेस बैकअप को पुनर्स्थापित करना चाहते हैं तो NORECOVERY खंड हटा दें। यदि आप लेनदेन लॉग बैकअप को पुनर्स्थापित कर रहे हैं, तो अंतिम पुनर्स्थापन NORECOVERY खंड के बिना किया जाना चाहिए या यदि अंतिम NORECOVERY के साथ लागू किया गया था तो आप अंतिम रूप देने के लिए RESTORE DATABASE DbName WITH RECOVERY कर सकते हैं।

आपके प्रश्न का उत्तर करने के लिए:

विधि 1

SELECT DATABASEPROPERTYEX ('DatabaseName', 'Status') 

देखें एसक्यूएल सर्वर पुस्तकें ऑनलाइन: DATABASEPROPERTYEX (Transact-SQL)

विधि 2

समीक्षा sys.databases प्रणाली दृश्य धारा निर्धारित करने के लिए डेटाबेस की स्थिति नहीं है। उदाहरण के लिए:

SELECT 
    state, 
    state_desc 
    FROM sys.databases 
WHERE [name] = 'DatabaseName' 

1 की दशा =

बहाल करने के लिए इस प्रणाली को देखने के बारे में प्रलेखन के लिए Sys.Databases देखें।

+3

राज्य_डिस्क्रिप्शन अब SQL 2008 r2 – Iain

+2

@Iain में state_desc है: यह SQL-Server 2005 में state_desc भी है –

1

दूसरों pyodbc के साथ एक RESTORE कर एक similar problem था। मेरा variation of the problem (आपके जैसे लक्षणों के साथ) एक गलत बाक फ़ाइल बन गया। यह है, तो निम्न T-SQL के साथ की खोज की जा सकती है, गलत .mdf या .ldf फ़ाइल नाम या डेटाबेस नाम की तलाश में:

RESTORE FILELISTONLY FROM DISK = N'C:\dbname.bak' 
1

विधि 2:

SELECT 
    state, 
    state_desc 
    FROM sys.databases 
WHERE [name] = 'Databasename' 

यह मुझे सही परिणाम दे रहा है।

संबंधित मुद्दे