2016-10-13 9 views
6

Here is errormdf फ़ाइल संलग्न localDb त्रुटि कम से कम एक फ़ाइल की आवश्यकता है

शीर्षक फेंकता की कोशिश: Microsoft SQL सर्वर प्रबंधन स्टूडियो

डेटाबेस सर्वर के लिए असफल संलग्न '(localdb) \ mssqllocaldb'। (Microsoft.SqlServer.Smo)

अतिरिक्त जानकारी:

कम से कम एक फ़ाइल डेटाबेस संलग्न के लिए आवश्यक है। (माइक्रोसॉफ्ट.SqlServer.Smo)

मैं अपने स्थानीय डीबी उदाहरण में .mdf डेटाबेस फ़ाइल संलग्न करने की कोशिश कर रहा हूं। यह ठीक है अगर मैं इसे SQL सर्वर पर भी कर सकता हूं। मेरे पास .ldf फ़ाइल एक ही निर्देशिका में

+0

एक अलग निर्देशिका के लिए एलडीएफ फ़ाइल ले और उसके बाद करने के लिए प्रयास करें केवल MDF फ़ाइल लिंक, या दोनों फ़ाइलों – iceDragon

+0

संलग्न करने के लिए @iceDragon कोई किस्मत, मैं .ldf फ़ाइल संलग्न नहीं कर सकते न अलग निर्देशिका के लिए बदल रहा में मदद करता है की कोशिश करो। –

+0

क्या आपने व्यवस्थापक अधिकारों के साथ एसक्यूएल प्रबंधन शुरू करने की कोशिश की है? – iceDragon

उत्तर

7

पूर्ण होने के लिए - Jim's comment समस्या हल (आधा) हल करती है और आपको जाता है।

समस्या का अन्य "आधा" है - क्या होगा यदि आप अंततः भौतिक डेटाबेस फ़ाइल का नाम बदलना चाहते हैं? उत्तर इस CodeProject post में उपलब्ध है।


