•  
  • Archives for August 2010 (5)

Jquery – jQuery.ajax vereinfachen durch ajax.post

by Maik
Categories: Allgemein
Tags: No Tags
Comments: No Comments
Published on: 08.08.2010

Um den Javascript/Jquery Quellcode nicht zu sehr wachsen zu lassen, möchte ich auf zwei alternative (und kürzere) Möglichkeiten bei jQuery hinweisen.
Um einen AJAX POST abzusetzen muss man nicht unbedingt mit jQuery.ajax… arbeiten. Es reicht wenn man

$.post("/rabattSpeichern", function(data){
   alert(data); // Ausgabe des Antwortstrings
 });

verwendet.
Was ich jetzt erst entdeckt habe, ist das JSON Format. Es ist sehr einfach zu verwenden und man kann damit Traffic sparen, da nur Daten, ganz ohne HTML-Overhead, übertragen werden. Meist möchte man ja nicht unbedingt nur einen Wert zurück geben, sondern viele. Mit JSON kann man Arrays aus PHP direkt an Javascript übergeben, so dass man auch große Datenmengen zurück geben kann, ohne dass es langsam wird.
PHP Array:

Array
(
    [ok] => Gespeichert
    [daten] => Array
        (
            [a1] => 1
            [a2] => 2
        )
)
function rabattSpeichern(id, rabatt) {
  var data = {'id': id,'rabatt':rabatt };
  jQuery.post('/rabattSpeichern', data, function (JSON) {
    alert(JSON.ok); // Gibt "Gespeichert" zurück
    jQuery.each(JSON.daten, function(key, data)
    {
      alert(key+' '+data);
    });
  }, "json");
// wichtig ist der letzte Parameter "json", damit weiß jQuery,
// dass die zurück kommenden Daten im JSON-Format vorliegen
}

Update mit Joins – MSSQL

by Maik
Categories: Allgemein
Tags: No Tags
Comments: No Comments
Published on: 08.08.2010

Wenn man in Datenbanken mit starker Normalisierung arbeitet, ist es mitunter mühselig die einzelnen Tabellen mit unterschiedlichen SQLs “upzudaten”. Aber es gibt auch die Möglichkeit UPDATE – SQLs mit JOIN zu verknüpfen.

UPDATE adressen
SET name = z.name, plz = z.plz, ort = z.ort
FROM adressen As a
INNER JOIN
  (SELECT name, plz, ort, kundennummer
       FROM
       Buchung_Leistung as b
       WHERE buchung_id = @id
  ) As z
	On z.kundennummer = a.kundennummer

Besser Beispiele und eine gute Anleitung findet man unter:
http://www.sql-und-xml.de/sql-tutorial/update-aktualisieren-der-zeilen.html

größe aller Tabellen ermitteln – MSSQL

by Maik
Categories: Allgemein
Tags: No Tags
Comments: Kommentare deaktiviert
Published on: 06.08.2010
Tabellengrösse in MSSQL
Tabellengrösse MSSQL

Wenn man bei der täglichen Datensicherung so überprüft, fällt einem ab und zu ein richtig großer Brocken auf. Bei Dateien ist das kein Problem, bei Datenbanken hingegen schon. Wenn die SQL-Datenbank plötzlich mehrere Gigabyte (GB) groß ist, fragt man sich, woher das kommt. Es gibt die Möglichkeit, auf jede Tabelle zu klicken und dann
Um den Überblick über alle Tabellen und deren größte Speicherfresser in einer Datenbank zu erhalten, braucht man nur die folgende Prozedur.

CREATE PROCEDURE [dbo].[Groesse_aller_Tabellen_einer_DB]
AS
BEGIN
SET NOCOUNT ON;

declare @RowCount int, @tablename VARCHAR(100)
declare @Tables table (
PK int IDENTITY(1,1),
tablename VARCHAR(100),
processed BIT
)
INSERT INTO  @Tables (tablename)
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' and TABLE_NAME NOT LIKE 'dt%' ORDER BY TABLE_NAME asc

declare @Space TABLE (
name VARCHAR(100), rows nVARCHAR(100), reserved VARCHAR(100), data VARCHAR(100), index_size VARCHAR(100), UNUSED VARCHAR(100)
)
SELECT TOP 1 @tablename = tablename FROM @Tables WHERE processed IS NULL
SET @RowCount = 1
WHILE (@RowCount != 0)
BEGIN
insert INTO  @Space exec sp_spaceused @tablename
UPDATE @Tables set processed = 1 WHERE tablename = @tablename
SELECT TOP 1 @tablename = tablename FROM @Tables WHERE processed IS NULL
SET @RowCount = @@RowCount
END

