none
Schemaänderung an Tabellen nach Upgade auf SQL2008 RRS feed

  • Frage

  • Hallo Zusammen,

     

    ich habe eine Datenbank von SQL2005 auf SQL2008 migriert, hat auch alles soweit funktioniert. Nun habe ich aber noch diverse

    Tabellen in der Datenbank wo ich das Schema gerne wieder auf DBO ändern würde. Wie das gemacht wird ist mit klar.

    Hintergrund ist, das dort nach einer AD-Migration noch alte User-Konten als Schema definiert sind. Liegt wohl daran, das diese User sich über ODBC verbunden haben und eben diese Tabellen erstellt haben.

    Meine Frage ist nun, welchen Einfluss auf die Funktion der Datenbank selber hat die Änderung des Schemas einer Tabelle. Ist das Schema einer Tabelle irgendwo verlinkt was zu Problemen führen könnte oder wird dies durch "Alter Schema" überall geändert.

     

    Gruß

    Markus

     

    Montag, 9. August 2010 15:11

Antworten

  • Hallo Markus,

    gespeicherte Prozeduren, Funktionen und Sichten lassen sich einfach anpassen. Man sollte nur deren DDL Skripte generieren, alten Namen durch neuen ersetzen und die Skripte ausführen.

    Vorgehensweise: Erstellen eines Skripts (SQL Server Management Studio) 

    Zweite Möglichkeit wäre, Synonymen einzusetzen.

    Verwenden von Synonymen (Datenbankmodul)


    Gruß Yury
    Dienstag, 10. August 2010 06:24
  • ---------------------------------
    -- Yury Iwtschenko
    -- 2010-08-10
    ---------------------------------
    ;with [Object] as
    (
    	select
    		(referenced_schema_name+'.'+referenced_entity_name) as Name
    	from
    		sys.sql_expression_dependencies 
    	where
    		referenced_schema_name != 'dbo'
    )
    select
    	[Object].name as ObjectName,
    	[Dependency].referencing_schema_name+'.'+[Dependency].referencing_entity_name as DependencyName
    from
    	[Object]
    	cross apply sys.dm_sql_referencing_entities([object].name, 'OBJECT') as [Dependency]
    group by
    	[Object].Name,
    	[Dependency].referencing_schema_name,
    	[Dependency].referencing_entity_name 
    

    Gruß Yury
    Dienstag, 10. August 2010 09:07

Alle Antworten

  • Hallo markus1234_0815,

    eine Änderung des Schemas bezieht sich nur auf die Tabellen. Alle anderen Funktionen wie etwa Trigger u.ä. werden durch den Befehl Alter Schema nicht beeinflusst und verweisen also noch wie vor auf die Tabelle mit dem vorigen Schema. Und dies kann dann zu Problemen führen das die Trigger auf Fehler laufen, da die Tabelle nicht mehr vorhanden ist.

    Gruß

    Korodamos

    Dienstag, 10. August 2010 05:49
  • Hallo Krodamos,

    gibt es denn einen Weg dies zu "bereinigen"? Die alten Schematas haben z.B. den Namen des alten Domainusers, der halt nicht mehr existiert. Ich wollte eigentlich diesen Tabellen das Schema DBO geben und dann die alten Schematas und alten, nicht mehr existenten Domain Logins löschen.

    Trigger sind z.B. meines Wissens nach keine vorhanden in der Datenbank.

     

    Gruß

     

    Markus

     

     

    Dienstag, 10. August 2010 06:05
  • Hallo Markus,

    gespeicherte Prozeduren, Funktionen und Sichten lassen sich einfach anpassen. Man sollte nur deren DDL Skripte generieren, alten Namen durch neuen ersetzen und die Skripte ausführen.

    Vorgehensweise: Erstellen eines Skripts (SQL Server Management Studio) 

    Zweite Möglichkeit wäre, Synonymen einzusetzen.

    Verwenden von Synonymen (Datenbankmodul)


    Gruß Yury
    Dienstag, 10. August 2010 06:24
  • so kann man create Skripte der Synonymen generieren:

    SELECT
    	'CREATE SYNONYM [dbo].[' + t.name
    	+'] FOR [' + DB_NAME() + '].['
    	+ s.name + '].[' + t.name + ']'
    FROM
    	sys.tables t
    	INNER JOIN sys.schemas s
    	ON t.schema_id = s.schema_id
    WHERE
    	t.type = 'U' and s.name != 'dbo'
    

    Gruß Yury
    Dienstag, 10. August 2010 07:12
  • uii vielen Dank, das könnte es schon sein...

    Gibt es eigentlich eine mögliche Abfrage, ob in einer Datenbank ein Tabellennamen verwendet/genutzt wird? So wie es aussieht, sind das irgendwelche alten Tabellenleichen...

    Die Tabellen existieren schon unter dem Schema DBO..??!?!

    Gruß

     

    Markus

     

    Dienstag, 10. August 2010 08:18
  • ---------------------------------
    -- Yury Iwtschenko
    -- 2010-08-10
    ---------------------------------
    ;with [Object] as
    (
    	select
    		(referenced_schema_name+'.'+referenced_entity_name) as Name
    	from
    		sys.sql_expression_dependencies 
    	where
    		referenced_schema_name != 'dbo'
    )
    select
    	[Object].name as ObjectName,
    	[Dependency].referencing_schema_name+'.'+[Dependency].referencing_entity_name as DependencyName
    from
    	[Object]
    	cross apply sys.dm_sql_referencing_entities([object].name, 'OBJECT') as [Dependency]
    group by
    	[Object].Name,
    	[Dependency].referencing_schema_name,
    	[Dependency].referencing_entity_name 
    

    Gruß Yury
    Dienstag, 10. August 2010 09:07
  • super vielen dank..!!!

    es wird bei keiner betroffenen Tabellenabfrage ein Rückgabewert geliefert.

    Ich schmeiss den ganzen Kram mal raus aus der Datenbank und teste die ganze Sache mal auf dem Testsystem.

     

    Gruß

     

    Markus

     

    Dienstag, 10. August 2010 10:55