Co się dzieje w tempdb?

2014-04-06

Może są otwarte jakieś transkacje? Kandydat na zasobożercę:

DBCC OPENTRAN

Jeśli znajdziesz tutaj numer sesji, to może warto zobaczyć co ta sesja robi?

select t.text,* from sys.dm_exec_connections c
cross apply sys.dm_exec_sql_text(c.most_recent_sql_handle) t
where c.session_id=55

A może ta lub jakaś inna sesja zablokowała inną sesję. Odpowiedź da (kolumna BlkBy):

EXEC sp_who2

Może powstały jakieś olbrzymie tabele w tempdb? Poniższe zapytanie wyświetli tabele i ich rozmiary:

use tempdb;
 
SELECT TBL.name AS ObjName
,STAT.row_count AS StatRowCount
,STAT.used_page_count * 8 AS UsedSizeKB
,STAT.reserved_page_count * 8 AS RevervedSizeKB
FROM tempdb.sys.partitions AS PART
INNER JOIN tempdb.sys.dm_db_partition_stats AS STAT
ON PART.partition_id = STAT.partition_id
AND PART.partition_number = STAT.partition_number
INNER JOIN tempdb.sys.tables AS TBL
ON STAT.object_id = TBL.object_id
ORDER BY TBL.name;
 

To może popatrzmy, która sesja otrzymywała najwięcej przestrzeniw w tempdb? Będzie to kandydat na zasobożercę:

SELECT
sys.dm_exec_sessions.session_id AS [SESSION ID],
DB_NAME(database_id) AS [DATABASE Name],
HOST_NAME AS [System Name],
program_name AS [Program Name],
login_name AS [USER Name],
status,
cpu_time AS [CPU TIME (in milisec)],
total_scheduled_time AS [Total Scheduled TIME (in milisec)],
total_elapsed_time AS [Elapsed TIME (in milisec)],
(memory_usage * 8) AS [Memory USAGE (in KB)],
(user_objects_alloc_page_count * 8) AS [SPACE Allocated FOR USER Objects (in KB)],
(user_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR USER Objects (in KB)],
(internal_objects_alloc_page_count * 8) AS [SPACE Allocated FOR Internal Objects (in KB)],
(internal_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR Internal Objects (in KB)],
CASE is_user_process
WHEN 1 THEN 'user session’
WHEN 0 THEN 'system session’
END AS [SESSION Type], row_count AS [ROW COUNT]

FROM sys.dm_db_session_space_usage
INNER join  sys.dm_exec_sessions
ON sys.dm_db_session_space_usage.session_id = sys.dm_exec_sessions.session_id

 

i znowu sprawdzenie co ta sesja robi, jak wyżej

By Rafał Kraik in SQL

Powershell: Znajdowanie grupy, do której nikt nie jest przypisany

2014-04-03

Najpierw ustalmy, czy jest dostępny moduł ActiveDirectory:

Get-Module -ListAvailable
Import-Module ActiveDirectory

Do pobrania listy wszystkich grup służy:

 Get-ADGroup

Jeżeli chcesz odfiltrować tylko niektóre grupy możesz się posłużyć parametrem filter:

Get-ADGroup -Filter „name -like 'GS_SQL_*'”

Domyślnie w/w polecenie nie pokazuje kto jest członkiem tych grup. Żeby taka informacja została dołączona należy posłużyc się opcją Properties i wskazać, że chcesz aby pobrać również listę członków tej grupy:

Get-ADGroup -Filter „name -like 'GS_SQL_*'” -Properties Members

ObiektyMicrosoft.ActiveDirectory.Management.ADGroup mają teraz wypełnioną właściwość Members. Members to kolekcja obiektów. Aby policzyć ile obiektów jest w tej kolekcji użyj właściwości Count:

Get-ADGroup -Filter „name -like 'GS_SQL_*'”-Properties Members | Select Name, @{n=’Count’;e={$_.Members.Count}}

No to chyba już wiadomo, jak wybrać te grupy, które mają puste members:

Get-ADGroup -Filter „name -like 'GS_SQL_*'”-Properties Members |  where { $_.Members.Count -eq 0 }

Gotowe!

By Rafał Kraik in Power Shell

Powershell i excel? Tak, to możliwe!

2014-04-01

Utwórz obiekt aplikacji Excel

