Thursday, August 11, 2011

asp.net Apps tracen


in der Web.config im Abschnitt system.web folgenden xml Tag (spitze Klammern hinzu)

trace enabled="true" pageOutput="true" requestLimit="20" traceMode="SortByTime" localOnly="true"

einfügen, an jeder Seite sollte nun ein Trace Abschnitt angehängt werden, eine Übersicht über alle Traces bekommt man indem man im hauptdir der Anwendung

trace.axd

aufruft (die gibt es physikalisch nicht, wird aber von asp.net für jede Anwendung bereitgestellt)

Monday, August 08, 2011

check sql agent running with tsql

if 0<(select count(*) from sysprocesses where program_name like 'SQLAgent%')
begin
print 'sql agent is running'
end
else
begin
print 'sql agent is not running'
end

Friday, August 05, 2011

Datagridview auf Bindingsource an Datatable

Ereignisreihenfolge beim Hinzufügen einer neuen Zeile:
1) Bindingsource_ADddingNEw
2) Datatable_TableNewRow
3) Datagridview_UserAddedRow

wenn jemand im Datagridview auf die neue Zeile klickt, wird nicht unbedingt schon eine neue Row hinzugefügt, erst wenn jemand verscuht einen Wert einzutragen => mit Bindingsource.AddNEw() kann man händisch eine neue Row hinzufügen

Saturday, July 30, 2011

LINQ und Datatables

allgemeine (untypisierte) Datatable
var res = from x in dt.AsEnumerable() select x.Field(c.ColumnName);

join zweier typisierter Datasets:
var rsInner = from s in dtSource
join c in dtComp on s.FullName equals c.FullName
where s.Nullable!=c.Nullable || s.MaxLength!=c.MaxLength || s.Type!=c.Type
select new { s.TableName, s.ColumnName,
s.Nullable, cNullAble = c.Nullable,
s.MaxLength, cMaxL = c.MaxLength,
s.Type, cType = c.Type};

Tuesday, July 26, 2011

typed Dataset Null Werte

Um Null Werte abzufragen verwendet man die IsXXXNull() Methode der typed Datarow Instanzen, um Null Werte zu schreiben die SetXXXNull() Methode , wobei XXX der Feldname ist.

z.b.:

DsCRM.tTextNmDataTable dtTextNm = new DsCRM.tTextNmDataTable();
DsCRM.tTextNmRow drTextNm = dtTextNm.NewtTextNmRow();
drTextNm.ChildId = dr.Id;
drTextNm.ParentId = (int)dt.ExtendedProperties[C.ParentId];
drTextNm.Created = DateTime.UtcNow;
drTextNm.CreatedBy = Data.WinUserName;
drTextNm.SetValidUntilNull();
drTextNm.IsValidUntilNull();

KeyCode zum Abfragen Return / Enter

private void cbBranche_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{

}
}

Wednesday, July 20, 2011

DD-WRT iptables

DD-WRT ist ja eine Linux variante, daher kann man das Port Forwarding auch per ssh mittels Iptables einstellen:

iptables --list
listet alle ketten und regeln auf

mit iptables -D Kettenname Regelnr
kann eine Regel aus einer Kette wieder gelöscht werden.

z.b.:
iptables -D FORWARD 5
löscht die 5. Zeile (siehe --list) aus der FORWARD Kette (FORWARD Kette ist eine Standard Kette, die Regeln zum Weiterleiten zusammenfasst)

sehr hilfreich, wenn man z.b. aufs Webinterface nicht mehr zugreifen kann, da man Port 80 wo anders hin verbogen hat mittels Port Forward ...


aus genaueres zu ipttables:

Regeln
Mit einer Regel wird entschieden was mit einem Paket passieren soll. Jede besitzt bestimmte Parameter nach denen sie überprüft ob die Informationen eines Paketes auf sie zutreffen. Wenn die Parameter zutreffend sind, wird das Paket meist an ein neues Ziel verwiesen oder es wird eine Methode angewandt. Für die Bearbeitung der Pakete gibt es mehrere Ziele und Methoden (policy). Häufig benutzte sind:

