Tag: software

old and buggy

und noch ein lustiger hinweis, wenn man mit dem IE6 unterwegs ist:

nagios spinnt rum

mein nagios hat mich geaergert und jedes mal beim konfigurieren von irgendwas einen fehler gespuckt:

Error: Could not stat() command file ‘/var/lib/nagios2/rw/nagios.cmd’!

nach ein bischen googelei wusste ich, dass die feherquellen vielfaeltig sein koennen. am ende brachte mich das auf den richtigen weg:

ls -lisa /var/lib/nagios2/rw/

…brachte zu tage, dass der webserver keinerlei berechtigungen mehr auf das vereichniss /var/lib/nagios2/rw/ hatte (warum auch immer):

164938 4 drwx------ 2 nagios www-data 4096 2010-08-03 23:03 .
164937 4 drwxr-x--- 3 nagios nagios 4096 2008-05-31 18:22 ..
168175 0 prwxrwx--- 1 nagios nagios 0 2010-08-03 23:03 nagios.cmd

also einmal:

chmod g+rwx /var/lib/nagios2/rw

…und gut. flutscht wieder.

warum erst jetzt?

java als sicherheits- und stabilitaetsriskio ist doch nun echt nichts neues 😉

remote filesystem mit sshfs mounten

wiedermal eine gedankestuetze fuer mich. wenns jemand anders gebrauchen kann – sehr schoen 😉

wie kann ich unter linux ueber ssh ein verzeichnis eines entfernten rechners ins lokale dateisystem mounten? dafuer gibt es z.b. unter ubuntu das paket sshfs. einfach mal installieren (abhaengigkeiten werden aufgeloest):

sudo apt-get install sshfs

aus sicherheitsgruenden benoetigt man spezielle berechtigungen fuer das binary /bin/fusermount. man muss die user, die das verwenden duerfen der gruppe “fuse” hinzufuegen:

sudo localuser fuse

wenn man das fuer den aktuell angemeldeten user macht, muss man sich einmal ausloggen und wieder einloggen, damit das greift.

dann einfach ein lokales verzeichnis erstellen:

mkdir /home/localuser/remotefs

und mit diesem befehl das entfernte verzeichnis mounten (das ist eine zeile):

sshfs remoteuser@remotehostname:/home/remoteuser/remotedir
 /home/localuser/remotefs/

welchen “freunden” ist nicht mehr zu helfen?

facebook fasst die mittlerweile in einer liste zusammen:

von ein paar leuten in meiner liste haette ich DAS nicht erwartet. ihr passwort fuer den mailaccount einfach mal auf irgendeiner webseite eingeben. am besten noch klischeemaessig schoen per wlan und ohne https am flughafen.

facebook jail

via

gestiegene anzahl nicht erreichbarer seiten

das kommt dann davon, wenn das blog mal 24 stunden nicht erreichbar war:

google merkt echt alles 😉

oh shit – die internet mafia

“neuer angriff der internet mafia”… pha… wenn ich den begriff “internet mafia” definieren muesste, dann wuerde ich alle die dazu zaehlen, die sich gegen netzneutralitaet aussprechen und profit machen wollen. dazu packen koennte man auch die zensur- und ueberwachungsfreaks. aber die computerbild hats einfacher: mal schnell ne liste mit 1750 “teuflischen” programmen gemacht, die sie wahrscheinlich selbst mit ihren heft dvds verteilt haben 😉 (das sollte mal jemand nachpruefen… ist bestimmt nicht so weit her geholt)

tsql – zeilenanzahl aller tabellen

es gibt viele unterschiedliche wege, die zeilenanzahl aller tabellen in einer datenbank einzeigen zu lassen. gerade wenn man noch anfaenger ist, landet man erstmal bei dem altbekannten:

SELECT COUNT(*) FROM TABELLE

…was man dann fuer jede tabelle machen muss. schnell hat man sich einen cursor drumherum gebaut damit das fuer alle tabellen in einer datenbank macht.

-- BEISPIEL 1

DECLARE @tables TABLE (
	tablename	varchar(255),
	rowcounter	int
)

