Benutzer:

Passwort:

Claus Rothe

Derzeit im Umbau... Dient vor allem meinem privaten Zweck, wer es trotzdem findet, viel Spaß. ;)


Datenbank Blog

2012-02-14: Reportserver - Rechte eines Users

Folgendes Script zeigt alle Berechtigungen eines Users an, für die er direkt berechtigt ist.

select * 
from Catalog 
where PolicyID in (
		select PolicyID 
		from PolicyUserRole 
		where userid in ( select userid 
			from users 
			where UserName in( '[Benutzername]'))
	)

2012-02-14: DDL Trigger

Dieser Trigger protokolliert was an DDL Änderungen in einer Datenbank gemacht wird. Bei Datenbanken die Repliziert werden sollte es vorher genau getestet werden, bei SQL Server 2008 R1 gibt es bei Tabellenänderungen über die Replikation Ansi-Settings Fehler die zum Stillstand der Replikation führen!!!!!!

--Erstellen von Protokolltabelle
USE AdventureWorks
GO
CREATE TABLE dbo.AuditLog
(Command NVARCHAR(1000),
PostTime NVARCHAR(24),
HostName NVARCHAR(100),
LoginName NVARCHAR(100)
)
GO

-- Erstellen von DDL-Trigger
CREATE TRIGGER AuditOperations
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data xml
DECLARE @cmd nvarchar(1000)
DECLARE @posttime nvarchar(24)
DECLARE @spid nvarchar(6)
DECLARE @loginname nvarchar(100)
DECLARE @hostname nvarchar(100)

SET @data = eventdata()
SET @cmd = @data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 
	'nvarchar(1000)')
SET @posttime = @data.value('(/EVENT_INSTANCE/PostTime)[1]',
	'nvarchar(24)')
SET @spid = @data.value('(/EVENT_INSTANCE/SPID)[1]', 'nvarchar(6)')
SET @loginname = @data.value('(/EVENT_INSTANCE/LoginName)[1]',
	'nvarchar(100)')
SET @hostname = HOST_NAME()

INSERT INTO dbo.AuditLog(Command,PostTime,HostName,LoginName)
VALUES(@cmd, @posttime, @hostname, @loginname)

SELECT @data
GO

-- Ausführen von DDL-Vorgängen
UPDATE STATISTICS Production.Product
GO
CREATE TABLE dbo.Test(col INT)
GO
DROP TABLE dbo.Test
GO

-- Anzeigen von Protokolltabelle
SELECT *
FROM dbo.AuditLog
GO

2012-02-14: Datenbankfiles Übersicht

use master;
go

select db.name,
 db.create_date, 
 db.recovery_model_desc, 
 dbfiles.type_desc,
 dbfiles.name,
 dbfiles.physical_name,
 dbfiles.state_desc,
 dbfiles.size/1024 as SizeMB,
 dbfiles.growth,
 dbfiles.is_percent_growth 
  from sys.databases db
inner join  sys.master_files dbfiles
on db.database_id = dbfiles.database_id;

2012-02-14: DB Strukturvergleich

Dieses Script dient zum Strukturvergleich von einer Datenbank auf unterschiedlichen Systemen, z.B. von Test zu Produktivsystem. Es wird nicht der Feldtyp oder Inhalt der Funktionen geprüft. Dieses könnte aber einfach ergänzt werden.

declare @prodserver varchar(50)
declare @remoteserver varchar(50)
declare @db varchar(255)
set @prodserver = '[server]'
set @remoteserver = '[server2]'
set @db = '[DB]'

exec('
select 
''PVS'',
case o.xtype 
	when ''P'' then ''Stored Procedure''
	when ''U'' then ''User Table''
	when ''V'' then ''View''
	when ''X'' then ''Extendet Stored Procedure''
	else o.xtype
end as Art
,o.name as objectname
,c.name as spaltenname
from '+@prodserver+'.'+@db+'.dbo.sysobjects o
left outer join '+@prodserver+'.'+@db+'.dbo.syscolumns c
on o.id = c.id
where o.xtype in (''U'',''P'',''V'',''X'')
and o.category = 0
and not exists(
	select 1
	from '+@remoteserver+'.'+@db+'.dbo.sysobjects o1
	left outer join '+@remoteserver+'.'+@db+'.dbo.syscolumns c1
	on o1.id = c1.id
	where o1.xtype in (''U'',''P'',''V'',''X'')
	and o1.category = 0
	and o.name = o1.name
	and (c.name = c1.name
		or (c.name is null 
		and c1.name is null)
		)
	)
order by 1,2,3,4
')



Falls man noch mehr prüfen möchte, hier noch eine Aufstellung des XTypes
-- C = CHECK constraint
-- D = Default or DEFAULT constraint
-- F = FOREIGN KEY constraint
-- L = Log
-- P = Stored procedure
-- PK = PRIMARY KEY constraint (type is K)
-- RF = Replication filter stored procedure
-- S = System table
-- TR = Trigger
-- U = User table
-- UQ = UNIQUE constraint (type is K)
-- V = View
-- X = Extended stored procedure

2012-02-14: Views in unterschiedlichen DB vergleichen

Hiereine Variante um Views auf wirkliche (Also nicht nur ein Leerzeichen oder ähnliches) unterschiede zu vergleichen.

select  
b.table_catalog, 
b.table_schema, 
b.table_name, 
a.view_definition,
b.view_definition
FROM [Server1].[DB].INFORMATION_SCHEMA.VIEWS a
inner join [DB].INFORMATION_SCHEMA.VIEWS b
on a.table_catalog = b.table_catalog
and a.table_schema = b.table_schema
and a.table_name = b.table_name
and replace(
	replace(
		replace(
			replace(
				lower(a.view_definition)
				,' ','')
				,'
','')
	,']','')
,'[','') != 
replace(
	replace(
		replace(
			replace(
				lower(b.view_definition)
				,' ','')
				,'
','')
	,']','')
,'[','')


Seite zurück [1] [2] [3] [4] [5] [6] Seite weiter

Impressum

Claus Rothe

Mobil: +49 176 81188859

E-Mail: post@...