ACCEPT: das Paket kann passieren
REJECT: das Paket wird zurückgewiesen und ein Fehlerpaket wird gesendet
LOG: schreibt einen Eintrag in die syslog
DROP: das Paket wird ignoriert und keine Antwort gesendet
REDIRECT: die Ziel-Adresse des Paketes wird hiermit so verändert, dass es zum lokalen Rechner gesendet wird
MASQUERADE: die Quell-Adresse des Paketes wird durch die IP-Adresse der Schnittstelle ersetzt, auf dem es den Rechner verlässt

Regeln sind die Glieder der Kette.
Ketten
Die Ketten sind eine Sammlung von Regeln. D.h. das jede Kette mehrere Regeln besitzen kann um ein Paket durchzulassen oder zu blockieren. Es sind fünf Typen von Standardketten vorhanden. Manche dieser Ketten werden von allen Paketen und einige nur, je nachdem welches Ziel sie haben, durchlaufen. Die Regeln einer Kette werden nacheinander abgearbeitet und wenn eine zutrifft, ist die Bearbeitung in dieser Kette beendet (es gibt Ausnahmen):

PREROUTING: alle Pakete kommen hier durch bevor eine Routing-Entscheidung getroffen wird
FORWARD: für alle Pakete, die von der einen zu einer anderen Netzwerkschnittstelle weitergeleitet werden - also keine Pakete die an einen lokalen Dienst gerichtet sind
INPUT: für Pakete die über eine Schnittstelle hereinkommen und einen Dienst auf dem Rechner ansprechen
OUTPUT: für die über eine Schnittstelle herausgehenden Pakete, die von einem lokalen Dienst kommen
POSTROUTING: alle Pakete kommen am Ende der Verarbeitung hier durch

Die Ketten INPUT, FORWARD und OUTPUT besitzen immer eine Standardregel. Diese wird dann angewandt, wenn keine der in der jeweiligen Kette vorhandenen Regel zutrifft oder keine Regel vorhanden ist. In den Ketten PREROUTING und POSTROUTING können nur Pakete manipuliert (mangle und/oder nat), nicht jedoch gefiltert werden. Zu den vorhandenen Ketten kann man noch benutzerdefinierte Ketten erstellen. Dazu kommen wir jedoch erst später.

Tabellen
Die Art der Verarbeitung von Netzwerkpaketen ist in verschiedene Tabellen unterteilt. iptables besitzt standardmäßig drei Tabellen: mangle, nat und filter. Die Tabelle mangle (übersetzt: zerhauen) ermöglicht es dem Kernel, Daten im Paket-Header zu verändern. NAT wird benutzt um interne und externe IP-Adressen zu übersetzen (= Network Adress Translation). Regeln in dieser Tabelle ändern die IP und/oder den Port des Ziels. Die Tabelle filter prüft alle für die Firewall ankommenden Pakete und entscheidet ob sie durchgelassen oder geblockt werden.

Jede dieser Tabellen besitzt nun mehrere Ketten:

mangle (Paketmanipulationen): enthält alle Ketten
nat (Network Adress Translation): enthält die Ketten PREROUTING, OUTPUT und POSTROUTING
filter (Paketfilter): enthält die Ketten FORWARD, INPUT und OUTPUT

Monday, July 18, 2011

Allgemeines zu ProcMon Sysinternals

Buttonleiste:
Registry, File, Network und Threadbutton (ganz rechts) filtern die Erwignisse die angezeigt werden

Processtree:

wininit.exe
->services.exe hat alle Services gestartet
->lsass.exe ist der lokale Sicherheit-Authentifizierungsserver. Er überprüft die Gültigkeit der Benutzeranmeldung für Ihren PC oder Server.
->LSM.exe ist der lokale Sitzungs-Manager-Dienst in Microsoft Windows

Csrss ist kurz für Client/Server Run-Time Subsystem

winlogon.exe ermöglicht das An- und Abmelden von Benutzer und läuft deswegen ständig im Hintergrund mit. Es überprüft auch den Windows Aktivierungscode. http://www.neuber.com/taskmanager/deutsch/prozess/winlogon.exe.html

shstat.exe ist eine Anwendung, die McAfee Prozess-zuprozeß communications.

Thursday, July 14, 2011

für jede Tabelle im Sql Server etwas ausführen

z.b. Count(*)

EXEC SP_MSFOREACHTABLE 'select "?", count(*) from ?'

