Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

22. Januar 2007 um 23:07

Arbeitnehmerträume

Entweder da werden Arbeitnehmerträume wahr oder es ist ein verfrühter Aprilscherz…

Unbelievable! Da fällt mir nichts mehr dazu ein!

gefunden bei Prometeo
22. Januar 2007 um 22:49

schmutzige Tricks

Laut Heise.de macht Sophos darauf aufmerksam, dass die USA mit 34% der schädlichen Webseite die Spitze des "dreckigen Dutzend" bildet. Es werden aber leider eine Vergleichswerte angegeben. Bei sowas kribbelt es mir immer im Nacken: Könnte es etwa sein, das weltweit auch etwa 30% aller Webseiten in den USA gehostet werden? Wenn ja, dann frage ich mich, wer hier mit Steinen wirft… Was wäre dann an der Zahl besonders? Geht das dann in die Richtung: "In Deutschland sprechen die meisten Kriminellen deutsch"?

Herzlichen Glückwunsch! Für derart scharfsinnige Äußerungen sollte man mit Linsensuppe, nicht unter drei Portionen, bestraft werden.

Leider habe ich keine Statistik gefunden, die nach Ländern aufschlüsselt, wo wie viele Domains gehostet werden. Bei Wikipedia steht immerhin, dass COM-Domains die überwältigende Mehrheit bilden (etwa 60%?). Platz drei und fünf bilden NET und ORG.

22. Januar 2007 um 22:35

ISO-Images mit MS-Werkzeugen

Heute erinnerten mich mein Chef und mein ChefChef daran, dass es im neben den von mir neulich beschriebenen Werkzeugen ISO Recorder und Deamon Tools auch welche von Microsoft gibt:

ISO-Images brennen

Wenn man den Bedarf hat, dann kann man mit dem Kommandozeilen-Werkzeug DVDBURN.EXE aus dem "Windows Server 2003 Resource Kit" ISO-Images brennen. Ohne jede weitere Brennsoftware zu benötigen.

Die Bedienung ist denkbar einfach:
dvdburn <drive> <image> [/Erase]
Die Option "/Erase" löscht RW-Medien vor dem schreiben.
Den Brenner gibt man anstelle von "<drive>" an, das zu brennende ISO-Image als kompletten Pfad statt "<image>".

Beispiel:

dvdburn g: c:\temp\sample.iso /Erase

Angeblich kann man auch nur die DVD-RW löschen ohne zu brennen. Mächtig nützlich sein das, wenn Command-Line-Jedi Du werden willst.
Muss ich bei Gelegenheit mal ausprobieren…

ISO-Images als virtuelles Laufwerk

Ebenfalls in den "Frequently Asked Questions" von Microsoft im Abschnitt "What are ISO image files and how do I use them?" wird der Download-Link für das "Virtual CD-ROM Control Panel for Windows XP" angegeben und vor dem Nicht-Support gewarnt:

Mounting ISO files virtually
The following tool for Windows XP allows image files to be mounted virtually as CD-ROM/DVD-ROM devices. This tool is provided here for your convenience and is unsupported by Microsoft Product Support Services.

* Virtual CD-ROM Control Panel for Windows XP

Ich habe das Programm ehrlich gesagt nicht ausprobiert, aber vermute, dass es eine gute Alternative ist, wenn man Windows-XP einsetzt.

Danke für den Link, Günther!

Update: Neben DVDBurn.exe gibt's im Resource-Kit natürlich auch noch CDBurn.exe. Die Bedienung ist identisch…

22. Januar 2007 um 21:58

SQL-Server: einzelne Seiten aus Sicherung holen

Im Artikel "Fixing damaged pages using page restore or manual inserts" beschreibt Paul Randal ganz trickreich, wie man den Inhalt einzelner Seiten aus der Sicherung holt. Das ist in der Praxis durchaus relevant, wenn nur wenige Datenbank-Seiten korrupt wurden. Das war mit den bisherigen SQL-Server-Versionen nicht möglich, bzw. es war viel Handarbeit gefragt.

Am SQL-Server-2005 geht es etwa so:

RESTORE DATABASE dbccpagetest PAGE = '1:158' FROM DISK = 'C:\dbccpagetest.bak';

Dazu fragt Paul:

Isn't that cool? You can restore up to 1000 single pages from a backup at a time.

Und meine Antwort lautet: JAAAAAAA!!!

