środa, 23 marca 2011

Internals Viewer

To jak dane są przechowywane w pliku możemy oglądać przy pomocy widoków lub poleceń DBCC, niestety gdy jest tego sporo bardzo szybko możemy się zniechęcić nawet ze względu na brak płynnego przechodzenia od strony do strony. Z jednej strony brakuje narzędzia w Microsoft SQL Server Management Studio do takiego przeglądania z drugiej po co 99% użytkownikom taka wiedza i narzędzie.
Dla tych bardziej ciekawskich jest darmowy program Internals Viewer do pobrania ze strony http://www.sqlinternalsviewer.com/
Program pozwala nam na graficzne przeglądanie stron z uwzględnieniem ich typów. Wyświetla allocation map, fizyczny układ tabeli i indeksu.
W przejrzysty sposób pokazuje strony danych z możliwością przeskakiwania na poszczególne offsety.
Dodatkowym plusem jest to, że instaluje się jako plugin do SSMS.


środa, 16 marca 2011

SQLDiag

SQL Server od wersji 2005 wyposażył administratora w wiele narządzi do rozwiązywania problemów z wydajnością, w przypadku występowania problemów możemy sprawdzić je wszystkie po kolei albo zrobić sobie zrzut wszystkich informacji. Dokładnie tak robi pomoc techniczna firmy Microsoft, każe uruchomić skrypt i wysłać dane wygenerowane.
We wcześniejszych wersjach SQL Server używany był program PSSDiag od wersji 2005 mamy do dyspozycji SQLDiag możemy go znaleźć w folderze C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SQLDiag.exe.
Programu używamy przy pomocy konsoli, składnia programu

sqldiag
     { [/?] }
     |
     { [/I configuration_file]
       [/O output_folder_path]
       [/Psupport_folder_path]
       [/Noutput_folder_management_option]
       [/Mmachine1 [ machine2machineN]| @machinelistfile]
       [/Cfile_compression_type]
       [/B [+]start_time]
       [/E [+]stop_time]
       [/ASQLdiag_application_name]
       [/T { tcp [ ,port ] | np | lpc | via } ]
       [/Q] [/G] [/R] [/U] [/L] [/X] }
     |
     { [START | STOP | STOP_ABORT] }
     |
     { [START | STOP | STOP_ABORT] /ASQLdiag_application_name }

Przy pomocy SQLDiag możemy zbierać informacje z
Dzienników zdarzeń systemu
Liczników wydajności
SQL Server Profiler
Dzienników błędów SQL Server
Informacji o blokowniach
i wielu innych

Standardowe uruchomienie bez parametrów wygeneruje folder SQLDIAG z informacjami, pracę programu można zatrzymać Crtl+c, w folderze znajdzie się też użyty plik konfiguracyjny.




Przy użyciu przełącznika /I możemy wskazać plik XML z dokładną konfiguracją, kombinacją przełączników /B/E możemy ustawić czas działania programu dzięki czemu możemy wyśledzić przyczyny problemów powstających w określonym momencie lub ustawić go jako serwis

środa, 9 marca 2011

TableDiff

Środowisko SQL Server kryje wiele ciekawych programów, jednym z nich jest TableDiff.exe
Standardowa ścieżka to C:\Program Files\Microsoft SQL Server\100\COM\tablediff.exe
Dzięki temu programowi możemy w bardzo szybki sposób porównać dane w dwóch tabelach, które mogą być na niepołączonych ze sobą serwerach. Na wyjściu możemy otrzymać skrypt SQL do „wyrównania” danych, szybkie wyniki statystyczne lub  informacje w tabeli.
Tworzymy sobie tabelę

USE test
GO
CREATE TABLE test_diff (id INT IDENTITY(1,1) PRIMARY KEY,
                                   tekst VARCHAR(100))
GO

INSERT test_diff
SELECT NEWID()
GO 10000


Tworzymy tabelkę do porównania i zmieniamy trochę dane w pierwszej

CREATE TABLE test_diff2 (id INT IDENTITY(1,1) PRIMARY KEY,
                                   tekst VARCHAR(100))

GO

INSERT test_diff2
SELECT tekst FROM test_diff

GO

INSERT test_diff
SELECT NEWID()
GO 100