$xl = New-Object -comobject Excel.Application

Zobacz jakie ma możliwości (właściwości i metody)

$xl | gm

Aplikacja Excel jest początkowo ukryta – ma niewidoczne okno. Pokaż je:

$xl.visible = $True

Utwórz nowy pusty skoroszyt:

$wb = $xl.Workbooks.Add()

Zobacz jakie możliwości daje skoroszyt:

$wb | gm

Zapisz go na dysku

$wb.SaveAs(’c:\temp\p1.xls’) Czytaj dalej »

Kiedy ostatnio korzystano z mojej bazy?

2014-03-26

Sposób nr 1

SELECT max(create_date), max(modify_date) FROM SYS.tables

Zapytanie zwróci datę utworzenia ostatniej tabeli lub date jej modyfikacji np. dodania kolumny. A przecież te czynności nie są wykonywane codziennie. Kiedy baza okrzepnie tworzenie tabel odbywa się rzadko. Dlatego wolelibyśmy informację o tym, kiedy rekordy były ostatnio modyfikowane/dodawane, a może nawet czytane, dlatego:

Sposób nr 2

USE <your_db_name>
SELECT OBJECT_NAME(object_id) AS TableName,
last_user_update as LastAction, *
FROM sys.dm_db_index_usage_stats u
WHERE database_id = db_id(db_name())

 index_usage_stats

Zapytanie korzysta z widoku sys.dm_db_index_usage_stats, który zawiera informacje o wykorzystaniu każdego indeksu w baize danych. Zobaczysz tu ile razy indeks był skanowany, przeszukiwany przez seek lub modyfikowany przez polecenia INSERT/UPDATE/DELETE. Dodatkowo znajdziesz też datę i godzinę kiedy te operacje były ostatnio wykonywane. Czytaj dalej »

By Rafał Kraik in SQL

Microsoft SQL Server 2005 Backward Compability

2014-03-24

Błąd podczas uruchomienia skryptu Visual Basic.

Microsoft VBScript runtime error: ActiveX component can’t create object: 'SQLDMO.SQLServer

Należy zainstalować Microsoft SQL Server 2005 Backward Compability.

Poszukaj na płycie pliku SQLServer2005_BC i go zainstaluj.

Plik można ściągnąć z http://www.microsoft.com/en-us/download/details.aspx?id=6375

Ładny opis http://sqlserverfinebuild.codeplex.com/wikipage?title=Install%20SQL%202005%20Backward%20Compatibility

By Rafał Kraik in SQL

Password Expired – skrypt powershell sprawdzający kiedy wygaśnie hasło

2014-03-21

Pewnego dnia, mniej więcej w miesiąc po skonfigurowaniu serwera, okazało się że SQL Agent nie startuje. W logu można było znaleźć informację „password expired”

agent

Prosta sprawa. Trzeba tylko zmienić hasło agenta i uruchomić agenta. Aby nie było problemów w przyszłości wypadałoby jeszcze  w przyszłości pamiętać o zmianie hasła, albo gdyby pozwalały na to polityki bezpieczeństwa, zaznaczyć, że hasło nie wygasa. Czytaj dalej »

By Rafał Kraik in Power Shell

Instalacja modułu Active Directory dla powershell

2014-03-21

Administratorowi wygodnie zarządza się domeną jeżeli narzędzia do niej ma zainstalowane na swoim systemie. No a jeszcze wygodniej pracuje się w powershell, więc idealnie byłoby mieć zainstalowane na swojej stacji roboczej powershellowe narzędzia do obsługi domeny na swojej stacji. Załóżmy że masz już zainstalowane Remote Server Administration Tool (http://www.microsoft.com/pl-pl/download/details.aspx?id=7887). Aktualnie zaintalowane moduły wyświetlisz poleceniem

Get-Module -list:

Get-Module

Co jeżeli nie ma tu ActiveDirectory? Przejdź do panelu sterowania >> Programy i Funkcje >> Włącz lub wyłącz funkcje systemu Windows i zaznacz „Moduł usługi Active Directory dla środowiska Windows PowerShell”.

Gotowe!

install_active_directory_module_powershell

A tu jeszcze inne rozwiązania w innych sytuacjach:

http://www.windowscommandsyntax.com/howto/how-to-install-the-active-directory-module-for-powershell/

 

By Rafał Kraik in Power Shell