Pokud je databáze pouze pro čtení, můžete její stav snadno identifikovat ze sys.databases nebo ze SSMS. Známým faktem je, že nelze aktualizovat data v databázi pouze pro čtení. V tomto článku se naučíme, jak tento problém vyřešit a opravit.
Dvě možnosti
Můžeme použít buď SQL Server Management Studio, tj. skript SSMS nebo T-SQL pro převod databáze pouze pro čtení na databázi pro čtení a zápis. Abychom těmto možnostem lépe porozuměli, pojďme
- Vytvořte databázi
- Vytvořte v něm tabulky
- Přidejte záznamy do tabulky
- Vytvořte databázi jako pouze pro čtení
- Zkuste přidat záznamy do stejné tabulky
- Zkontrolujte chybovou zprávu
- Převeďte databázi zpět do režimu čtení a zápisu
Připravte databázi
Z vašeho SQL Server manažerské studio, připojte se k vašemu SQL server, klikněte pravým tlačítkem myši na uzel „Databáze“ a poté vyberte možnost „Nová databáze“. Po zadání názvu databáze stiskněte OK. Můžete také použít skript T-SQL, jak je znázorněno v příkladu níže:
CREATE DATABASE [DataNumen] CONTAINMENT = NONE ON PRIMARY ( NAME = N'DataNumen', FILENAME = N'E:\Program Files\MSSQL12.MSSQLSERVER\MSSQL\DATA\DataNumen.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'DataNumen_log', FILENAME = N'E:\Program Files\MSSQL12.MSSQLSERVER\MSSQL\DATA\DataNumen_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO
Vytvořte tabulku z SSMS výběrem databáze, klikněte pravým tlačítkem na uzel „Tabulky“ a poté ukažte na „Nový“ a klikněte na možnost „Tabulka…“. Zadejte název sloupce a datové typy a poté uložte s názvem tabulky. K vytvoření tabulky můžete použít následující dotaz:
USE [DataNumen] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Table1]( [Col1] [nchar](10) NULL ) ON [PRIMARY] GO
Přidejte záznamy do tabulky pomocí následujícího dotazu:
Insert into [dbo].[Table1] values ('Testvalue')
The result window of SSMS will show the following message: (1 row(s) affected)
Použití SQL Server Management Studio, klikněte pravým tlačítkem na databázi a vyberte možnost „Vlastnosti“. Na stránce Vlastnosti databáze v části „Options“ nastavte možnost „Database Read-Only“ z „True“ na „False“. Databázi můžete také přepnout do režimu pouze pro čtení pomocí skriptu TSQL, jak je uvedeno níže:
USE [master] GO ALTER DATABASE [DataNumen] SET READ_ONLY WITH NO_WAIT GO
Mohli jste vidět, že SSMS nyní bude u názvu databáze zobrazovat stav „Pouze pro čtení“.
Nyní zkusme do tabulky vložit nový záznam.
Insert into [dbo].[Table1] values ('Testvalue2')
V okně výsledků se zobrazí následující chybová zpráva.
Msg 3906, Level 16, State 1, Line 12 Failed to update database "DataNumen" because the database is read-only.
Vraťte stav databáze na čtení a zápis pomocí stránky Vlastnosti databáze a nastavte volbu z „Databáze jen pro čtení“ z „False“ na „True“ nebo spusťte následující skript:
USE [master] GO ALTER DATABASE [DataNumen] SET READ_WRITE WITH NO_WAIT GO
Nyní, když se pokusíte přidat záznam, zobrazí se chybová zpráva „Nepodařilo se aktualizovat databázi“DataNumen„protože databáze je pouze pro čtení“ zmizí. Všichni víme, že nám k tomu pomáhají zálohy databází opravit SQL Server databází. Záloha databáze pouze pro čtení však obnoví databázi v režimu pouze pro čtení a nikoli v režimu pro čtení a zápis.
Úvod autora:
Neil Varley je odborníkem na obnovu dat DataNumen, Inc., která je světovým lídrem v oblasti technologií pro obnovu dat, včetně Obnova aplikace Outlook a excelové softwarové produkty pro obnovu. Pro více informací navštivte www.datanumen.com