UPDATE test_diff
SET tekst =NEWID()
WHERE id BETWEEN 138 AND 238

W konsoli CMD wpisujemy

"C:\Program Files\Microsoft SQL Server\100\COM\tablediff.exe"
 -sourceserver "KOMPUTER\ROKU" -sourcedatabase "test" -sourceschema "dbo" -sour
cetable "test_diff" -destinationserver "KOMPUTER\ROKU" -destinationdatabase "te
st" -destinationschema "dbo" -destinationtable "test_diff2" -dt -f "C:\Users\rku
balski\Desktop\test.sql"

Enter i mamy wynik

Microsoft (R) SQL Server Replication Diff Tool
Copyright (c) 2008 Microsoft Corporation

User-specified agent parameter values:
-sourceserver KOMPUTER\ROKU
-sourcedatabase test
-sourceschema dbo
-sourcetable test_diff
-destinationserver KOMPUTER\ROKU
-destinationdatabase test
-destinationschema dbo
-destinationtable test_diff2
-dt
-f C:\Users\rkubalski\Desktop\test.sql

Table [test].[dbo].[test_diff] on KOMPUTER\ROKU and Table [test].[dbo].[test_di
ff2] on KOMPUTER\ROKU have 201 differences.
Fix SQL written to C:\Users\rkubalski\Desktop\test.sql.
Err     id      Col
Mismatch        138     tekst
<ciach>
Mismatch        238     tekst
Src. Only       10001
<ciach>
Src. Only       10100
The requested operation took 0,4190239 seconds.

0,4 sekundy to dobry czas , przy wyszukiwaniu w tabelach mających po kilka milionów rekordów czasy są rewelacyjne.
W wyniku działania programu dostaliśmy plik test.sql

-- Host: KOMPUTER\ROKU
-- Database: [test]
-- Table: [dbo].[test_diff2]
SET IDENTITY_INSERT [dbo].[test_diff2] ON
UPDATE [dbo].[test_diff2] SET [tekst]=N'FC138198-9D17-4103-8E88-322423BDAB4D' WHERE [id] = 138
<ciach>
UPDATE [dbo].[test_diff2] SET [tekst]=N'902A840C-72CE-4523-8130-A75C92CC069E' WHERE [id] = 238
INSERT INTO [dbo].[test_diff2] ([id],[tekst]) VALUES (10001,N'C6D720B8-8FC4-4DEF-B16D-98EB8729C79C')
<ciach>
INSERT INTO [dbo].[test_diff2] ([id],[tekst]) VALUES (10100,N'C902165D-E386-4266-BDD8-2D0C3EA3C8F6')
SET IDENTITY_INSERT [dbo].[test_diff2] OFF

Pełna składnia programu

tablediff
[ -? ] |
{
        -sourceserversource_server_name[\instance_name]
        -sourcedatabasesource_database-sourcetablesource_table_name
    [ -sourceschemasource_schema_name ]
    [ -sourcepasswordsource_password ]
    [ -sourceusersource_login ]
    [ -sourcelocked ]
        -destinationserverdestination_server_name[\instance_name]
        -destinationdatabasesubscription_database-destinationtabledestination_table
    [ -destinationschemadestination_schema_name ]
    [ -destinationpassworddestination_password ]
    [ -destinationuserdestination_login ]
    [ -destinationlocked ]
    [ -blarge_object_bytes ]
    [ -bfnumber_of_statements ]
    [ -c ]
    [ -dt ]
    [ -ettable_name ]
    [ -f [ file_name ] ]
    [ -ooutput_file_name ]
    [ -q ]
    [ -rcnumber_of_retries ]
    [ -riretry_interval ]
    [ -strict ]
    [ -tconnection_timeouts ]
}

niedziela, 6 marca 2011

SAC droga do szybkiej konfiguracji

Duża ilość serwerów to duży problem, szczególnie nużąca jest faza konfiguracji, jeżeli tą sama czynność musimy powtórzyć na dwudziestu lub więcej serwerach. Ustawianie po kolei silnika bazy, report service, browse service, agenta sql, protokołów sieciowych etc. jest ciekawym zajęciem ale tylko za pierwszym razem.
Z pomocą przychodzi nam niepozorny program SAC.EXE, który jest konsolą SQL SERVER AREA CONFIGURATION, w standardowej instalacji można go znaleźć w folderze C:\Program Files\Microsoft SQL Server\90\Shared\
Pozwala on na eksportowanie i importowanie konfiguracji do pliku dzięki odpowiednim przełącznikom (brak przełącznika kopiuje wszystkie ustawienia)


DE
import/eksport ustawień silnika bazy
AS
import/eksport ustawień analysis services
RS
import/eksport ustawień reporting services
IS
import/eksport ustawień integration services
NS
import/eksport ustawień notification services
AG
import/eksport ustawień SQL server agent
BS
import/eksport ustawień SQL browse service
FT
import/eksport ustawień full-text search
F
import/eksport ustawień area configuration
N
import/eksport ustawień protokołów sieciowych
T
import/eksport ustawień serwisów systemowych





Wybieramy co chcemy skopiować, robimy eksport do pliku, ewentualnie edytujemy powstałego xmla i importujemy do następnego serwera

xp_cmdshell '"C:\Program Files\Microsoft SQL Server\90\Shared\SAC.exe" OUT c:\rk_pliczek.xml -i nowy -F'

output
-----------------------------------------------------------------------------------------
Exporting surface area settings for Analysis Services instance SERWER\NOWY...Started
Exporting surface area settings for Analysis Services instance SERWER\NOWY...Complete
Exporting surface area settings for Database Engine instance SERWER\NOWY...Started
Exporting surface area settings for Database Engine instance SERWER\NOWY...Complete
Exporting surface area settings for Reporting Services instance SERWER\NOWY...Started
Exporting surface area settings for Reporting Services instance SERWER\NOWY...Complete
NULL
Plik możemy wgrać na inny serwer

xp_cmdshell '"C:\Program Files\Microsoft SQL Server\90\Shared\SAC.exe" IN c:\rk_pliczek.xml –S INNY -F'

output
-----------------------------------------------------------------------------------------
Importing surface area settings for Analysis Services instance INNY\MSSQLSERVER...Started
Importing surface area settings for Analysis Services instance INNY\MSSQLSERVER...Complete
Importing surface area settings for Database Engine instance INNY\MSSQLSERVER...Started
Importing surface area settings for Database Engine instance INNY\MSSQLSERVER...Complete
Importing surface area settings for Reporting Services instance INNY\MSSQLSERVER...Started
Importing surface area settings for Reporting Services instance INNY\MSSQLSERVER...Complete



Pełna składnia polecenia

C:\Program Files\Microsoft SQL Server\90\Shared>sac /?
Imports and exports SQL Server 2005 surface area settings.
  sac {in | out} filename [-S computer_name]
      [-U SQL_login [-P SQL_password]]
      [-i instance_name ]
      [-DE] [-AS] [-RS] [-IS] [-NS] [-AG] [-BS] [-FT]
      [-F] [-N]  [-T]  [-O]
      [-H | -?]
  in               Import the surface area settings from a file.
  out              Export the surface area configuration settings
                   from an instance to a file.
  filename         Full path of the import or export file.
  -S computer_name Name of a remote computer. Default is local
                   computer.
  -U SQL_login     SQL Server Authentication login for the Database
                   Engine connection. Default is Windows
                   Authentication.
  -P SQL_password  Password for SQL_login.
  -i instance_name SQL Server instance to run sac against. Default
                   is all instances on the specified computer.
  -DE              Import or export Database Engine settings.
  -AS              Import or export Analysis Services settings.
  -RS              Import or export Reporting Services settings.
  -IS              Import or export Integration Services settings.
  -NS              Import or export Notification Services settings.
  -AG              Import or export SQL Server Agent settings.
  -BS              Import or export the SQL Browse service settings.
  -FT              Import or export the Full-Text Search service
                   settings.
  -F               Import or export the state of features.
  -N               Import or export the state of network protocols.
  -T               Import or export the state of Windows services.
  -O               Name of the file that receives command-line output.
  -H | -?          Display command syntax. Other arguments are
                   ignored.

Niestety w SQL Server 2008 stwierdzono, że SAC jest niepotrzebny.