none
Testversion einer Livedatenbank anlegen (sicherung einspielen aber bestimmte Veiws nicht überschreiben) RRS feed

  • Frage

  • Hallo,

    leider weiß ich nicht wie ich die Überschrift gestallten soll, für folgendes Problem:

    Wir haben eine Umgebung, in der die User Live arbeiten. Es gibt Leute die dürfen auf dem SQL Server views anlegen um auswertungen zu machen und zu testen. Die Views fangen z.b. immer mit test_   an und haben dann den Viewname. z.B. test_Artikelauswertung.

    Nun möchten wir nicht, das diese Leute in der Liveumgebung damit hantieren. Logisch. also baue ich eine Testdatenbank, in der jede nacht die Lievedaten einfliesen. Auch die Views die nicht von den Analysten kommen sollen eingespielt werden. die haben dann kein Test_ vorangestellt.

    Wenn ich jetzt jede nacht die Daten überspiele, sind die test_  Views ja wech. Was kann ich am besten tun? Kann man beim einspielen irgendwo mitgeben das die test_ views nicht überschrieben werden sollen bzw. gelöscht werden sollen, oderm uß ich die views vorher sichern, dann die Datenbank einspielen, und dann die views wieder einspielen?

    Dienstag, 10. Juli 2012 08:06

Antworten

  • Wenn es nur um Views geht, die Definition kannst Du (sofern nicht encrypted) so abfragen:

    SELECT QUOTENAME(SCHEMA_NAME(VW.schema_id))
           + '.' + QUOTENAME(VW.name) AS ViewName
          ,MD.definition
    FROM sys.views as VW
         INNER JOIN
         sys.sql_modules AS MD
             ON VW.object_id = MD.object_id
    WHERE VW.name LIKE 'test%'   

    Du könntest auch ein PowerShell Skript + SMO verwenden, um die Definition bestimmter Objekte zu exportieren.

    Oder ... Du legst eine neue Datenbank an, in der nur diese Views zum Testen angelegt werden, dann entfällt das ganze Problem. Die Views müssen nur so angepasst werden, das sie auf die andere Datenbank verweisen, also so:

    SELECT *
    FROM [Datenbank2].dbo.TabelleX
    WHERE ...


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 10. Juli 2012 08:33

Alle Antworten

  • Hallo Oliver,

    ein Backup erfolgt immer für die komplete Datenbank, ebenso ein Restore. Man kann nicht einzelne Objekte sichern/rücksichern oder diese davon ausschließen.

    Wenn Objekte wie Views angelegt wurden, die nicht in der letzten Sicherung enthalten sind, müssen die halt wieder neu angelegt werden. In der Regel sollte man eh Skripte für die Objekte zur Anlage haben und nicht Views o.ä. per Designer anlegen. Und selbst wenn, man kann von allem ja in SSMS sich Skripte generieren lassen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 10. Juli 2012 08:10
  • ok, klingt logisch und vernünftig.

    Was mir helfen würde, wäre, wenn ich irgendwie mit einer gebauten funktion z.b. ein skript erzeugen kann für alles views die mit test_ anfangen. dann kann ich nach dem restore dieses script ausführen umd die views wieder herstellen. dann hab ich den analysten diesen teil abgenommen.

    meinst du sowas geht ?


    Oliver Dithmer

    Dienstag, 10. Juli 2012 08:14
  • Wenn es nur um Views geht, die Definition kannst Du (sofern nicht encrypted) so abfragen:

    SELECT QUOTENAME(SCHEMA_NAME(VW.schema_id))
           + '.' + QUOTENAME(VW.name) AS ViewName
          ,MD.definition
    FROM sys.views as VW
         INNER JOIN
         sys.sql_modules AS MD
             ON VW.object_id = MD.object_id
    WHERE VW.name LIKE 'test%'   

    Du könntest auch ein PowerShell Skript + SMO verwenden, um die Definition bestimmter Objekte zu exportieren.

    Oder ... Du legst eine neue Datenbank an, in der nur diese Views zum Testen angelegt werden, dann entfällt das ganze Problem. Die Views müssen nur so angepasst werden, das sie auf die andere Datenbank verweisen, also so:

    SELECT *
    FROM [Datenbank2].dbo.TabelleX
    WHERE ...


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 10. Juli 2012 08:33
  • Ja sauber. Das erste ist die Lösung  :)

    Oliver Dithmer

    Dienstag, 10. Juli 2012 08:40