DECLARE @table_name varchar(255)
DECLARE @SQLSTATEMENT nvarchar(255)
DECLARE @x int

DECLARE cur CURSOR FOR
	SELECT table_name 
	FROM information_schema.tables 
	WHERE TABLE_TYPE = 'BASE TABLE'
OPEN cur
FETCH FROM cur INTO @table_name
WHILE @@fetch_status = 0
BEGIN
	SET @SQLSTATEMENT = 
	 N'SELECT @x = COUNT(*) FROM ' + @table_name
	EXEC sp_executesql
		@SQLSTATEMENT,
		N'@x int OUTPUT',
		@x OUTPUT

	INSERT INTO @tables (tablename, rowcounter) 
	VALUES (@table_name, @x)
	FETCH FROM cur INTO @table_name
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM @tables ORDER BY tablename

das ist natuerlich viel code fuer das bischen abfrage. es geht naemlich auch kuerzer mit der (von microsoft undokumentierten) sql-server internen stored procedure sp_MSforeachtable

-- BEISPIEL 2

CREATE TABLE #TABLEROWCOUNT
(
 TABLENAME sysname,
 ROWCOUNTER int
)
EXEC sp_MSforeachtable 
'INSERT #TABLEROWCOUNT (TABLENAME,ROWCOUNTER) 
SELECT ''?'',Count(*) from ?'
SELECT * FROM #TABLEROWCOUNT
DROP TABLE #TABLEROWCOUNT

schick ist das aber immer noch nicht. eleganter und performanter und ausfuehrlicher gehts mit einer (auch in sql server inegrierten) stored procedure namens sp_spaceused:

-- BEISPIEL 3

DECLARE @tables TABLE (
	tablename	varchar(255),
	rowcounter	int,
	reserved	varchar(255),
	data		varchar(255),
	index_size	varchar(255),
	unused		varchar(255)
)

DECLARE @table_name varchar(255)
DECLARE cur CURSOR FOR
	SELECT table_name 
	FROM information_schema.tables 
	WHERE TABLE_TYPE = 'BASE TABLE'
OPEN cur
FETCH FROM cur INTO @table_name
WHILE @@fetch_status = 0
BEGIN
	INSERT INTO @tables
	(tablename, rowcounter, reserved,
	data, index_size, unused)
	EXEC sp_spaceused @table_name
	FETCH FROM cur INTO @table_name
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM @tables ORDER BY tablename

das schoenste und auch schnellste statement ist dieses hier (funktioniert erst ab sql server 2005):

-- BEISPIEL 4
-- zeigt alle user tables und deren zeilenanzahl der aktuellen 
-- datenbank. ohne "IS_MS_SHIPPED = 0" in der where 
-- klausel werden noch die system objekte angezeigt. 

SELECT T2.NAME, T3.ROW_COUNT 
FROM SYS.INDEXES T1 
INNER JOIN SYS.OBJECTS T2 ON T1.OBJECT_ID = T2.OBJECT_ID 
INNER JOIN SYS.DM_DB_PARTITION_STATS T3 ON 
T1.OBJECT_ID = T3.OBJECT_ID AND T1.INDEX_ID = T3.INDEX_ID
WHERE T1.INDEX_ID < 2 
AND T2.IS_MS_SHIPPED = 0 
ORDER BY T2.NAME

wenn man sich die performance der vier beispiele betrachtet wird schnell klar, welches man fuer groessere datenbanken nicht mehr gebrauchen kann. ich hatte eine datenbank zum "ausprobieren", in der 475 millionen datensaetze auf 60 tabellen verteilt waren. das waren die laufzeiten in millisekunden:

BEISPIEL 1: 156183 ms ( ~ 2 minuten 60 sekunden)
BEISPIEL 2: 155573 ms ( ~ 2 minuten 59 sekunden)
BEISPIEL 3: 173 ms
BEISPIEL 4: 13 ms

ich denke, dass es zu den ergebnissen nicht viel zu sagen gibt.

mehr speicher frei als verfuegbar

ich hab ja schon oft screenshots von “rechenfehlern” in windows gepostet. hier ist mal wieder einer:

groesse 1,79 TB und davon sind 5,29 TB frei…