Es gibt auch eine Schattenseite: es geht nicht immer. Es geht nur, wenn entweder die Seite seit dem Backup nicht "verschoben" wurde, die Daten nicht geändert wurden oder die Datenbank im Recovery-Modus "Full" bzw. "Bulk" war:

You can use single-page restore if you're on SQL Server 2005 and the database is in Full or Bulk-Logged recovery mode, otherwise you need to use the manual method, and that will only work as long as you know the data being salvaged hasn't changed since the last backup.

Ok, die manuelle Methode ist auch nicht von schlechten Eltern. Darauf bin ich leider nicht selber gekommen, obwohl sie auf der Hand liegt. Das liegt aber vermutlich daran, dass bis zu mir meist nur die Fälle vordringen, die keine funktionstüchtige Datensicherung haben.

Hier steht es komplett, vom großen Paul Randal Himself.

22. Januar 2007 um 21:44

SQL-Server: eigene System-Prozeduren

Im Artikel "Running a master db residing stored procedure in current database context" beschreibt Mladen Prajdicand, wie man aus einer normalen Prozedur in der Master-Datenbank eine System-Prozedur machen kann. Das hat den Vorteil, dass sie aus jedem Datenbank-Kontext aus aufgerufen werden kann. Sie liest dabei immer die Informationen aus den Verwaltungstabellen der jeweiligen Datenbank. Er beschreibt dazu zwei Voraussetzungen, die am SQL Server 2005 notwendig sind:

  • Die Prozedur beginnt mit "sp_" und
  • sie wurde als Systemprozedur gekennzeichnet.

Letzteres geht am SQL-Server-2005 mit "EXEC sp_MS_marksystemobject ", ist aber nicht immer unbedingt notwendig, dazu später mehr. Ich gebe zunächst mal ein Beispiel, damit klar wird, was gemeint ist:

Wenn man zwei Tabellen gleichnamige anlegt, eine in der einen Datenbank, die andere in einer anderen, z.B. eine in der Master und die andere in der Nordwind, dann kann man beide Tabellen mit der gleichen Prozedur abfragen.

-- Tabelle YouAreIn in Master anlegen und mit "Master" füllen
create table master.dbo.YouAreIn (dbname sysname not null);
insert into master.dbo.YouAreIn (dbname) values ('Master');

– Tabelle YouAreIn in Nordwind anlegen und mit "Northwind" füllen
create table Northwind.dbo.YouAreIn (dbname sysname not null);
insert into Northwind.dbo.YouAreIn (dbname) values ('Northwind');
go
use master
go
create procedure dbo.sp_where_am_i
as
select dbname
from YouAreIn – hier keine Datenbank angeben
go
– Als Systemprozedur markieren
EXEC sp_MS_marksystemobject 'sp_where_am_i'

Jetzt kann man in unterschiedlichen Datenbank-Kontexten die Prozedure aufrufen und es wird automatisch die "richtige" Tabelle gelesen:

use master
exec sp_where_am_i

Das liefert als Ergebnis "Master". Während das untige Statement "Northwind" meldet:

use Northwind
exec sp_where_am_i

Spaßigerweise haben die Systemprozeduren noch einen Insider-Hack: Wenn man den Datenbanknamen vor die Systemprozedur stellt, dann wird sie in dem Kontext ausgeführt:

use master
exec Northwind..sp_where_am_i

Das liefert "Northwind"!

Keine Regel ohne Ausnahme…

Um abwärtskompatibel zu sein, gibt es auch hier eine Ausnahme… Auch ohne das Markieren als systemprozedur wird die Prozedur im Kontext der Datenbank ausgeführt. Die Bindung zu den Tabellen bleibt aber zu den Tabellen in der Master bestehen.

Beispielsweise liefert die folgende Prozedur (in der Master angelegt, nicht als Systemprozedur gekennzeichnet) immer den "richtigen" Datenbank-Kontext und immer den Inhalt der Tabelle aus der Master.

create procedure sp_where_am_i_zwei
as
select db_name() as [DB-Kontext],
dbname as [Tabelle-Aus]
from YouAreIn

Aber es gibt noch eine weitere Ausnahme: Wenn man lediglich vor hat aus den "alten" Systemtabelle, wie sysobjects, zu lesen, dann verhält sich die Prozedur, wie ganz oben beschrieben. Wenn man aber aus den "Neuen" liest, wie bspw. "sys.objects", dann muss sie "markiert" werden, um das Ziel zu erreichen….

|