कदम:

  1. ALTER DATABASE नई शारीरिक फ़ाइल नाम सेट (डेटा फ़ाइल और लॉग फ़ाइल) को
    तक एसक्यूएल सर्वर पुनरारंभ प्रभावी नहीं होगा या डेटाबेस ऑफ़लाइन ले लिया गया और ऑनलाइन वापस लाया

    • ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', FILENAME = '<Full-Path-Required>\NewDbName.mdf');
    • ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', FILENAME = '<Full-Path-Required>\NewDbName_log.ldf');
  2. ALTER DATABASE फिर से नया तार्किक फ़ाइल नाम (डेटा फिर से, और लॉग फ़ाइलें) स्थापित करने के लिए
    तुरंत प्रभावी

      ले जाता है
      1. पर राइट क्लिक करें:
      2. ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', NEWNAME = 'NewDbName');
      3. ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', NEWNAME = 'NewDbName_log');
  3. ऑफ़लाइन एसक्यूएल सर्वर

    • एसक्यूएल सर्वर प्रबंधन स्टूडियो का उपयोग करते हुए ले लो और ऑनलाइन वापस लाने या पुनः आरंभ डेटाबेस का नाम बदलकरपर क्लिक करेंTasks के तहत।
    • (ऑफ़लाइन) डेटाबेस पर राइट-क्लिक करें और पर क्लिक करें Tasks के तहत।
  • का उपयोग T-SQL:
    1. ALTER DATABASE [CurrentName] SET OFFLINE WITH ROLLBACK IMMEDIATE; (यह ऑफ़लाइन सेट करता है और किसी भी ग्राहक डिस्कनेक्ट)
    2. ALTER DATABASE [CurrentName] SET ONLINE;

  • पूर्ण कोड:

    -- Find "CurrentName" (without quotes) and replace with the current database name 
    -- Find "NewDbName" (without quotes) and replace with the new database name 
    
    
    USE [CurrentName]; 
    
    -- Change physical file names: 
    ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', FILENAME = '<Full-Path-Required>\NewDbName.mdf'); 
    ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', FILENAME = '<Full-Path-Required>\NewDbName_log.ldf'); 
    
    -- Change logical names: 
    ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', NEWNAME = 'NewDbName'); 
    ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', NEWNAME = 'NewDbName_log'); 
    
    -- Take offline and back online 
    USE [master] 
    GO 
    ALTER DATABASE [CurrentName] SET OFFLINE WITH ROLLBACK IMMEDIATE; 
    -- Then navigate to <Full-Path-Required> and rename the files 
    ALTER DATABASE [CurrentName] SET ONLINE; 
    
    1

    मैं ले जाने के/डीबीएस कई बार नाम बदलने के लिए किया है। यदि आप एक ही नाव में हैं, तो यहां एक ऐसी स्क्रिप्ट है जो नए/पुराने नामों को ऊपर और ऊपर टाइप करने से बचने के लिए चर का उपयोग करती है।

    यह आपके लिए डीबी बैक अप स्वचालित रूप से शुरू करने के अलावा Jesse's answer से उसी तर्क का उपयोग करता है। मुझे लगता है कि भौतिक फाइलों को स्थानांतरित/नाम बदलने के बाद आपको पर इसे वापस चालू करने की आवश्यकता है, इसलिए उस कथन को हटा देना। अगर यह धारणा गलत है तो कृपया टिप्पणी करें।

    हालांकि, एसएसएमएस में तार्किक नाम को प्रतिबिंबित करने के लिए, आपको अभी भी right click -> rename की आवश्यकता है। यह नीचे EXECUTE/REPLACE विधि का उपयोग किए बिना समान प्रतीत होता है।

    ---------- CHANGE THESE ---------- 
    -- Keep names identical to only move locations 
    DECLARE @CurrDbName AS varchar(255) = 'CurrentDbName' 
    DECLARE @NewDbName AS varchar(255) = 'NewDbName' 
    DECLARE @PathToFolder AS varchar(255) = '<FullPathMinusFilename>\' 
    
    
    ---------- DECLARE TEMPLATES ---------- 
    -- Use DB 
    DECLARE @USE_DB AS varchar(255) = 'USE [{CurrDbName}]' 
    
    -- Change physical file names 
    DECLARE @SET_PHYS_MDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}'', FILENAME = ''{PathToFolder}{NewDbName}.mdf'')' 
    DECLARE @SET_PHYS_LDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}_log'', FILENAME = ''{PathToFolder}{NewDbName}_log.ldf'')' 
    
    -- Change logical names (LOG = "logical", not "log") 
    If (@CurrDbName != @NewDbName) 
    BEGIN 
        DECLARE @SET_LOG_MDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}'', NEWNAME = ''{NewDbName}'')' 
        DECLARE @SET_LOG_LDF AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] MODIFY FILE (NAME = ''{CurrDbName}_log'', NEWNAME = ''{NewDbName}_log'')' 
    END 
    
    -- Take offline 
    DECLARE @SET_OFFLINE AS varchar(255) = 'ALTER DATABASE [{CurrDbName}] SET OFFLINE WITH ROLLBACK IMMEDIATE' 
    
    
    ---------- START DOING STUFF ---------- 
    DECLARE @SQL_SCRIPT AS varchar(255) 
    
    -- Use DB 
    SET @SQL_SCRIPT = REPLACE(@USE_DB, '{CurrDbName}', @CurrDbName) 
    EXECUTE (@SQL_SCRIPT) 
    
    -- Change physical file names 
    SET @SQL_SCRIPT = REPLACE(REPLACE(REPLACE(@SET_PHYS_MDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName), '{PathToFolder}', @PathToFolder) 
    EXECUTE (@SQL_SCRIPT) 
    SET @SQL_SCRIPT = REPLACE(REPLACE(REPLACE(@SET_PHYS_LDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName), '{PathToFolder}', @PathToFolder) 
    EXECUTE (@SQL_SCRIPT) 
    
    -- Change logical names (LOG = "logical", not "log") 
    If (@CurrDbName != @NewDbName) 
    BEGIN 
        SET @SQL_SCRIPT = REPLACE(REPLACE(@SET_LOG_MDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName) 
        EXECUTE (@SQL_SCRIPT) 
        SET @SQL_SCRIPT = REPLACE(REPLACE(@SET_LOG_LDF, '{CurrDbName}', @CurrDbName), '{NewDbName}', @NewDbName) 
        EXECUTE (@SQL_SCRIPT) 
    END 
    
    -- Take offline 
    USE [master] 
    SET @SQL_SCRIPT = REPLACE(@SET_OFFLINE, '{CurrDbName}', @CurrDbName) 
    EXECUTE (@SQL_SCRIPT) 
    
    -- Now turn off the database, rename/move physical files, and bring the database back online 
    

    अगर यह पर्याप्त नहीं है यह मेरा पहला जवाब है, क्षमा याचना है। इन उत्तरों की

    +0

    बहुत बहुत धन्यवाद। यद्यपि प्रश्न का सीधा जवाब नहीं दिया गया है, लेकिन यह "अन्य आधे" को ठीक से संबोधित करता है क्योंकि जेसी ऊपर उल्लेखित है। लेकिन नाम केवल एक ही स्थान पर सेट करके आपका उत्तर पूर्ण और सरल है। एसएसएमएस डेटाबेस सूची में अतिरिक्त नामकरण का भी उल्लेख है (जो दुर्भाग्य से अभी भी CurrDbName दिखाता रहता है) भी महत्वपूर्ण है। प्रासंगिक प्रश्न यहां है [भौतिक डेटाबेस फ़ाइलों का नाम कैसे बदलें] (https://stackoverflow.com/questions/4758551/how-to-rename-the-physical-database-files)। इसे वहां क्यों पोस्ट नहीं किया जा रहा है? –

    0

    कोई भी बिंदु जवाब के लिए जल्दी थे इसलिए मैंने सोचा कि मैं बस अपना निष्कर्ष बताते मेरा उत्तर जोड़ना होगा (हर किसी का योगदान यहाँ के आधार पर) ...

    स्थिति:

    आपके पास डेटाबेस फ़ाइल और लॉग फ़ाइल है लेकिन उनमें से कोई बैकअप नहीं है। आप डेटाबेस को अटैच करने की कोशिश कर रहे हैं (नीचे जाने वाले सर्वर से पुनर्प्राप्त करने के प्रयास में अधिक से अधिक)।

    समस्या:

    आप कुछ अलग की तुलना में वे मूल रूप से थे MDF और एलडीएफ फ़ाइलों का नाम बदल दिया है। आपको उन्हें मूल नामों में वापस नाम बदलने की आवश्यकता है, फिर ATTACH को आजमाएं।

    डीबी फ़ाइलें (आसान तरीका) नाम बदलने के लिए कैसे:

    1. के बाद आप संलग्न किया है MDF और एलडीएफ फ़ाइलों को सफलतापूर्वक आप तो का बैकअप लेने के द्वारा एक BAK (बैकअप) फ़ाइल बनाना चाहते डेटाबेस।
    2. अगला आप SQL सर्वर से डेटाबेस को छोड़ना/हटाना चाहते हैं।
    3. अगला आप डेटाबेस को पुनर्स्थापित करना चाहते हैं।यह वह जगह है जहां आप FILES अनुभाग (बाईं तरफ) में जा सकते हैं जो आपको Restore As फ़ाइल नाम को बदल देगा जो आप एमडीएफ और एलडीएफ फ़ाइलों को नामित करना चाहते हैं।
    4. मैं फिर आगे बढ़ूंगा और उस नए डेटाबेस का एक और बैकअप बना दूंगा ताकि इस बार बैकअप में सही फ़ाइल नाम हो।
    संबंधित मुद्दे