Samstag, 13. Januar 2007
Noch ein Blog
Ein Blog?

Ist das nicht zu wenig?

Es gibt jetzt noch einen Dienstlichen Blog an der Universität über Datenbanken:

http://www.blogs.uni-erlangen.de/db/

Zukünftig werde ich dort alles über Datenbanken kund tun und nur noch ausgewählte wichtige Informationen hier und dort.

... link (0 Kommentare)   ... comment


Freitag, 29. Dezember 2006
Firebird 1.5.4 RC
Der nächste Release-Kandidat des firebird Servers ist erschienen.

Die Version 1.5.4 ist eine Version, in der einige Bugfixes der Version 2.0 in die Version 1.5 zurückübertragen wurden.

Release-Notes unter http://www.ftp.uni-erlangen.de/pub/firebird/doc/rlsnotes154_02.pdf

Download von Sourceforge oder http://www.ftp.uni-erlangen.de/pub/firebird

... link (0 Kommentare)   ... comment


Mittwoch, 20. Dezember 2006
Firebird Roadmap 2007
Das Firebird Team hat eine Roadmap - wie auf der Firebird Konferenz angekündigt - ins Netz gestellt:

http://www.firebirdsql.org/index.php?op=devel&sub=engine&id=roadmap_2007&nosb=1

... link (0 Kommentare)   ... comment


Sonntag, 8. Oktober 2006
Firebird Konferenz No. 4 in Prag
Auch dieses Jahr gibt es - diesmal in einem besseren Hotel - eine Firebird Konfernez in Prag.

Im Gegensatz zur letzten Konferenz gibt es einen etwas früheren Beginn, d.h. es gibt schon Vorträge am Sonntag Nachmittag vor dem Opening!

Ich habe mich durchgerungen, auch ein paar "paper" einzureichen und prompt darf ich mit Dirk zwei Vorträe halten.

Bin ja mal gespannt.

Als Nebeneffekt kann ich auf die Konfernez fahren, da die Uni die Konferenz dieses Jahr nicht gezahlt hätte...

Es muß eben überall gespart werden, koste es, was es wolle.

... link (0 Kommentare)   ... comment


Mittwoch, 4. Oktober 2006
Firebird 2.0 RC5 - letzer RC?
Ab sofort ist Firebird 2.0 RC 5 als vmtl. letzter Release Candidate verfügbar.

Download - wie immer - über sourceforge.net:

http://www.firebirdsql.org/index.php?op=files&id=fb2_rc5

... link (1 Kommentar)   ... comment


Montag, 17. Juli 2006
gbak-Probleme
Es ist ein bekanntes Problem, das gbak Probleme beim restaurieren von Rechten von Objekten hat, die zu lang sind. Zu lang bedeutet dabei, dass sie nicht länger als 27 Zeichen sein dürfen.

Hier eine kleine Prozedur, die Hinweise gibt, wo etwas zu lang ist. Da in den Meta-Tabellen leider CHAR-Felder sind, sind ein paar Routinen aus UDFs nötig.

SET TERM ^ ;

CREATE PROCEDURE "PROCSYS_DBCheckLong"
RETURNS (
Res VARCHAR(84),
Fld VARCHAR(60),
Typ CHAR(10))
AS
DECLARE VARIABLE Rn CHAR(31);
DECLARE VARIABLE Rf CHAR(31);
DECLARE VARIABLE Ruser CHAR(31);
DECLARE VARIABLE L BIGINT;
begin
FOR SELECT P.RDB$RELATION_NAME, P.RDB$FIELD_NAME, P.RDB$USER FROM RDB$USER_PRIVILEGES P
INTO :RN, :RF, :RUSER DO BEGIN
FLD = RTRIM(RN);
IF (Strlen(FLD) > 27) THEN BEGIN
RES = FLD || ' zu lang';
TYP = 'N';
suspend;
END

FLD= RTRIM(RF);
IF (Strlen(FLD) > 27) THEN BEGIN
RES = FLD || ' zu lang';
TYP = 'F';
suspend;
END

FLD= RTRIM(RUSER);
IF (Strlen(FLD) > 27) THEN BEGIN
RES = FLD || ' zu lang';
TYP = 'U';
suspend;
END
END

end^

SET TERM ; ^

DESCRIBE PROCEDURE "PROCSYS_DBCheckLong"
'Überprüft Struktur auf zu lange Konstrukte, die bei FB gbak Probleme beim
Restaurieren machen
Typ:
T: Table
F: Feld
U: User';

Falls jemand eine andere Idee hat, Hinweise willkommen!

... link (0 Kommentare)   ... comment


Primärschlüssel Korrektur
Es ist lästig.

Man hat eine schöne Firebird Datenbank mit Generatoren (Oder Sequences) um Primärschlüssel zu füllen und dann leert man die DB um vor der scharfen Verwendung noch einmal sauber Daten zu importieren.

Dann passen die Generatoren aber nicht mehr und werden unnötig gross.

Ja, ich weis, es ist nur Kosmetik, aber warum nicht.

Hier eine Prozedur, die - wenn die Namenskonvention GEN__<field> eingehalten ist (wobei <field> auch weggelassen sein kann), Generatoren zu Tabellen findet, ein SELECT MAX(*) .. macht und den Generator entsprechend korrigiert.

SET TERM ^ ;

CREATE PROCEDURE "PROCSYS_DBCheckPKValues" (
"ShowOnly" SMALLINT,
"HideNothingToDo" SMALLINT)
RETURNS (
"Name" VARCHAR(32),
"MaxId" BIGINT,
"MaxGen" BIGINT,
"Message" VARCHAR(80),
"GenName" VARCHAR(32))
AS
DECLARE VARIABLE Q VARCHAR(1000);
DECLARE VARIABLE "Gen" VARCHAR(32);
DECLARE VARIABLE "Count" BIGINT;
begin
if ("ShowOnly" IS NULL) then
"ShowOnly" = 1;

if ("HideNothingToDo" IS NULL) then
"HideNothingToDo" = 1;

FOR SELECT RDB$RELATION_NAME --, RDB$DESCRIPTION
FROM RDB$RELATIONS R
WHERE RDB$VIEW_BLR IS NULL AND RDB$SYSTEM_FLAG = 0
-- AND (((RDB$RELATION_NAME starting with 'FAU') AND (RDB$RELATION_NAME containing '_')) OR (RDB$RELATION_NAME = 'DBINFO'))
ORDER BY 1
INTO :"Name" --, :"Description"
DO BEGIN

"Name" = RTrim("Name");

"Message" = '';
BEGIN
"MaxId" = NULL;
Q = 'SELECT CAST(Max("Id") AS BIGINT), CAST(Count("Id") AS BIGINT) FROM "'|| "Name"||'";';
EXECUTE STATEMENT Q INTO :"MaxId", :"Count";
WHEN ANY DO
"MaxId" = NULL;
END

if ("MaxId" IS NULL) then begin
"MaxId" = NULL;
Q = 'SELECT CAST(Max("ID") AS BIGINT), CAST(Count("ID") AS BIGINT) FROM "'|| "Name"||'";';
EXECUTE STATEMENT Q INTO :"MaxId", :"Count";
WHEN ANY DO
"MaxId" = NULL;
end

BEGIN
"Gen" = 'GEN_'||"Name"||'_ID'; -- Gesuchert Name

"GenName" = NULL; -- Echter Name
SELECT RDB$GENERATOR_NAME
FROM RDB$GENERATORS
WHERE ((RDB$SYSTEM_FLAG IS NULL) or (RDB$SYSTEM_FLAG = 0)) AND UPPER(RDB$GENERATOR_NAME) = UPPER(:"Gen")
INTO :"GenName";

