Różnice między wybraną wersją a wersją aktualną.
| Nowa wersja | Poprzednia wersja | ||
|
mssql [2016/06/23 14:21] pawel utworzono |
mssql [2023/05/12 14:27] (aktualna) admin |
||
|---|---|---|---|
| Linia 1: | Linia 1: | ||
| - | ====== MS SQL ====== | + | ======= MS SQL ======= |
| + | ===== Odtwarzanie bazy danych w przypadku błędów ===== | ||
| + | {{::restore.png?800|}} | ||
| + | |||
| + | ===== Eksportowanie użytkownika serwera ===== | ||
| + | |||
| + | skrypt ze strony https://support.microsoft.com/pl-pl/help/918992/how-to-transfer-logins-and-passwords-between-instances-of-sql-server | ||
| + | <code> | ||
| + | USE master | ||
| + | GO | ||
| + | IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL | ||
| + | DROP PROCEDURE sp_hexadecimal | ||
| + | GO | ||
| + | CREATE PROCEDURE sp_hexadecimal | ||
| + | @binvalue varbinary(256), | ||
| + | @hexvalue varchar (514) OUTPUT | ||
| + | AS | ||
| + | DECLARE @charvalue varchar (514) | ||
| + | DECLARE @i int | ||
| + | DECLARE @length int | ||
| + | DECLARE @hexstring char(16) | ||
| + | SELECT @charvalue = '0x' | ||
| + | SELECT @i = 1 | ||
| + | SELECT @length = DATALENGTH (@binvalue) | ||
| + | SELECT @hexstring = '0123456789ABCDEF' | ||
| + | WHILE (@i <= @length) | ||
| + | BEGIN | ||
| + | DECLARE @tempint int | ||
| + | DECLARE @firstint int | ||
| + | DECLARE @secondint int | ||
| + | SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) | ||
| + | SELECT @firstint = FLOOR(@tempint/16) | ||
| + | SELECT @secondint = @tempint - (@firstint*16) | ||
| + | SELECT @charvalue = @charvalue + | ||
| + | SUBSTRING(@hexstring, @firstint+1, 1) + | ||
| + | SUBSTRING(@hexstring, @secondint+1, 1) | ||
| + | SELECT @i = @i + 1 | ||
| + | END | ||
| + | |||
| + | SELECT @hexvalue = @charvalue | ||
| + | GO | ||
| + | |||
| + | IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL | ||
| + | DROP PROCEDURE sp_help_revlogin | ||
| + | GO | ||
| + | CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS | ||
| + | DECLARE @name sysname | ||
| + | DECLARE @type varchar (1) | ||
| + | DECLARE @hasaccess int | ||
| + | DECLARE @denylogin int | ||
| + | DECLARE @is_disabled int | ||
| + | DECLARE @PWD_varbinary varbinary (256) | ||
| + | DECLARE @PWD_string varchar (514) | ||
| + | DECLARE @SID_varbinary varbinary (85) | ||
| + | DECLARE @SID_string varchar (514) | ||
| + | DECLARE @tmpstr varchar (1024) | ||
| + | DECLARE @is_policy_checked varchar (3) | ||
| + | DECLARE @is_expiration_checked varchar (3) | ||
| + | |||
| + | DECLARE @defaultdb sysname | ||
| + | |||
| + | IF (@login_name IS NULL) | ||
| + | DECLARE login_curs CURSOR FOR | ||
| + | |||
| + | SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM | ||
| + | sys.server_principals p LEFT JOIN sys.syslogins l | ||
| + | ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa' | ||
| + | ELSE | ||
| + | DECLARE login_curs CURSOR FOR | ||
| + | |||
| + | |||
| + | SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM | ||
| + | sys.server_principals p LEFT JOIN sys.syslogins l | ||
| + | ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name | ||
| + | OPEN login_curs | ||
| + | |||
| + | FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin | ||
| + | IF (@@fetch_status = -1) | ||
| + | BEGIN | ||
| + | PRINT 'No login(s) found.' | ||
| + | CLOSE login_curs | ||
| + | DEALLOCATE login_curs | ||
| + | RETURN -1 | ||
| + | END | ||
| + | SET @tmpstr = '/* sp_help_revlogin script ' | ||
| + | PRINT @tmpstr | ||
| + | SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */' | ||
| + | PRINT @tmpstr | ||
| + | PRINT '' | ||
| + | WHILE (@@fetch_status <> -1) | ||
| + | BEGIN | ||
| + | IF (@@fetch_status <> -2) | ||
| + | BEGIN | ||
| + | PRINT '' | ||
| + | SET @tmpstr = '-- Login: ' + @name | ||
| + | PRINT @tmpstr | ||
| + | IF (@type IN ( 'G', 'U')) | ||
| + | BEGIN -- NT authenticated account/group | ||
| + | |||
| + | SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']' | ||
| + | END | ||
| + | ELSE BEGIN -- SQL Server authentication | ||
| + | -- obtain password and sid | ||
| + | SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) ) | ||
| + | EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT | ||
| + | EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT | ||
| + | |||
| + | -- obtain password policy state | ||
| + | SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name | ||
| + | SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name | ||
| + | |||
| + | SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']' | ||
| + | |||
| + | IF ( @is_policy_checked IS NOT NULL ) | ||
| + | BEGIN | ||
| + | SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked | ||
| + | END | ||
| + | IF ( @is_expiration_checked IS NOT NULL ) | ||
| + | BEGIN | ||
| + | SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked | ||
| + | END | ||
| + | END | ||
| + | IF (@denylogin = 1) | ||
| + | BEGIN -- login is denied access | ||
| + | SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name ) | ||
| + | END | ||
| + | ELSE IF (@hasaccess = 0) | ||
| + | BEGIN -- login exists but does not have access | ||
| + | SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name ) | ||
| + | END | ||
| + | IF (@is_disabled = 1) | ||
| + | BEGIN -- login is disabled | ||
| + | SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE' | ||
| + | END | ||
| + | PRINT @tmpstr | ||
| + | END | ||
| + | |||
| + | FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin | ||
| + | END | ||
| + | CLOSE login_curs | ||
| + | DEALLOCATE login_curs | ||
| + | RETURN 0 | ||
| + | GO | ||
| + | </code> | ||
| + | Potem uruchomić | ||
| + | <code> | ||
| + | EXEC sp_help_revlogin | ||
| + | </code> | ||
| + | |||
| + | ---- | ||
| Włączenie połączeń TCP/IP do serwera. | Włączenie połączeń TCP/IP do serwera. | ||
| Polecenie //svrnetcn -> TCP/IP -> Enable// | Polecenie //svrnetcn -> TCP/IP -> Enable// | ||
| Linia 22: | Linia 172: | ||
| * W Roles zmienić hasło użytkownika sa | * W Roles zmienić hasło użytkownika sa | ||
| + | ---- | ||
| + | Czy w sieci działa rozwiązywanie nazw na adresy IP? | ||
| + | |||
| + | Można to sprawdzić za pomocą systemowego polecenie ping. Jego wywołanie z linii komend powinno mieć postać: ping nazwa_komputera. Wynikiem takiego polecenia powinien być adres IP podanego komputera. Jeżeli nie jest zwracany adres IP, wtedy konieczne jest ustawienie aliasu. | ||
| + | W celu utworzenia aliasu należy przejść do odpowiedniego katalogu i uruchomić program: | ||
| + | C:\Windows\system32\cliconfg.exe - systemy 32 bitowe | ||
| + | C:\Windows\SysWow64\cliconfg.exe - systemy 64 bitowe | ||
| + | Typ systemu operacyjnego można sprawdzić we właściwościach komputera. | ||
| + | |||
| + | UWAGA: Wpisując komendę cliconfg w wierszu poleceń systemu Windows (Start / Uruchom / cliconfg) domyślnie uruchamiany jest program z katalogu C:\Windows\system32 | ||
| + | Po uruchomieniu odpowiedniego programu przechodzimy na zakładkę alias i ustawiamy powiązanie między nazwą komputera, a jego adresem IP. W polu „Alias serwera” podajemy pełną nazwę instancji silnika SQL (nazwa_hosta\nazwa_instancji). Zaznaczamy biblioteki sieciowe TCP/IP, natomiast w polu „Nazwa serwera” w miejsce nazwy hosta podajemy jego adres IP. Adres IP możemy sprawdzić wpisując komendę ipconfig w wierszu poleceń systemu Windows (Start/ Uruchom/ cmd). | ||
| + | |||
| + | UWAGA: W przypadku gdy problem z połączeniem występuje w obrębie tego samego komputera można podać lokalny adres IP 127.0.0.1 (interfejs loopback). | ||
| + | |||
| + | alias.jpg | ||
| + | |||
| + | Zadaniem aliasu jest więc pomoc w odnalezieniu odpowiedniego adresu IP serwera, gdy rozwiązywanie nazw w sieci nie działa prawidłowo. | ||
| + | Czasem problemem w ustanawianiu połączenia do serwera SQL jest także nie odnalezienie odpowiedniego portu, na którym nasłuchuje serwer SQL. Wówczas warto odznaczyć parametr 'Określ port dynamicznie' i wpisać numer portu, na którym nasłuchuje serwer SQL. Numer portu możemy sprawdzić w errorlogu serwera SQL. Domyślnie plik znajduje się w lokalizacjach: | ||
| + | C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG – lokalizacja dla serwera SQL 2005 | ||
| + | lub | ||
| + | C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.OPTIMA\MSSQL\Log\ERRORLOG – lokalizacja dla serwera SQL 2012 | ||
| + | Plik można otworzyć za pomocą notatnika. Informacja o numerze portu (xxxx) występuje po słowach Server is listening on [ 'any' <ipv4> xxxx] | ||
| + | UWAGA: Jeśli alias zostanie nazwy inaczej niż nazywa się serwer SQL należy pamiętać, aby w programie Comarch ERP Optima konfigurując połączenie do serwera SQL podać w polu Server MS SQL nazwę aliasu. | ||