AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehler Table anlegen Primary Index
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler Table anlegen Primary Index

Ein Thema von stalkingwolf · begonnen am 15. Dez 2015 · letzter Beitrag vom 17. Dez 2015
Antwort Antwort
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#1

Fehler Table anlegen Primary Index

  Alt 15. Dez 2015, 15:16
Datenbank: Firebird • Version: 2.5 • Zugriff über: egal
Hallo zusammen,

ich habe ein Problem was sich mittlerweile häuft und ich habe keine Ahnung woran es liegt.

Wenn ich on the fly Tabellen in einer Firebirddatenbank anlegen möchte dann erhalte ich die Meldung

Code:
*** IBPP::SQLException ***
Context: Transaction::Commit

SQL Message : -607
This operation is not defined for system tables.

Engine Code   : 335544351
Engine Message :
unsuccessful metadata update
cannot create index MYINDEX
Dumpe ich per gbak -b -g die Datenbank und spiele sie wieder ein, dann funktioniert das erstellen der Tabelle.
Da das Flag -g für das aufräumen des Garbage steht vermute ich das die Datenbank vollmüllt.

Jemand eine Idee woran es liegen könnte?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Fehler Table anlegen Primary Index

  Alt 15. Dez 2015, 15:22
Wie sieht denn dein SQL Code dazu aus?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#3

AW: Fehler Table anlegen Primary Index

  Alt 15. Dez 2015, 15:36
das ist eigentlich egal.
Man kann auch einen 2 Zeiler als Beispiel schreiben. Der geht ebenfalls nicht durch.

Code:
CREATE TABLE MYTEST
(
   MYSNR Integer NOT NULL,
   CONSTRAINT MYINDEX PRIMARY KEY (MYSNR)
);
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Fehler Table anlegen Primary Index

  Alt 15. Dez 2015, 15:42
Wusste gar nicht dass man das so machen kann aber IBExpert z.B. erstellt erst die Tabelle nur mit den Feldern und fügt danach die Constraints hinzu:
Code:
CREATE TABLE BEISPIEL (
  ID INTEGER NOT NULL,
  FELD VARCHAR(20)
);

ALTER TABLE BEISPIEL ADD CONSTRAINT PK_BEISPIEL PRIMARY KEY (ID);
Versuch es vllt. mal so.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Fehler Table anlegen Primary Index

  Alt 15. Dez 2015, 21:45
das ist eigentlich egal.
Man kann auch einen 2 Zeiler als Beispiel schreiben. Der geht ebenfalls nicht durch.

Code:
CREATE TABLE MYTEST
(
   MYSNR Integer NOT NULL,
   CONSTRAINT MYINDEX PRIMARY KEY (MYSNR)
);
Sollte eigentlich funktionieren. Ich schätze mal, dass Du einfach bereits Objekte in Deiner DB hast, die genauso heißen. Betrifft hier mglw. 3 Objekt Namen, da er beim Index auf die Nase fliegt, aber wohl den PK Constraint Namen bzw. den Indexnamen für den PK constraint.*
Alternativ vielleicht ein Rechte Problem (sysdba Anmeldung).

Schau also einfach mal nach, was Du da schon rumfliegen hast. Gewohnheitsgemäß nimmt man ja für irgendwelche Testtabellen immer ähnliche Namen, z.B. 'test'

Und Zu dem Statement oben:
Du verwendest leider einen etwas irreführenden Namen für den Constraint. Hinter der Formulierung steckt:
FB-Engine, Lege mir einen Constraint namens MYINDEX an (und erzeuge nebenbei automatisch noch einen (unique-weil Primary Key) Index mit einem Namen, den Du Dir selbst ausdenken musst.)
Ergebnis: Der Constraint nennt sich ..Index und der zugehörige Index nennt sich .. unbekannt, die Engine denkt sich einen aus.

Nicht schlimm, aber kann Ärger geben. Nenn den Constraint lieber Rumpelstilzchen oder highlander(es kann nur einen geben), in jedem Fall besser als "..index"
Du nennst das "Nachname"-feld in der Kundentabelle ja vermutlich auch nicht "Vorname".

Idealerweise benennst Du den tatsächlichen Index auch gleich explizit, dann weißt Du im Zweifel beim Umbenennen, Löschen, Reindizieren, wie das Objekt wirklich benamt ist und musst den Namen nicht aus der Datenbank raussuchen, bevor Du es anpackst.

*Der wirkliche Indexname ist ja nicht angegeben, also vielleicht 4 objektnamen. Ich bin kein FB Spezi, weiß nicht, wie FB die (Index)Namen generiert.

P.S: Bevor Du lange nach den Objektnamen suchst. Versuch einfach mal das gleiche Statement mit komplett absurden Namen auszuführen für Table, Column, Constraint. Und noch mal explizit mit Indexname dazu. Vielleicht gehts, dann ist klar, was los ist.
Gruß, Jo

Geändert von jobo (15. Dez 2015 um 21:52 Uhr)
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#6

AW: Fehler Table anlegen Primary Index

  Alt 16. Dez 2015, 08:20
nein daran liegt es nicht. Ich hatte oben geschrieben das es nach einem gbak funktioniert.
Das Problem liegt nicht an dem Namen.
Das war auch nur ein Test. Die Tabellen lauten sonst anders und haben einen eindeutigen Namen.

Den Index ausserhalb vom CREATE TABLE aufzurufen bringt auch nichts. Fehlermeldung ist die gleiche.
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Fehler Table anlegen Primary Index

  Alt 16. Dez 2015, 11:37
[QUOTE=stalkingwolf;1324541Dumpe ich per gbak -b -g die Datenbank und spiele sie wieder ein, dann funktioniert das erstellen der Tabelle.
Da das Flag -g für das aufräumen des Garbage steht vermute ich das die Datenbank vollmüllt.

Jemand eine Idee woran es liegen könnte?[/QUOTE]

das -g räumt nur die Aktuelle Datenbank auf , es wird aber ohnehin nie Garbage ins Backup geschrieben , so dass es bei einem Restore unnötig ist ,

wie sieht es aus mit den Commits , und ist die Datenbank in Benutzung wenn die Tabellen erzeugt werden

Also so:
Commit
Create Table
Commit
Create Index
Commit


mfg Hannes
  Mit Zitat antworten Zitat
stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#8

AW: Fehler Table anlegen Primary Index

  Alt 17. Dez 2015, 08:50
Hallo.

Das ist ebenfalls egal. Ob wir es machen wenn die Datenbank in Benutzung ist oder wenn wir alleine darauf sind, die Meldung ist die gleiche.
Es hilft immer nur der gbak.
Die andere Variante haben wir auch probiert. Tabelle anlegen und commiten funktioniert. Index anlegen und der Fehler erscheint.

Wir arbeiten schon seit ein paar Jahren mit Firebird und hatten das Problem so eigentlich noch nie. Es tritt erst in der letzten Zeit häufiger vor. D.h etwas muss dafür ausschlaggebend sein, aber wir haben keinerlei Ansatz was es sein könnte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz