Sybase

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Die Firma Sybase (engl. system, database) wurde 1984 gegründet, hat ihren Firmensitz in Dublin (Kalifornien, USA) und ist Hersteller von Produkten in den Bereichen Informationsmanagement, Entwicklung und Integration, Mobile Lösungen und spezielle Geschäftslösungen. In diese Bereiche fallen vor allem Datenbanken, Entwicklungs- und Design-Werkzeuge, Synchronisations- und Replikations-Software sowie Produkte für das Mobile Enterprise (PDA, Handy usw.).

Die Stärken des RDBMS von Sybase sind:

  • Geschwindigkeit (besonders unter Linux)
  • einfache Installation und Administration
  • einfache Erlernbarkeit
  • gute Ausnutzung der Systemressourcen
  • Total Cost of Ownership

Produkte

Zu den bekanntesten Sybase-Produkten zählen:

Geschichte

Jahr Ereignis
1984 Firmengründung
"Sybase SQL Server" ist das erste Client-Server-RDBMS
1988 Sybase SQL Server 3.0 (stored procedures, trigger, cost-based query optimizer)
Microsoft vertreibt Sybase SQL Server als "Microsoft SQL Server" für OS/2 und (später) für Windows NT
1990 Sybase SQL Server 4.0: (Datentypen image und text)
Sybase SQL Server 4.9.2 entspricht Microsoft SQL Server Version 4.2.2
1993 Sybase SQL Server X (=10) (mit Backup Server, Identity-Spalten, Cursor)
1994 Verkauf des Quellcodes an Microsoft, getrennte Weiterentwicklung
1995 Sybase SQL Server 11.0 (named cache, dirty read, sp_sysmon)
1997 Umbenennung von Sybase SQL Server in "Adaptive Server Enterprise" (ASE) 11.5 (proxy-Tabellen, XP-Server)
1998 Sybase Adaptive Server Enterprise 11.9 EARL (eagerly awaited row-level locking)
1999 Sybase Adaptive Server Enterprise 12.0 (Änderung Installationsbaum, Java-Unterstützung)
2001 Sybase Adaptive Server Enterprise 12.5 (union views, wählbare Pagegrösse)
2003.10 Sybase Adaptive Server Enterprise 12.5.1 (Datentypen date und time Datentypen, dynamic data cache)
2005 Sybase Adaptive Server Enterprise 12.5.3 und Sybase Adaptive Server Enterprise 15.0 (verbesserter Optimizer, computed columns, acrollable cursors, Datentyp unitext)
2006 Sybase Adaptive Server Enterprise 12.5.4 und Sybase Adaptive Server Enterprise 15.0.1

Verwendung

Anzahl der Benutzer mit männlichem Geschlecht.

select count(*) from d02ben where d02sex="M"

Anzahl der Benutzer von Zweigstelle 00, die seit dem 1. Dezember 2001 aktiv waren.
Achtung: Die Werte von Feldern (hier "d02zweig") des Typs SMALLINT dürfen nicht in Anführungszeichen gesetzt werden!

select count(*) from d02ben where d02ladatum>"30.11.2001" and d02zweig=00

Anzeige der Mediennummer aller Buchdatensätze, die seit dem 3. Juli 2003 zurückgegeben wurden.

select d01gsi from d01buch where d01lrv2>="03.07.2003"

Anzeige der Mediennummer aller Buchdatensätze, die in der Abteilung 01 der Zweigstelle 00 stehen.
Achtung: Die Werte von Feldern (hier "d01abtlg" und "d01zweig") des Typs SMALLINT dürfen nicht in Anführungszeichen gesetzt werden!

select d01gsi from d01buch where d01abtlg=01 and d01zweig=00

Anzeige von Mediennummer und Signatur aller Buchdatensätze mit mehr als drei Vormerkungen.
Achtung: Die Werte von Feldern (hier "d01vmanz") des Typs SMALLINT dürfen nicht in Anführungszeichen gesetzt werden!

select d01gsi, d01ort from d01buch where d01vmanz>3

Anzeige von Signatur, Mediennummer, Anzahl der Ausleihen im Vorjahr sowie Anzahl der Ausleihen im laufenden Jahr aller Buchdatensätze mit der Systematiknummer 10. Achtung: Die Werte von Feldern (hier "d01abtlg" und "d01mart") des Typs SMALLINT dürfen nicht in Anführungszeichen gesetzt werden!

select d01ort, d01gsi, d01svjanz, d01sljanz from d01buch where d01mart=10

Anzeige der aktuellen Datenbank.

select db_name()

Zur Ausführung von Abfragen innerhalb eines Skripts können zwei Schreibweisen verwendet werden.

/opt/sybase/OCS-12_5/bin/isql -b -s "|" -w 1024 -U<Benutzer> -P<Passwort> -D<Datenbank> <<!!! >> /tmp/ausgabedatei
select count(*) from d02ben
go
!!!

oder

printf "select count(*) from d02ben\ngo\n" |\
/opt/sybase/OCS-12_5/bin/isql -b -s "|" -w 1024 -U<Benutzer> -P<Passwort> -D<Datenbank> >> /tmp/ausgabedatei

Datenbankchecks

#!/bin/bash
#
# Sybase ASE database checks for database "sisis"
#
## set -x

PASSWORD=xxxxxx                   # Password for user "sa"
PATH=$PATH:/usr/local/bin
. /opt/lib/sisis/etc/syb.rc

for DATABASE in sisis
  do
  SC_SQL="/opt/sybase/OCS-12_5/bin/isql -b -w 160 -Usa -P${PASSWORD} -SsisisSYB -D${DATABASE}"
  printf "dbcc checkdb(${DATABASE})\ngo\n" | $SC_SQL > /tmp/infofile1.checkdb.${DATABASE}
  printf "dbcc checkcatalog(${DATABASE})\ngo\n" | $SC_SQL > /tmp/infofile2.checkcatalog.${DATABASE}
  printf "dbcc checkalloc(${DATABASE}, nofix)\ngo\n" | $SC_SQL > /tmp/infofile3.checkalloc.${DATABASE}
  done

Im Fehlerfall ausführen des Datenbankchecks im "single user"-Modus.

$ SybSQLsa
1> use master
2> go
1> sp_dboption msisis, "single user", true
2> go
Database option 'single user' turned ON for database 'msisis'.
Running CHECKPOINT on database 'msisis' for option 'single user' to take effect.
(return status = 0)
1> use msisis
2> go
1> checkpoint
2> go
1> dbcc checkalloc
2> go
1> use master
2> go
1> sp_dboption dbname, "single user", false
2> go
1> use dbname
2> go
1> checkpoint
2> go

Fehlermeldungen

Hängende Bandsicherung sichtbar in "sisisSYBbackup.errorlog".

May 15 22:00:00 2006: Backup Server: 6.53.1.1: OPERATOR: Volume on device '/dev/ nrmt0' cannot be opened for write access. Mount another volume.
May 15 22:00:00 2006: Backup Server: 6.78.1.1: EXECUTE sp_volchanged
       @session_id = 18,
       @devname = '/dev/nrmt0',
       @action = { 'PROCEED' | 'RETRY' | 'ABORT' },
       @vname = <new_volume_name>

Abbrechen mit

1> sp_volchanged 18, '/dev/nrmt0', 'ABORT'

Danach manuelle Sicherung durchführen.

Transaktionen

Verhindern des Abschneidens der Transaktionslogs (normaler Zustand für den Datenbankbetrieb mit SISIS-SunRise).

 # su - sisis
 $ $SYBASE/OCS-12_5/bin/isql -Usa -Pxxxxxx -SsisisSYB
 1> sp_dboption sisis, "trunc. log on chkpt.", false
 2> go
 1> use sisis
 2> go
 1> checkpoint
 2> go
 1> quit

Löschen aller inaktiven Transaktionen aus den Logs der Datenbank "sisis". Es wird dabei keine Kopie des Logs erstellt.

 # su - sisis
 $ $SYBASE/OCS-12_5/bin/isql -Usa -Pxxxxxx -SsisisSYB
 1> dump tran sisis with truncate_only
 2> go

Datenbankdevices löschen

Beispiel.

 1> drop database abc
 2> go
 1> sp_dropdevice DATAabcDev
 2> go
 1> sp_dropdevice LOGabcDev
 2> go

Sybase-Server stoppen.

Physikalische Dateien löschen.

Sybase-Server wieder starten.

Datenbank entladen und laden

Erstellen einer Sicherung mit Skript "SYBASEsave.sh".

#!/bin/bash
#
# Sybase ASE database backup
#
PATH=$PATH:/usr/local/bin
. $(pkgparam sisisbase SISISROOT)/etc/syb.rc
# Password of Sybase user "sa"
PASSWORD=$(cat $SISISROOT/etc/syb/syb.pw | grep ^sa: | awk -F: '{ print $2 }' | tr -d '\012')
BACKUPPATH=/backup/sybase
SC_SQL="/opt/sybase/OCS-12_5/bin/isql -Usa -P${PASSWORD} -SsisisSYB"

for DATABASE in bsisis gsisis lsisis msisis sisis
  do
  DATE=$(date +%Y%m%d-%H%M)
  printf "dump database ${DATABASE} to \"compress::${BACKUPPATH}/DBSAVE${DATABASE}.${DATE}.cdmp\"\ngo\n" | $SC_SQL
  done

Erstellen einer Sicherung der Datenbank "sisis".

 $ $SYBASE/OCS-12_5:/bin/isql -Usa -Pxxxxxx
 1> dump database sisis to "/backup/sybase/dump-1"
 2> stripe on "/backup/sybase/dump-2"
 3> stripe on "/backup/sybase/dump-3"
 4> go

Datenbank "sisis" in bestehenden DBspace laden.

 $ $SYBASE/OCS/bin/isql -Usa -Pxxxxxx
 1> load database sisis from "/backup/sybase/dump-1"
 2> stripe on "/backup/sybase/dump-2"
 3> stripe on "/backup/sybase/dump-3"
 4> go
 1> online database sisis
 2> go

Jeder "dump"- bzw. "load"-Befehl kann bis zu 31 "stripe on"-Klauseln besitzen (was insgesamt 32 dump devices ergibt).

Entladen von Daten

Schreiben der Ergebnisse einer Abfrage in die Datei "/tmp/outfile".

$ printf "select count(*) from d01buch\ngo\n" |  \
    /opt/sybase/OCS-12_5/bin/isql -b -s "|" -w 1024 \
      -U<Benutzer> -P<Passwort> -D<Datenbank> > /tmp/outfile

entladen.sh

#!/bin/sh
read -p "Select-Abfrage? " abfrage
if [ "$(echo "$abfrage" | awk '{ print $1 }')" != "select" ]; then
  echo "Der Befehl beginnt nicht mit \"select\" - Abbruch!!!"
  exit 1
fi
tmp=$(mktemp /tmp/temp.XXXXXX)
echo ""
echo "Die Abfrage wird jetzt ausgeführt..."
printf "${abfrage}\ngo\n" | \
  $SC_SQL -b -s ";" -w 1024 -Usisis -P<password> -SsisisSYB -Dsisis > ${tmp}
echo ""
echo "Die ersten 10 Zeilen der Entladedatei sehen so aus:"
echo ""
head ${tmp}
echo ""
echo "Die Datei steht unter ${tmp}"
echo ""

dbtool

Unter Sybase kann mit dem SISIS-tool "dbtool" entladen werden (leider nicht so bequem wie unter Informix mit "unload").

login: sisis
$ export DBS=syb DATABASE=sisis
$ /home/sisis/sc/dbtool steuerdatei

Die Steuerdatei muss vorher mit "vi" angelegt werden:

1. Entladen aller Datensätze

@@UNLOAD sisisinst /tmp/sisisinst.load
@@END

2. Entladen aller Datensätze, aber nur zwei Spalten

@@UNLOAD sisisinst /tmp/sisisinst.load
@@FIELDS
datum
version
@@END

3. Entladen von zwei Spalten mit where-Bedingung

@@UNLOAD sisisinst /tmp/sisisinst.load
@@FIELDS
datum
version
@@WHERE
version=V3.0A00
@@END

Ausgabe von Systematiknummer und Mediennummer aller Buchdatensätze mit der Systematiknummer 11 in die Datei "/tmp/ergebnis". Achtung: Die Werte von Feldern (hier "d01mart") des Typs SMALLINT dürfen nicht in Anführungszeichen gesetzt werden!

 @@UNLOAD d01buch /tmp/ergebnis
 @@FIELDS
 d01mart
 d01gsi
 @@WHERE
 d01mart=11
 @@END

4. Entladen von zwei Spalten aus zwei unterschiedlichen Tabellen

Zuerst muss ein view (hier "bibliotheca") angelegt werden.

$ $SYBASE/OCS/bin/isql -Usisis -Psisis123 -SsisisSYB -Dsisis
1> create view bibliotheca as
2> select d01gsi, titel from d01buch, titel_dupdaten where d01katkey=katkey
3> go
1> quit
$ export DBS=syb
$ export DATABASE=sisis
$ /home/sisis/sc/dbtool
connected to Sybase:sisis
@@UNLOAD bibliotheca /tmp/bibliotheca.unl
@@END
begin operation: UNLOAD (bibliotheca)
370020 rows unloaded...
command executed
CTRL+C

loadINFintoSYB.sh.txt

Achtung: Zu diesem Thema gibt es auch ein offizielles Dokument.

Wechsel ins Verzeichnis, wo sich die Informix db-schema-Datei befindet und Setzen der Umgebung. Name der Beispieldatenbank ist hier "kbu".

 $ cd ..../dbexport.kbu
 $ export DBS=syb
 $ export DATABASE=kbu
 $ export SISISHOME=$(pkgparam sisisbase SISISHOME)
 $ export LANG=de
 $ export AREA=/tmp

Hinzufügen des Pfads zu Perl zur Variable PATH.

 $ export PATH=$PATH:/usr/local/sisis-pap/bin

Aufruf des Skripts "loadINFintoSYB.sh".

 $ $SISISHOME/sc/loadINFintoSYB.sh -a

Eine einzelne Tabelle kann wie folgt aus einer Datei geladen werden.

 $ $SISISHOME/sc/loadINFintoSYB.sh -t <Tabellenname> -f <Informix-unload-Datei>

Weblinks