if ("GenName" IS NULL) then begin
"Gen" = 'GEN_'||"Name";
--"GenName" = NULL;
SELECT RDB$GENERATOR_NAME
FROM RDB$GENERATORS
WHERE ((RDB$SYSTEM_FLAG IS NULL) or (RDB$SYSTEM_FLAG = 0)) AND UPPER(RDB$GENERATOR_NAME) = UPPER(:"Gen")
INTO :"GenName";
end

if ("GenName" IS NOT NULL) then begin
"GenName" = RTrim("GenName");
"MaxGen" = NULL;
Q = 'SELECT GEN_ID("'||:"GenName"||'",0) FROM RDB$DATABASE;';
EXECUTE STATEMENT Q INTO :"MaxGen";
end else
"MaxGen" = NULL;
WHEN ANY DO
"MaxGen" = NULL;
END

if ("MaxId" IS NULL) then begin
if ("Count" = 0) then begin
-- "Message" = 'Tabelle ist leer!';
"MaxId" = 0; -- Bei leerer Tabelle Wert auf 0 setzen
end else
"Message" = 'Tabelle hat kein Standardformat oder Sie keine Rechte!';
end else if ("MaxGen" IS NULL) then
"Message" = 'Generator '|| COALESCE("GenName","Gen",'ohne Namen') || ' nicht gefunden oder keine Rechte!';


if ("Message" = '') then begin
if ("MaxGen" <> "MaxId") then begin -- Korrektur notwendig --
if ("ShowOnly" = 0) then begin
"Message" = 'Generator korrigiert um '|| (:"MaxId"-:"MaxGen");
Q = 'SET GENERATOR "'||:"GenName"|| '" to '|| "MaxId"||';';
EXECUTE STATEMENT Q;
WHEN ANY DO
"Message" = 'Fehler bei Korrektur des Generators '||"GenName";
end else begin
-- ShowOnly = 1
"Message" = 'Generator sollte korrigiert werden um '|| (:"MaxId"-:"MaxGen");
end

if ("HideNothingToDo" = 1) then
suspend;

end else begin
"Message" = 'Generator und Tabelle passen zusammen';
end
end -- If

if ("HideNothingToDo" <> 1) then
suspend;
end -- FOR SELECT
end^

SET TERM ; ^

DESCRIBE PROCEDURE "PROCSYS_DBCheckPKValues"
'Überprüft alle Primärschlüssel-Werte und passt ggf. Generatoren AND, die in der Form GEN_<TABLENAME>_ID sind';

DESCRIBE PARAMETER "ShowOnly" PROCEDURE "PROCSYS_DBCheckPKValues"
'1= Nur Anzeige, sonst auch korrigieren';

DESCRIBE PARAMETER "HideNothingToDo" PROCEDURE "PROCSYS_DBCheckPKValues"
'1 = Verstecke alle, bei denen nichts zu tun ist';

... link (0 Kommentare)   ... comment


Dienstag, 4. Juli 2006
Firebird 2.0 RC 3
Ist soeben veröffentlicht worden

Windows Builds sind noch nicht auf allen SF-Mirrors. Alos etwas Geduld....

... link (0 Kommentare)   ... comment


Donnerstag, 18. Mai 2006
Firebird 2.0 RC 2
Soeben ist die Verfügbarkeit von Firebird 2.0 RC2 der sog. "gold beta" bekannt geworden.

Download über die bekannten Links.

Diese Version soll quasi Produktionsreif sein, d.h. man kann sie fast in produktivumgebungen einsetzen.

Ein Insider wird mit der Aussage zitiert, dass ein RC von Firebird stabiler wäre, als manche Releases großer Softwarehersteller.

... link (0 Kommentare)   ... comment


Dienstag, 4. April 2006
Firebird 2.0 RC1
Der erste Release Candidate von Firebird 2.0 ist erschienen!

Damit rückt der Release Termin in eine nahe Zukunft....

... link (0 Kommentare)   ... comment