NameValueCollection in Dictionary konvertieren

static public Dictionary NamValCol2Dict(NameValueCollection nvc)
{
Dictionary temp = new Dictionary();
foreach (string key in nvc)
{
temp.Add(key, nvc[key]);
}
return temp;
}

mittels Reflection Name / Value Properties eines bel. Objektes zurückgeben

private Dictionary GetPropNameAndValuesAsDict(object o)
{
Dictionary d = new Dictionary();
foreach (PropertyInfo pi in o.GetType().GetProperties())
{
string s = "";
try
{
object oVal = pi.GetValue(o, null);
if (null != oVal) s = oVal.ToString();
}

catch (Exception ex)
{
s = ex.Message;
}
d.Add(pi.Name, s);
}
return d;
}

Umwandeln des obigen Dictonaries d in Stringliste:
List sl = (from de in d select de.Key + " = "+de.Value).ToList();

bzw. als Stringlist
private List GetPropNameAndValues(object o)
{
List sl = new List();
foreach (PropertyInfo pi in o.GetType().GetProperties())
{
string s = pi.Name;
try
{
object oVal = pi.GetValue(o, null);
if (null != oVal) s += "=" + oVal.ToString();
}

catch (Exception ex)
{
s += ":" + ex.Message;
}
sl.Add(s);
}
return sl;
}

Sql Server Datum und Sprache

select * from sys.syslanguages
set language 'English'
select @@Language
select GetDate()
set language 'Deutsch'
select @@Language
select GetDate()

Wednesday, July 13, 2011

Execute Rechte auf alle Stored Procedures / Execute privileg for all stored procedures

z.b. durch erzeugen einer Execute Rolle
for example create a role and assign exeute rights
CREATE ROLE db_execute
GRANT EXECUTE TO db_execute

=> jedes Mitglied der Rolle db_execute kann SPs usw. ausführen - hinzufügen z.b. mittels:

exec sp_addrolemember db_execute, username

IIS hostheader

Um mehrerer Websiten mit derselben IP und Port aber unterschiedlichem Hostname betreiben zu können muß man in den Bindings (IIS7) den hostname genauso eintragen, wie er später in der URL eingegeben wird. der DNS Server muß zunächst dafür sorgen, dass dieser hostname auch zum IIS Server geleitet wird (CNAME Einträge auf den Original DNS Eintrag des Servers - A Record), der IIS Server sucht dann in den Hostheaders die richtige Site raus ...

Monday, July 04, 2011

asp.net 4.0 deployment on IIS 7.0

Beim Versuch eine asp.net 4.0 app auf einen default configuriertem iis7 zu intallieren erhielt ich:

HTTP Error 404.17 - Not Found The requested content appears to be script and will not be served by the static file handler.

das Problem war, dass ASP.NET 4.0 Framework war zwar am Rechner installiert => daher konnte man in den AppPools auch einstellen, dass der AppPool unter 4.0 laufen soll, doch man muß es auch noch als (ehemals isapi) handler installieren, damit aspx seiten damit abgehandelt werden können mittels:http://www.blogger.com/img/blank.gif
c:\windows\microsoft.net\framework\v4.0….\aspnet_regiis –i

unter iis7.0 ist auch der server kern in asp.net entwickelt, daher sind keine isapi.dlls wie unter iis60 und 5.0 nötig, um bestimmte dateiarten wie aspx zu handeln, sondern das kann gleich im kern gehandelt werden.

iis7 architectur

Friday, July 01, 2011

logfile verkleinern

Um das Logfile zu verkleinern ist es günstig, ein Logbackup zu machen und dann zu shrinken:

USE [dbname]
GO
DBCC SHRINKFILE (N'logfilename logisch' , 1000)
GO

oder im ssms in Datenbank-Tasks auf Verkleinern, Files gehen

z.b.:
DBCC SHRINKFILE ('CRM_log',3000)

Tuesday, June 28, 2011

SqlAgentAliveJob

Verwendung von sp_send_dbmail um sich vom SqlAgent mittels täglichem Job eine Alive Mail schicken zu lassen:

declare @x as nvarchar(max)
set @x=@@SERVERNAME +' sql agent is alive at '+CONVERT(nvarchar(max),GETDATE(),121)
--select @x
exec msdb.dbo.sp_send_dbmail
@profile_name='dbm',
@recipients='x@y.z',
@subject=@x,
@body='Diese Nachricht wurde von Sql Agent Job SqlAgentIsAliveMail generiert - bitte nicht beantworten'

Monday, June 27, 2011

nützliche SqlServerAlerts

folgendes Script erzeugt im SqlAgent unter Alerts für alle genützen Severities Alerts - wenn man einen Operator definiert kann dieser dann benachrichtigt werden (Properties, Response). Vorraussetzung unter SqlAgentProperties ist unter AlertSystem EnableMailProfile eingestellt ...

@include_event_description_in=1 => alert text wird in emails mitgeschickt

Gleich dannach ist ein Script, dass Email Notifications für alle mit Script 1 erzeugten Alerts erstellt, wobei der Operatorname ganz am Anfang des Scripts im Set richtig eingestellt werden muss - kann man aber auch direkt beim Operator im ssms einstellen


USE [msdb]
GO

/****** Object: Alert [001misc] Script Date: 06/27/2011 16:10:04 ******/
EXEC msdb.dbo.sp_add_alert @name=N'001misc',
@message_id=0,
@severity=1,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** 2-6 Reserved *****************************/

/****** Object: Alert [007notifyStatus] Script Date: 06/27/2011 16:12:16 ******/
EXEC msdb.dbo.sp_add_alert @name=N'007notifyStatus',
@message_id=0,
@severity=7,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [008UserInterventionRequired] Script Date: 06/27/2011 16:27:57 ******/
EXEC msdb.dbo.sp_add_alert @name=N'008UserInterventionRequired',
@message_id=0,
@severity=8,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [009UserDefined] Script Date: 06/27/2011 16:27:57 ******/
EXEC msdb.dbo.sp_add_alert @name=N'009UserDefined',
@message_id=0,
@severity=9,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO


/****** Object: Alert [010Info] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'010Info',
@message_id=0,
@severity=10,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [011DbObjectNotFound] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'011DbObjectNotFound',
@message_id=0,
@severity=11,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/** 12 unused ******/
/****** Object: Alert [013UserTransactionSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'013UserTransactionSyntaxError',
@message_id=0,
@severity=13,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [014lowPermission] Script Date: 06/27/2011 16:25:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'014lowPermission',
@message_id=0,
@severity=14,
@enabled=1,
@delay_between_responses=0,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'

/****** Object: Alert [015SqlSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'015SqlSyntaxError',
@message_id=0,
@severity=15,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [016MiscUserError] Script Date: 06/27/2011 16:13:02 ******/
EXEC msdb.dbo.sp_add_alert @name=N'016MiscUserError',
@message_id=0,
@severity=16,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO


/****** Object: Alert [017LowResources] Script Date: 06/27/2011 16:12:49 ******/
EXEC msdb.dbo.sp_add_alert @name=N'017LowResources',
@message_id=0,
@severity=17,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [018InternalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'018InternalError',
@message_id=0,
@severity=18,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [019FatalResource] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'019FatalResource',
@message_id=0,
@severity=19,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [020FatalCurProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'020FatalCurProc',
@message_id=0,
@severity=20,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [021FatalDbProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'021FatalDbProc',
@message_id=0,
@severity=21,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO

/****** Object: Alert [022FatalTableIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'022FatalTableIntegr',
@message_id=0,
@severity=22,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [023FatalDbIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'023FatalDbIntegr',
@message_id=0,
@severity=23,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [024FatalHardwareError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'024FatalHardwareError',
@message_id=0,
@severity=24,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO
/****** Object: Alert [025FatalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC msdb.dbo.sp_add_alert @name=N'025FatalError',
@message_id=0,
@severity=25,
@enabled=1,
@delay_between_responses=3600,
@include_event_description_in=1,
@category_name=N'[Uncategorized]',
@job_id=N'00000000-0000-0000-0000-000000000000'
GO


/**************************** UND NOTIFICATIONS EINSTELLEN, OPERATOR NAME RICHTIGSTELLEN !!!! ****************************************************************



USE [msdb]
GO

DECLARE @Operator as nvarchar(MAX)
SET @Operator='operatorname';

EXEC dbo.sp_add_notification @alert_name = N'011DbObjectNotFound',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [001misc] Script Date: 06/27/2011 16:10:04 ******/
EXEC dbo.sp_add_notification @alert_name = N'001misc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** 2-6 Reserved *****************************/

/****** Object: Alert [007notifyStatus] Script Date: 06/27/2011 16:12:16 ******/
EXEC dbo.sp_add_notification @alert_name =N'007notifyStatus',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [008UserInterventionRequired] Script Date: 06/27/2011 16:27:57 ******/
EXEC dbo.sp_add_notification @alert_name =N'008UserInterventionRequired',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [009UserDefined] Script Date: 06/27/2011 16:27:57 ******/
EXEC dbo.sp_add_notification @alert_name =N'009UserDefined',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email



/****** Object: Alert [010Info] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'010Info',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [011DbObjectNotFound] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'011DbObjectNotFound',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/** 12 unused ******/
/****** Object: Alert [013UserTransactionSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'013UserTransactionSyntaxError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [014lowPermission] Script Date: 06/27/2011 16:25:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'014lowPermission',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [015SqlSyntaxError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'015SqlSyntaxError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [016MiscUserError] Script Date: 06/27/2011 16:13:02 ******/
EXEC dbo.sp_add_notification @alert_name =N'016MiscUserError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email



/****** Object: Alert [017LowResources] Script Date: 06/27/2011 16:12:49 ******/
EXEC dbo.sp_add_notification @alert_name =N'017LowResources',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [018InternalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'018InternalError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [019FatalResource] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'019FatalResource',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [020FatalCurProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'020FatalCurProc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [021FatalDbProc] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'021FatalDbProc',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email


/****** Object: Alert [022FatalTableIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'022FatalTableIntegr',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [023FatalDbIntegr] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'023FatalDbIntegr',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [024FatalHardwareError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'024FatalHardwareError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email

/****** Object: Alert [025FatalError] Script Date: 06/27/2011 16:10:21 ******/
EXEC dbo.sp_add_notification @alert_name =N'025FatalError',
@operator_name = @Operator,
@notification_method = 1 ; -- 1 = Email
GO

Thursday, May 19, 2011

COM

Komponenten werden mit regsvr32.exe registriert => in der Registry wird unter HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{8.......-AE99-4A26-A9A8-B847F8C70629}\InprocServer32
der Pfad zum Executeable abgelegt.
unter HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{8......-AA99-4A26-A9A8-B847F8C70629}\VersionIndependentProgID wird der eindeutige COM NAme abgelegt, unter dem dann z.b. mittels vbs:
Set oChecker=CreateObject("eindeutiger Name") das Objekt kreiert werden kann.

OLECHAR* BSTR : hat Längeninfo in den ersten zwei bytes und end marke ! _> daher immer mit SysAllocString initialisieren, da wird die richtige Länge gleich eingetragen

Wednesday, April 06, 2011

Database Snapshot erstellen

Ein Snapshot (Read only Kopie eines Datenbankstandes) kann nicht aus dem SSMS per Menü erstellt werden sondern nur über TSQL:

CREATE DATABASE SnapshotDbName ON
( NAME = originalDbFileNameLogisch, FILENAME = 'Pfad zu neu zu erstellender Snapshot Datei' )
AS SNAPSHOT OF OrignialDbName;
GO

beim erstellen des Snapshots ist der logische Filename nicht frei wählbar, sondern der logische Name des Datenfiles in der Original Db,sonst erhält man:

Msg 5014, Level 16, State 3, Line 1
The file 'TestSS20110404_Data' does not exist in database 'Test'.

Wichtig: die Original Datenbank darf nicht im No Recovery Mode sein sonst erhält man:
Msg 1822, Level 16, State 1, Line 1
The database must be online to have a database snapshot.

z.b.:
CREATE DATABASE TestSS20110406 ON
( NAME = Test, FILENAME = 'E:\SqlDbs\TestSS20110406.ss' )
AS SNAPSHOT OF Test;
GO

erstellt unter Datenbanken\Snapshots eine readonly Kopie der Datenbank Test, die nur ein physikalisches Datenfile mit logischem Namen Test hat (siehe DatenbankProperties\Files)

Tuesday, April 05, 2011

Telnet auf SQL Server 2008

unter Features Telnet Client aktivieren

Monday, April 04, 2011

Sql Server Replikation / Log Shipping 2005->2008R2

Replikation Sql Server 2005 SP3-> 2008R2:
=========================================
generell: wenn man vom SSMS (Sql Server Management Studio) Replikation einrichten will, muß man sich mit dem Netzwerknamen des Servers einloggen, nicht mit localhost, IP Adressen oder sonstigen Aliasen, sonst erhält man die irreführende Fehlermeldung: MMSM is unable to access replication components because replication is not installed on this instance of SQL Server.
Für die Publikation ist ein Distributer nötig (rechte Maustaste auf Replikations Knoten im SSMS)

Snapshot:
---------
geht ohne Probleme

Transactional:
-------------
geht, die zu replizierenden Tabellen müssen einen primary key haben, sonst erhält man: Database 'DB_NAME' contains no objects that can be replicated with the selected publication type. Click Back to choose another database or change the publication type, Performance: Distributor auf eigenem server

Merge:
------
Fehlermeldung "For merge Publications, the version of the Subscriber must not exceed the version of the Publisher."

LogShipping:
============
geht nur im "No Recovery Mode" und nicht im Standby Mode

Tuesday, March 29, 2011

RunDLL und RunDLL32

Zitat: "RunDLL ruft Funktionen auf, die entweder aus 16bit-DLLs (RunDLL.exe) oder 32bit-DLLs (RunDLL32.exe) exportiert werden. RunDLL unterstützt diese Funktionalität nur für solche DLLs, die diese Aufruf-Möglichkeit explizit unterstützen - so können beispielsweise die System-DLLs des API nicht genutzt werden." Source/Quelle: BasicPro

Die generelle Syntax für die Nutzung von RunDLL:

RUNDLL.EXE , [opt. Argumente]
bzw.
RUNDLL32.EXE , [opt. Argumente]

Bei Ausfürung ist die Groß/Kleinschreibung zu beachten!

Oder sind Sie speziell auf der Suche nach Druckersteuerung per Kommandzeile?


--------------------------------------------------------------------------------
Praktische Anwendungsmöglichkeiten


Allgemein:

rundll32.exe shell32.dll,Control_RunDLL
Zeigt die Systemsteuerung in Explorer-Stil an.


Eingabehilfen: (Modul: access.cpl)

rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
Zeigt die Tastatur-Eigenschaften für die Eingabehilfen an.


rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
Zeigt die Audio-Eigenschaften für die Eingabehilfen an.


rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
Zeigt die Anzeige-Eigenschaften für die Eingabehilfen an.


rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
Zeigt die Maus-Eigenschaften für die Eingabehilfen an.


rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
Zeigt die generellen Eigenschaften für die Eingabehilfen an.


Anzeige: (Modul: desk.cpl)

rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
Zeigt "Eigenschaften von Anzeige - Hintergrund" an.


rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
Zeigt "Eigenschaften von Anzeige - Bildschirmschoner" an.


rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
Zeigt "Eigenschaften von Anzeige - Darstellung" an.


rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
Zeigt "Eigenschaften von Anzeige - Einstellungen" an.


Grundeinstellungen: (Modul: main.cpl)

rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
Zeigt "Eigenschaften von Maus - Tasten" an.


rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
Zeigt "Eigenschaften von Tastatur - Geschwindigkeit" an.


rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,1
Zeigt "Eigenschaften von Tastatur - Sprache" an.


rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,2
Zeigt "Eigenschaften von Tastatur - Allgemein" an.


rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
Zeigt den Drucker-Ordner im Explorer-Stil an.


rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
Zeigt den Schriftarten-Ordner im Explorer-Stil an.


rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
Zeigt die Energiesparfunktionen an.


Multimedia: (Modul: mmsys.cpl)

rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0

Zeigt "Eigenschaften von Multimedia - Audio" an.


rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1 Zeigt "Eigenschaften von Multimedia - Video" an.


rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
Zeigt "Eigenschaften von Multimedia - MIDI" an.


rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
Zeigt "Eigenschaften von Multimedia - Musik-CD" an.


rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
Zeigt "Eigenschaften von Multimedia - Erweitert" an.


rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
Zeigt den Dialog "Akustische Signale" an.


Ländereinstellungen:(Modul: intl.cpl)

rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
Zeigt "Eigenschaften von Ländereinstellungen - Gebietsschema" an.


rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
Zeigt "Eigenschaften von Ländereinstellungen - Zahlen" an.


rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
Zeigt "Ländereinstellungen - Währung" an.


rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
Zeigt "Ländereinstellungen - Uhrzeit" an.


rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
Zeigt "Ländereinstellungen - Datum" an.


System:(Modul: sysdm.cpl)

rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
Zeigt "Eigenschaften für System - Allgemein" an.


rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
Zeigt "Eigenschaften für System - Geräte-Manager" an.


rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
Zeigt "Eigenschaften für System - Hardwareprofile" an.


rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
Zeigt "Eigenschaften für System - Leistungsmerkmale" an.


rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
Zeigt den Hardware-Assistenten zur Installation neuer Hardware-Komponenten an.


Netzwerk: (Modul: netcpl.cpl)

rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
Zeigt die "Netzwerk - Konfiguration" an.


Kennwörter: (Modul: password.cpl)

rundll32.exe shell32.dll,Control_RunDLL password.cpl
Zeigt "Eigenschaften von Kennwörter - Kennwörter ändern" an.


Datum/Uhrzeit: (Modul: timedate.cpl)

rundll32.exe shell32.dll,Control_RunDLL timedate.cpl
Zeigt "Eigenschaften von Datum/Uhrzeit- Datum und Uhrzeit" an.


rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
Zeigt "Eigenschaften von Datum/Uhrzeit- Zeitzone" an.


Joystick: (Modul: joy.cpl)

rundll32.exe shell32.dll,Control_RunDLL joy.cpl
Zeigt "Eigenschaften von Joystick- Joystick" an.


Modems: (Modul: modem.cpl)

rundll32.exe shell32.dll,Control_RunDLL modem.cpl
Zeigt "Eigenschaften für Modems - Allgemein" an.


rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
Zeigt den Wizard "Neus Modem installieren" an.


Software: (Modul: appwiz.cpl)

rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl
Zeigt "Eigenschaften von Software - Installieren/Deinstallieren" an.


rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
Zeigt "Eigenschaften von Software - Windows-Setup" an.


rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
Zeigt "Eigenschaften von Software - Startdiskette" an.


rundll32.exe appwiz.cpl,NewLinkHere c:\temp
Startet den Verknüpfungs-Assistenten und legt im angegebenen Verzeichnis die vom Benutzer angegebene Verknüpfung an


Sonstiges:
rundll32.exe shell32.dll,Control_FillCache_RunDLL
Läßt Windows die Systemsteuerung neu einrichten.


rundll32.exe shell32.dll,Control_RunDLL wgpocpl.cpl
Zeigt den Administrator-Dialog für ein Microsoft Workgroup-Postoffice an.


rundll32.exe shell32.dll,OpenAs_RunDLL c:\datei.asd
Zeigt den "Öffnen mit"-Dialog an und assoziiert (bei entsprechend aktivierter Dialog-Option) bei Anwendungsauswahl die Dateiendung (hier: .asd) mit der ausgewählten Anwendung.


rundll32.exe shell32.dll,SHFormatDrive
Zeigt den "Diskette formatieren"-Dialog an.


rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
Ruft den Assistenten für die Druckerinstallation auf.


rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintTestPage
Druckt eine Testseite auf dem aktuellen Drucker.


rundll32.exe rnaui.dll,RnaWizard
Ruft den Assistenten für eine DFÜ-Netzwerkverbindung auf (mit vorheriger Erklärung).


rundll32.exe rnaui.dll,RnaWizard @1
Ruft den Assistenten für eine DFÜ-Netzwerkverbindung auf (ohne Erklärung).


rundll32.exe rnaui.dll,RnaDial Internet
Ruft den Assistenten "Verbinden mit" mit dem angegebenen Verbindungsnamen auf.


rundll32.exe syncui.dll,Briefcase_Intro
Zeigt ein Informationsfenster zum Windows-Aktenkoffer an.


rundll32.exe syncui.dll,Briefcase_Create
Legt einen neuen Aktenkoffer an (nähere Verwendung noch unklar).


rundll32.exe diskcopy.dll,DiskCopyRunDll
Ruft den Dialog "Diskette kopieren" auf.


rundll32.exe sysdm.cpl,DMFistTimeSetup
Ruft den (alleine recht sinnfreien) Dialog "Hardwarekonfiguration" mit einer Meldung "Die Konfiguration des Computers wird vervollständigt" auf.


rundll32.exe url.dll,FileProtocolHandler http://masterbootrecord.de
Ruft die angegebene Datei oder Adresse in der assoziierten Anwendung auf.


rundll32.exe url.dll,TelnetProtocolHandler 194.45.127.79
Stellt eine Telnet-Verbindung zum angegebenen Rechner her.


rundll32.exe url.dll,MailToProtocolHandler webmaster@masterbootrecord.de
Ruft das Standard-Mailprogramm auf.


rundll32.exe url.dll,NewsProtocolHandler de.prog.perl
Ruft den Standard-Newsreader auf.


rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
Zeigt die Eigenschaftsseite des Microsoft-Exchange-Profils an.


rundll32.exe desk.cpl,InstallScreenSaver c:\windows\system\ssaver.scr
Installiert einen vorhandenen Bildschirmschoner.


rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl @1
Zeigt (bei installiertem Internet Explorer) den Dialog "Benutzereinstellungen - Benutzerliste" an.


rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,0
Zeigt (bei installiertem Internet Explorer) den Dialog "Eigenschaften von Internet - Allgemein" an.


Rundll32.exe user,ExitWindows
Beendet Windows.


Rundll32.exe user,ExitWindowsExec
Startet Windows neu.


Rundll32.exe krnl386.exe,exitkernel
Beendet Windows auf eine unsanfte Art...


Rundll32.exe user,disableoemlayer
Lässt Windows die grafische Oberfläche deaktivieren. Man sieht nur noch einen Blinkenden Cursor... Netter Gag.


Rundll32.exe user,repaintscreen
Aktualisiert die Anzeige (F5).


Rundll32.exe user,setcursorpos
Setzt den Mauscursor in die linke obere Ecke.


Rundll32.exe user,swapmousebutton
Vertauscht bis zum nächsten Neustart die beiden Maustasten.


Rundll32.exe keyboard,disable
Deaktiviert bis zum nächsten Neustart die Tastatur.


Rundll32.exe mouse,disable
Deaktiviert bis zum nächsten Neustart die Maus.

Thursday, January 27, 2011

Default Value bei Stored Procedure TSQl

ALTER PROCEDURE testRaiseError
@Severity int =18
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

Raiserror('Test Raiserrror',@Severity,10)
END

Transaktionen und Fehlerbehandlung in TSQL

Beispiel Insert und Update in einer Transaktion, wenn eines fehlschlägt wird zurückgerollt und der Fehler weitergegeben


BEGIN TRAN T1
BEGIN TRY
--write all values to mcit.auditrail (@UserId)
INSERT INTO [AuditTrail] ([ActionType],[ObjectType],[ObjectId],[OldValues],[NewValues],[UserId])
SELECT 'Update','Products',Id,CONVERT(Nvarchar(MAX),Price),CONVERT(Nvarchar(MAX),Price*@PriceFact),@UserId
from product where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0


update mcit.product set Price=Price*@PriceFact where [year]=@Year and SupplierGroupId=@SupplierGroupId and IsDeleted=0
END TRY
BEGIN CATCH
print 'Fehler in Transaktion aufgetreten - Rolle zurück'
ROLLBACK TRAN T1

DECLARE @MSG NVARCHAR(MAX) SET @MSG=ERROR_MESSAGE()
DECLARE @SEV INT SET @SEV=ERROR_SEVERITY()
DECLARE @STA INT SET @STA=ERROR_STATE()
RAISERROR (@MSG,@SEV,@STA)
RETURN
END CATCH
COMMIT TRAN T1

END

Monday, January 24, 2011

MSI entpacken mittels MSIEXEC

msiexec /a DATEINAME.msi /qn TARGETDIR="PFAD"
wichtig: Rargetidrpfad muss nicht existieren, darf aber nicht das msi file enthalten