Publikacje oznaczone posty

Sprawdzenie modeli odtwarzania baz danych w MS SQL Server 2000-2008.

W MS SQL Server od wersji 2000 zostały wprowadzone modele odtwarzania, które pomagają w planowaniu kopii bezpieczeństwa.

Dostępne są trzy modele odtwarzania:

• Pełny (Full recovery)
• Rejestracja masowa (Bulk-logged recovery)
• Prosty (Simple recovery)

Komenda DATABASEPROPERTYEX zwraca  model odtwarzania dla podanej bazy:

Select DATABASEPROPERTYEX ('nazwa_bazy_danych', 'recovery')

W odpowiedzi system zwróci jedną nazwę z trzech modeli:

  • FULL,
  • BULK_LOGGED,
  • SIMPLE.

Poniżej przedstawiam skrypt wyświetlający modele dla wszystkich baz danych umieszczonych na serwerze.

Testowany skrypt był na wersjach SQL Server: 2000, 2005 i 2008. Na 2008 R2 nie testowałem.

------------------------------------------------------
-- Script     : Recorvery_model.sql
-- Author     : Dariusz Brejnak aka `DBSoft (c) 2010
-- Created    : 2010-08-27
-- SQL Version: 2000, 2005, 2008
-----------------------------------------------------
USE master
GO

DECLARE @DBName varchar(255)

DECLARE DB_Cursor CURSOR FOR
SELECT
DATABASE_NAME   = db_name(s.dbid)
FROM
[master].[dbo].[sysdatabases] s
GROUP BY s...
Czytaj dalej

Jak po numerze builda MS SQL Servera sprawdzić jego zawartość?

Na stronie blogu http://sqlserverbuilds.blogspot.com/#sql2008r2 umieszczona została nieoficjalna lista przedstawiająca dla wybranego builda wersję, edycję, datę updatu, hotfix, KB od wersji SQL Server 7.0 do SQL Server 2008R2.

RTM (Gold, no SP) SP1 SP2 SP3 SP4
SQL Server 2008 R2
codename Kilimanjaro
10.50.1600.1
SQL Server 2008
codename Katmai
10.00.1600.22 10.00.2531
SQL Server 2005
codename Yukon
9.00.1399.06 9.00.2047 9.00.3042 9.00.4035
SQL Server 2000
codename Shiloh
8.00.194 8.00.384 8.00.532 8.00.760 8.00.2039
SQL Server 7.0
codename Sphinx
7.00.623 7.00.699 7.00.842 7.00.961 7.00.1063
Czytaj dalej

Przenoszenie logins, default databases, server roles pomiędzy MS SQL Server 2000.

Po przeniesieniu z jednej instancji na drugą baz danych w MS SQL Server 2000 należy wykonąc kolejne czynności:

1. Przeniesienie do Security: Logins, Server Roles, User Mapping.

Na stronie Microsoftu „How to transfer logins and passwords between instances of SQL Server” znajduje się artykuł na ten temat.

Opisane są tam dwie metody:

metoda 1: przedstawia dwie procedury składowane sp_hexadecimal i sp_help_revlogin. Uruchamia się skrypt z poziomu bazy master.

Skrypt ten generuje kod tworzący loginy. Przystosowany jest on do przenoszenia loginów z wersji 2000 na wersję 2000 !!!

metoda 2: przedstawia dwie procedury składowane sp_hexadecimal i sp_help_revlogin_2000_to_2005. Uruchamia się skrypt z poziomu bazy master.

Skrypt ten generuje kod tworzący loginy, defaultowe bazy i role. Przystosowany jest on do przenoszenia loginów z wersji 2000 na wersję 2005 !!!

Po odpowiedniej modifikacji tych dwóch skryptów stworzyłem:

metoda 3: przedstawia dwie procedury składowane sp_hexadecimal i sp_help_revlogin_2000_to_2000_DBrejnak. Uruchamia się skrypt z poziomu bazy master.

Skrypt ten generuje kod tworzący loginy, defaultowe bazy i role...

Czytaj dalej

Przenoszenie danych pomiędzy MS SQL Server 2000

Ostatnio musiałem przenieść całą zawartość SQL Servera 2000 na inną maszyne. Od samego początku napotykałem problemy ale dzięki pomocy uzyskanej na forum Codeguru.pl i GoldenLine.pl zebrałem odpowiednią wiedzę, którą chce przedstawić poniżej.

1. Wykonanie kopii zapasowej dziennika transakcji za pomocą polecenia:


BACKUP LOG NazwaBazyDanych TO DISK='C:\NazwaBazyDanych_LogBackup.trn'

Wykonujemy to dla wszystkich baz danych umieszczonych na serwerze.
(Odpowiedni skrypt, który automatycznie wykonuje backup logu po „dopracowaniu” przedstawię wkrótce w osobnej poradzie.

2. Wykonanie kopii zapasowej bazy danych.
W celu wykonania kopii zapasowych bazy danych można użyć polecenia:

BACKUP DATABASE NazwaBazyDanych TO  DISK = C:\NazwaBazyDanych_Backup.bak'   WITH NOFORMAT, INIT,  NAME = N'NazwaBazyDanych - Full Database Backup',  SKIP, NOREWIND, NOUNLOAD,  STATS = 100;

Osobiście polecam użycie skryptu, który automatycznie wykona backup wszystkich baz danych zawartych na serwerze.

Skrypt taki napisałem , jego opis jak i kod umieściłem w poradzie:

Jak wykonać automatyczny backup i „zip” baz w MS SQL Server 2000 ?

(Wersja dla MS SQL Server 2005/2008...

Czytaj dalej

Automatyczny backup i zip baz w MS SQL Server 2000

Przedstawiam skrypt,, który automatycznie wykonuje backup wszystkich baz danych umieszczonych w aktualnej instancji SQL Server 2000.

Nazwy wszystkie kopii składają się z prefixu (w tym wypadku używam nazwy instancji serwera), roku, miesiąca i dnia wykonania kopi oraz z samej nazwy bazy danych.

Dodatkowo stworzyłem fragment, który jest odpowiedzialny za wykonanie pakowania, ( za pomocą zipa, rara, 7zipa itp – odpowiednią komendę podaje się w zmiennej tekstowej) backapów baz danych.

W zmiennej @choice ustawia się odpowiednie parametry dotyczące sposobu wykonywania kopii, i tak dla:

0 – Wykonywany jest backup, który jest pakowany a następnie pliki *.bak są zakasowywane (opcja oszczędzająca miejsce na dysku)

1 – Wykonywany jest backup, który jest pakowany, pliki *.bak nie są kasowane (podwójne zabezpieczenie)

2 – Wykonywany jest tylko sam backup. Pakowanie nie jest wykonywane.

W zmiennej @VirtualPath ustawiamy ścieżkę docelową składowania backapu.

W zmiennej @Prefix ustawiamy przedrostek do nazwy kopii.

W zmiennej @CommandArchive ustawiamy komendę uruchamiającą archiwizator

Z uwagi na to, że skrypt używa „xp_cmdshell” może on być uruchomiony ...

Czytaj dalej

Dynamiczna budowa kodu a znak ‚

Budując kod T-SQL dynamicznie wielokrotnie można spotkać się z problemem znaku ‚.

Np. mając do dyspozycji fragment kodu z „Jak podłączyć bazy typu dbf (dBase) do MS SQL Server ?”

SELECT Pole_1, Pole_2, ..., Pole_n
FROM OPENROWSET('MSDASQL','Driver={Microsoft dBASE Driver (*.dbf)};DBQ=C:\Temp','SELECT * FROM BazaDBF')

chcąc np. dynamicznie zmieniać ścieżkę C:\Temp należało by w zmiennej tekstowej użyć znaku ‚, ale przecież znak ten rozpoczyna i kończy ciąg tekstowy.

Należy zastosować funkcję char(), która zwraca znak o odpowiednim numerze. I Tak nasz znak ‚ to char(39).

declare @cmd varchar(500);
declare @pp varchar(20);
set @pp='C:\Temp' 

set @cmd = 'INSERT INTO Baza (POLE_1, POLE_2, POLE_3) 
            SELECT POLE_1, POLE_2, POLE_3
            FROM OPENROWSET('+<strong>CHAR(39)</strong>+'MSDASQL'+<strong>CHAR(39)</strong>+','+
            <strong>CHAR(39)</strong>+'Driver={Microsoft dBASE Driver (*.dbf)};DBQ='+@pp+<strong>CHAR(39)</strong>+','+ 
            <strong>CHAR(39)</strong>+'SELECT * FROM BazaDBF'+<strong>CHAR(39)</strong>+')'                 

exec sys.sp_sqlexec @cmd
 
Czytaj dalej
DBBS