Jeśli baza danych jest tylko do odczytu, można łatwo zidentyfikować jej stan w sys.databases lub SSMS. Powszechnie wiadomo, że nie można aktualizować danych w bazie danych tylko do odczytu. W tym artykule dowiemy się, jak rozwiązać ten problem i naprawić.
Dwie opcje
Możemy albo użyć SQL Server Management Studio, tj. Skrypt SSMS lub T-SQL do konwersji bazy danych tylko do odczytu na bazę danych do odczytu i zapisu. Aby lepiej zrozumieć te opcje, pozwól nam
- Utwórz bazę danych
- Utwórz w nim tabele
- Dodaj rekordy do tabeli
- Ustaw bazę danych jako tylko do odczytu
- Spróbuj dodać rekordy do tej samej tabeli
- Przejrzyj komunikat o błędzie
- Przekonwertuj bazę danych z powrotem na tryb do odczytu i zapisu
Przygotuj bazę danych
Od twojego SQL Server studio zarządzania, połącz się ze swoim SQL server, kliknij prawym przyciskiem węzeł „Baza danych”, a następnie wybierz opcję „Nowa baza danych”. Naciśnij Ok po wpisaniu nazwy bazy danych. Możesz również użyć skryptu T-SQL, jak pokazano w poniższym przykładzie:
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
Utwórz tabelę z SSMS, wybierając bazę danych, kliknij prawym przyciskiem myszy węzeł „Tabele”, a następnie wskaż „Nowy” i kliknij opcję „Tabela…”. Wprowadź nazwę kolumny i typy danych, a następnie zapisz pod nazwą tabeli. Możesz użyć poniższego zapytania, aby utworzyć tabelę:
USE [DataNumen] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Table1]( [Col1] [nchar](10) NULL ) ON [PRIMARY] GO
Dodaj rekordy do tabeli, używając następującego zapytania:
Insert into [dbo].[Table1] values ('Testvalue')
The result window of SSMS will show the following message: (1 row(s) affected)
Korzystanie z SQL Server Management Studio, kliknij prawym przyciskiem myszy bazę danych, a następnie wybierz opcję „Właściwości”. Na stronie Właściwości bazy danych w sekcji „Opcje” ustaw opcję „Tylko do odczytu bazy danych” z „Prawda” na „Fałsz”. Możesz także przełączyć bazę danych na tylko do odczytu za pomocą skryptu TSQL, jak pokazano poniżej:
USE [master] GO ALTER DATABASE [DataNumen] SET READ_ONLY WITH NO_WAIT GO
Widać było, że SSMS teraz pokaże stan „Tylko do odczytu” obok nazwy bazy danych.
Teraz spróbujmy wstawić nowy rekord do tabeli.
Insert into [dbo].[Table1] values ('Testvalue2')
W oknie wyników pojawi się następujący komunikat o błędzie.
Msg 3906, Level 16, State 1, Line 12 Failed to update database "DataNumen" because the database is read-only.
Przywróć stan bazy danych do odczytu i zapisu na stronie Właściwości bazy danych i ustaw opcję „Tylko do odczytu bazy danych” z „Fałsz” na „Prawda” lub wykonaj następujący skrypt:
USE [master] GO ALTER DATABASE [DataNumen] SET READ_WRITE WITH NO_WAIT GO
Teraz podczas próby dodania rekordu pojawia się komunikat o błędzie „Nie udało się zaktualizować bazy danych”DataNumen„Ponieważ baza danych jest tylko do odczytu” zniknie. Wszyscy wiemy, że kopie zapasowe baz danych nam w tym pomagają stały SQL Server bazy danych. Jednak kopia zapasowa bazy danych tylko do odczytu przywróci bazę danych w trybie tylko do odczytu, a nie w trybie do odczytu i zapisu.
Wprowadzenie autora:
Neil Varley jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym Odzyskiwanie programu Outlook i doskonałe oprogramowanie do odzyskiwania. po więcej informacji odwiedź www.datanumen.com