UPDATE @Space set data = replace(data, ' KB', '')
UPDATE @Space set data = convert(int, data)/1000
UPDATE @Space set data = data + ' MB'
UPDATE @Space set reserved = replace(reserved, ' KB', '')
UPDATE @Space set reserved = convert(int, reserved)/1000
UPDATE @Space set reserved = reserved + ' MB'

SELECT * FROM @Space ORDER BY CONVERT(INT, REPLACE(data, ' MB', '')) DESC
END

MySQL Daten Sichern – automatisches Backup

by Maik
Categories: Allgemein
Tags: No Tags
Comments: No Comments
Published on: 05.08.2010

Einen Server bei einem der großen Hoster (Hetzner, 1&1 usw.) stehen zu haben ist schon toll. Man muss sich keine Gedanken um Stromkosten, Überhitzung und andere Dinge Gedanken machen. An eines sollte man aber immer denken, an die Datensicherung!
Um dies so automatisiert wie möglich zu machen, hier eine kurze Anleitung.
Als erstes müssen wir ein Backup der Datenbank machen. Dies kann man zwar auch über PhpMyAdmin versuchen, ab einer gewissen DB-Größe geht das aber schief. Außerdem ist der Mensch von Natur aus faul, deshalb hier ein Linux-Bash-Script, bzw. das Ganze gleich in die Cronjob (crontab -e) geschrieben:

# m h  dom mon dow   command
 5 0 * * * root /var/backup/backup.sh

Dieser wird täglich um 00:05 Uhr als “root” ausgeführt.
Die Datei “/var/backup/backup.sh” sieht dann ungefähr so aus:

mysqldump -ubenutzer -ppasswort -Q --all-databases > /var/backup/mysql_backup.sql
tar -zcvpf /var/backup/backup`date +%Y-%m-%d`.tar.gz /var/backup/mysql_backup.sql

Ein mysqldump mit dem angegebenen Benutzernamen, Passwort und aller Datenbanken wird nach /var/backup ablegt. Dannach wird dieser in eine Datei mit dem aktuellem Datum im Namen gezippt.
Damit die Daten auch vom Server gesichert werden können, gibt es viele Möglichkeiten. Wenn man bei sich einen Linuxserver hat, kann man auch diesen Schritt mit einem Cronjob automatisieren.

 /usr/bin/rsync -aptz -e "ssh -i /home/id_rsa" user@server:/var/backup/ /var/backup/

Dieser Job wird auf dem lokalen Server ausgeführt. Er synchronisiert unser Backup-Verzeichnis mit dem lokalen Verzeichnis und kopiert so die gesicherte Datenbank zu uns.
Das Verfahren zur automatischen Generierung eines SSH-Keys habe ich hier bereits kurz beschrieben.

Tabellenspaltennamen in MSSQL suchen

by Maik
Categories: SQL
Tags: No Tags
Comments: No Comments
Published on: 04.08.2010

Manchmal passiert es, dass man eine bestimmte Tabellenspalte sucht, aber nicht weiß, in welcher Tabelle diese enthalten ist. Ich hatte das Problem, dass eine Tabelle in einem externen Programm Probleme bereitet hat. Natürlich habe ich keine Chance das Programm zu debuggen, ich habe aber heraus bekommen, dass eine View für den Fehler verantwortlich ist. Das einzige was ich heraus bekam war aber nur der Spaltenname und nicht die Tabelle. Um nicht jede Tabelle einzeln öffnen zu müssen hat mir die folgende SQL weiter geholfen.

SELECT table_name = sysobjects.name,
column_name = syscolumns.name,
datatype = systypes.name,
length = syscolumns.length
FROM sysobjects
JOIN syscolumns ON sysobjects.id = syscolumns.id
JOIN systypes ON syscolumns.xtype=systypes.xtype
WHERE syscolumns.name like 'msrep%' -- natürlich den gesuchten Tabellenspaltennamen
ORDER BY sysobjects.name,syscolumns.colid
page 1 of 1

Welcome , today is Sonntag, 05.02.2012