More

    Hoe kan ik een SQL Server-database klonen op dezelfde server in SQL Server 2008 Express?

    sql-server
    Facebook
    Twitter
    ReddIt
    Mix
    VK

    Ik heb een MS SQL Server 2008 Express-systeem dat een database bevat die ik zou willen ‘kopiëren en hernoemen’ (voor testdoeleinden), maar ik ben niet op de hoogte van een eenvoudige manier om dit te bereiken.

    Ik merk dat in de R2-versie van SQL Server er een kopie-database-wizard is, maar helaas kan ik niet upgraden.

    De betreffende database is rond een optreden.
    Ik heb geprobeerd een back-up van de database te herstellen die ik wil kopiëren in een nieuwe database, maar zonder geluk.


    Antwoord 1, Autoriteit 100%

    1. Installeer Microsoft SQL Management Studio, die u gratis kunt downloaden van de website van Microsoft:

      versie 2008

      Microsoft SQL Management Studio 2008 is onderdeel van SQL Server 2008 Express met geavanceerde services

      versie 2012

      Klik op download knop en controleer ENU\x64\SQLManagementStudio_x64_ENU.exe

      versie 2014

      Klik op Download-knop en controleer MGMTStudio 64BIT\SQLManagementStudio_x64_ENU.exe

    2. Open Microsoft SQL Management Studio .

    3. Back-up originele database naar .bak bestand (DB – & GT; taak – & gt; back-up).
    4. Maak een lege database met nieuwe naam (kloon). Opmerking Opmerkingen hieronder, omdat dit optioneel is.
    5. Klik om de database te klonen en dialoogvenster Restauratie openen (zie afbeelding)
    6. Selecteer Apparaat en voeg het back-upbestand toe vanaf stap 3.
    7. Bestemming wijzigen in testdatabase
    8. Verander de locatie van databasebestanden, deze moet anders zijn dan het origineel. U kunt rechtstreeks in het tekstvak typen, voeg gewoon postfix toe. (OPMERKING: Volgorde is belangrijk. Selecteer het selectievakje en wijzig vervolgens de bestandsnamen.)
    9. Controleer WITH REPLACE en WITH KEEP_REPLICATION

    Antwoord 2, autoriteit 28%

    Klik met de rechtermuisknop op de database die u wilt klonen, klik op Tasks, klik op Copy Database.... Volg de wizard en je bent klaar.


    Antwoord 3, autoriteit 24%

    Je zou kunnen proberen de database los te koppelen, de bestanden naar een nieuwe naam te kopiëren bij een opdrachtprompt en vervolgens beide DB’s te koppelen.

    In SQL:

    USE master;
    GO 
    EXEC sp_detach_db
        @dbname = N'OriginalDB';
    GO
    

    Bij de opdrachtprompt (ik heb de bestandspaden vereenvoudigd omwille van dit voorbeeld):

    copy c:\OriginalDB.mdf c:\NewDB.mdf
    copy c:\OriginalDB.ldf c:\NewDB.ldf
    

    Opnieuw in SQL:

    USE master;
    GO
    CREATE DATABASE OriginalDB
        ON (FILENAME = 'C:\OriginalDB.mdf'),
           (FILENAME = 'C:\OriginalDB.ldf')
        FOR ATTACH;
    GO
    CREATE DATABASE NewDB
        ON (FILENAME = 'C:\NewDB.mdf'),
           (FILENAME = 'C:\NewDB.ldf')
        FOR ATTACH;
    GO
    

    Antwoord 4, autoriteit 8%

    Het bleek dat ik verkeerd had geprobeerd om een back-up te herstellen.

    In eerste instantie heb ik een nieuwe database en vervolgens geprobeerd om de back-up hier opnieuw aanvragen.
    Wat ik had moeten doen, en wat werkte op het einde, was het brengen van de te herstellen dialoogvenster en typ de naam van de nieuwe database op het gebied van bestemming.

    Dus, kortom, het herstellen van een back-up heeft de truc.

    Bedankt voor alle feedback en suggesties jongens


    Antwoord 5, autoriteit 5%

    Dit is het script dat ik gebruik. Een beetje lastig, maar het werkt. Getest op SQL Server 2012.

    DECLARE @backupPath nvarchar(400);
    DECLARE @sourceDb nvarchar(50);
    DECLARE @sourceDb_log nvarchar(50);
    DECLARE @destDb nvarchar(50);
    DECLARE @destMdf nvarchar(100);
    DECLARE @destLdf nvarchar(100);
    DECLARE @sqlServerDbFolder nvarchar(100);
    SET @sourceDb = 'db1'
    SET @sourceDb_log = @sourceDb + '_log'
    SET @backupPath = 'E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\Backup\' + @sourceDb + '.bak'    --ATTENTION: file must already exist and SQL Server must have access to it
    SET @sqlServerDbFolder = 'E:\DB SQL\MSSQL11.MSSQLSERVER\MSSQL\DATA\'
    SET @destDb = 'db2'
    SET @destMdf = @sqlServerDbFolder + @destDb + '.mdf'
    SET @destLdf = @sqlServerDbFolder + @destDb + '_log' + '.ldf'
    BACKUP DATABASE @sourceDb TO DISK = @backupPath
    RESTORE DATABASE @destDb FROM DISK = @backupPath
    WITH REPLACE,
       MOVE @sourceDb     TO @destMdf,
       MOVE @sourceDb_log TO @destLdf
    

    Antwoord 6, Autoriteit 3%

    Geen van de oplossingen die hier genoemd werkte voor mij -. Ik ben met behulp van SQL Server Management Studio 2014

    In plaats daarvan moest ik het vinkje uit het “Take staart-log backup voordat herstellen” checkbox in het scherm “Opties”: in mijn versie is standaard ingeschakeld en voorkomt dat de Restore operatie te voltooien.
    Na unchecking het, de Restore operatie verliep zonder problemen.


    Antwoord 7, Autoriteit 2%

    MS SQL Server 2012 gebruiken, moet u 3 basisstappen uitvoeren:

    1. eerste, genereer .sql-bestand met alleen de structuur van de bron DB

      • Klik met de rechtermuisknop op de bron DB en vervolgens Taken Dan GENEIDENDE scripts
      • Volg de wizard en sla de .sqlBestand lokaal
    2. Ten tweede, vervang de bron DB met de bestemming in de .sqlBestand

      • Klik met de rechtermuisknop op het bestemmingsbestand, selecteer Nieuwe query en CTRL-H of (EDIT - Zoeken en vervangen - Snel vervangen )
    3. Ten slotte, vul met gegevens

      • Klik met de rechtermuisknop op de bestemming DB en selecteer vervolgens TAKEN en Gegevens import
      • Data Source Drop Down Set in op ".NET Framework Data Provider voor SQL Server " + SET het Tekstveld van de verbinding String onder Gegevens Ex: Data Source=Mehdi\SQLEXPRESS;Initial Catalog=db_test;User ID=sa;Password=sqlrpwrd15
      • Doe hetzelfde met de bestemming
      • Controleer de tabel die u wilt overbrengen of selecteren naast "Bron: ..." om ze allemaal te controleren

    U bent klaar.


    Antwoord 8

    Als de database niet erg groot is, kunt u kijken naar de opdrachten 'Scriptdatabase' in SQL Server Management Studio Express, die zich in een contextmenu bevinden in de database-item zelf in de Explorer.

    U kunt kiezen wat allen naar script; U wilt natuurlijk de objecten en de gegevens. Je zult het hele script op een enkel bestand opslaan. Dan kunt u dat bestand gebruiken om de database opnieuw te maken; Zorg ervoor dat de USEopdracht bovenaan gebruiken is ingesteld op de juiste database.


    Antwoord 9

    In SQL Server 2008 R2, maak een back-up van de database als een bestand in een map.
    Kies vervolgens de optie Herstellen die in de map "Database" wordt weergegeven.
    Voer in de wizard de nieuwe naam in die u in de doeldatabase wilt.
    En kies FROM-bestand herstellen en gebruik het bestand dat u zojuist hebt gemaakt.
    Ik heb het gedaan en het was erg snel (mijn db was klein, maar toch)
    Pablo.


    Antwoord 10

    De oplossing, op basis van deze opmerking: https://stackoverflow.com/a/22409447/2399045 .
    Gewoon instellingen instellen: DB-naam, TEMP-map, DB-bestandenmap.
    En na het uitvoeren heeft u de kopie van DB met naam in "SourcedBname_Yyyy-MM-DD" -formaat.

    -- Settings --
    -- New DB name will have name = sourceDB_yyyy-mm-dd
    declare @sourceDbName nvarchar(50) = 'MyDbName';
    declare @tmpFolder nvarchar(50) = 'C:\Temp\'
    declare @sqlServerDbFolder nvarchar(100) = 'C:\Databases\'
    --  Execution --
    declare @sourceDbFile nvarchar(50);
    declare @sourceDbFileLog nvarchar(50);
    declare @destinationDbName nvarchar(50) = @sourceDbName + '_' + (select convert(varchar(10),getdate(), 121))
    declare @backupPath nvarchar(400) = @tmpFolder + @destinationDbName + '.bak'
    declare @destMdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + '.mdf'
    declare @destLdf nvarchar(100) = @sqlServerDbFolder + @destinationDbName + '_log' + '.ldf'
    SET @sourceDbFile = (SELECT top 1 files.name 
                        FROM sys.databases dbs 
                        INNER JOIN sys.master_files files 
                            ON dbs.database_id = files.database_id 
                        WHERE dbs.name = @sourceDbName
                            AND files.[type] = 0)
    SET @sourceDbFileLog = (SELECT top 1 files.name 
                        FROM sys.databases dbs 
                        INNER JOIN sys.master_files files 
                            ON dbs.database_id = files.database_id 
                        WHERE dbs.name = @sourceDbName
                            AND files.[type] = 1)
    BACKUP DATABASE @sourceDbName TO DISK = @backupPath
    RESTORE DATABASE @destinationDbName FROM DISK = @backupPath
    WITH REPLACE,
       MOVE @sourceDbFile     TO @destMdf,
       MOVE @sourceDbFileLog  TO @destLdf
    

    Antwoord 11

    Script gebaseerd op het antwoord van Joe (losmaken, bestanden kopiëren, beide bijvoegen).

    1. Voer Management Studio uit als beheerdersaccount.

    Het is niet nodig, maar het kan zijn dat de toegang geweigerd wordt bij het uitvoeren.

    1. Sql-server configureren voor execute xp_cmdshel
    EXEC sp_configure 'show advanced options', 1
    GO
    RECONFIGURE
    GO
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    RECONFIGURE
    GO
    
    1. Voer script uit, maar typ eerst uw db-namen in @dbNameen @copyDBNamevariabelen.
    USE master;
    GO 
    DECLARE @dbName NVARCHAR(255) = 'Products'
    DECLARE @copyDBName NVARCHAR(255) = 'Products_branch'
    -- get DB files
    CREATE TABLE ##DBFileNames([FileName] NVARCHAR(255))
    EXEC('
        INSERT INTO ##DBFileNames([FileName])
        SELECT [filename] FROM ' + @dbName + '.sys.sysfiles')
    -- drop connections
    EXEC('ALTER DATABASE ' + @dbName + ' SET OFFLINE WITH ROLLBACK IMMEDIATE')
    EXEC('ALTER DATABASE ' + @dbName + ' SET SINGLE_USER')
    -- detach
    EXEC('EXEC sp_detach_db @dbname = ''' + @dbName + '''')
    -- copy files
    DECLARE @filename NVARCHAR(255), @path NVARCHAR(255), @ext NVARCHAR(255), @copyFileName NVARCHAR(255), @command NVARCHAR(MAX) = ''
    DECLARE 
        @oldAttachCommand NVARCHAR(MAX) = 
            'CREATE DATABASE ' + @dbName + ' ON ', 
        @newAttachCommand NVARCHAR(MAX) = 
            'CREATE DATABASE ' + @copyDBName + ' ON '
    DECLARE curs CURSOR FOR 
    SELECT [filename] FROM ##DBFileNames
    OPEN curs  
    FETCH NEXT FROM curs INTO @filename
    WHILE @@FETCH_STATUS = 0  
    BEGIN
        SET @path = REVERSE(RIGHT(REVERSE(@filename),(LEN(@filename)-CHARINDEX('\', REVERSE(@filename),1))+1))
        SET @ext = RIGHT(@filename,4)
        SET @copyFileName = @path + @copyDBName + @ext
        SET @command = 'EXEC master..xp_cmdshell ''COPY "' + @filename + '" "' + @copyFileName + '"'''
        PRINT @command
        EXEC(@command);
        SET @oldAttachCommand = @oldAttachCommand + '(FILENAME = "' + @filename + '"),'
        SET @newAttachCommand = @newAttachCommand + '(FILENAME = "' + @copyFileName + '"),'
        FETCH NEXT FROM curs INTO @filename
    END
    CLOSE curs 
    DEALLOCATE curs
    -- attach
    SET @oldAttachCommand = LEFT(@oldAttachCommand, LEN(@oldAttachCommand) - 1) + ' FOR ATTACH'
    SET @newAttachCommand = LEFT(@newAttachCommand, LEN(@newAttachCommand) - 1) + ' FOR ATTACH'
    -- attach old db
    PRINT @oldAttachCommand
    EXEC(@oldAttachCommand)
    -- attach copy db
    PRINT @newAttachCommand
    EXEC(@newAttachCommand)
    DROP TABLE ##DBFileNames
    

    Antwoord 12

    U kunt gewoon een nieuwe database maken en vervolgens naar taken gaan, gegevens importeren en alle gegevens importeren uit de database die u wilt dupliceren naar de database die u zojuist hebt gemaakt.


    Antwoord 13

    Van SSMS:

    1 - Maak een back-up van de originele database naar een .BAK-bestand (your_source_db -> Task -> Back-up).

    2 - Klik met de rechtermuisknop op 'Databases' en 'Database herstellen'

    3 - Apparaat > ... (knop) > > toevoegen selecteer de uw_source_db.bak

    4 - Hernoem op het tabblad 'Algemeen' in het gedeelte 'Bestemming' in 'Database' uw_bron_db naar nieuwe_naam_db

    5 - Vink op het tabblad 'Bestanden' de optie 'Alle bestanden naar map verplaatsen' aan,

    • Hernoem in de kolom 'Herstellen als' de twee lignes om consistentie te behouden met new_name_db (.mdf, _log.ldf)

    6 - Vink op het tabblad 'Opties' in het gedeelte 'Opties voor herstellen' twee eerste opties aan ('Overschrijven...', 'Behouden...') en voor 'Herstelstatus': 'HERSTEL MET HERSTEL'

    • Zorg er ook voor dat de opties in het gedeelte 'Tail-Log back-up' niet zijn aangevinkt om te voorkomen dat de bron-db in de 'herstelstatus' blijft!

    Antwoord 14

    Een andere manier die het lukt door gebruik te maken van import/export wizard, maak eerst een lege database aan, kies dan de bron die uw server is met de brondatabase, en kies dan in de bestemming hetzelfde server met de doeldatabase (gebruik de lege database die u eerst hebt gemaakt), en druk vervolgens op voltooien

    Het zal alle tabellen maken en alle gegevens overbrengen naar de nieuwe database,

    Previous article Hoe krijg ik toegang tot mijn openbare SSH-sleutel?
    Next article Wat is de standaard gebruikersnaam en wachtwoord in Tomcat?

    Other episodes

    两个鬼故事余额宝存一万免费起名工具大全官道色戒雨滴桌面别墅大门牌匾起名字富贵起名叶子歌词廖姓男孩起名瘦金书对集团公司起名给牛年宝宝起名字大全2021黄字起名字男孩名字憨豆先生的黄金周烙锅店起名字卖酒的商贸公司起名起合作社名称大全和土有关的字 起名英雄联盟背景故事超品巫师李韶九石姓起名女孩养生茶加盟天下歌词庆余年电视剧全集免费2018女宝宝起名免费激活英文荣字起名女孩宝宝取名起名100分社区起名全世界都不如你电视剧免费观看少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

    两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化