Analýza databáze před převodem na MS SQL 2012

PříspěvekNapsal: 12.04.2013 09:56
od jiri.dolezal
Standardní databázi bez externích dolňků převedete na verzi MS SQL 2012 prostou zálohou a obnovou databáze. Pokud však databáze Helios Orange obsahuje zakázkové (externí) doplňky (externí akce, pluginy, externí triggery atd.), je třeba převodu těchto řešení věnovat speciální pozornost.

Obecné informace k problematice kompatibility z MS SQL 2012 naleznete zde:
https://public.helios.eu/inuvio/doc/cs/index.php?title=Kompatibilita_Helios_Orange_a_MS_SQL_2012

Problematický je zejména výskyt již nepodporované syntaxe zápisu příkazu RAISERROR.

Následujícím skriptem lze prohledat SQL objekty v databázi, které nepovolenou syntaxi obsahují:

Kód: Vybrat vše
SELECT
      OBJECT_NAME(s.[object_id])
      ,o.[type]
      ,CASE o.[type]
            WHEN 'P' THEN 'SQL Stored Procedure'
            WHEN 'RF' THEN 'Replication-filter-procedure'
            WHEN 'V' THEN 'View'
            WHEN 'TR' THEN 'SQL DML trigger'
            WHEN 'FN' THEN 'SQL scalar function'
            WHEN 'IF' THEN 'SQL inline table-valued function'
            WHEN 'TF' THEN 'SQL table-valued-function'
            WHEN 'R' THEN 'Rule (old-style, stand-alone)'
            WHEN 'D' THEN 'DEFAULT (stand-alone)'
            ELSE '(unknown)'
      END as Typ_Objektu
      ,s.[definition]
FROM sys.sql_modules s
      INNER JOIN sys.objects o ON s.[object_id] = o.[object_id]
WHERE s.[definition] LIKE N'%RAISERROR [0-9@]%' -- N'%RAISERROR [^(]%' / druhá varianta
ORDER BY OBJECT_NAME(s.[object_id]) ASC;


Výskyt v řešeních typu plugin, je nutno řešit na úrovni zdrojových kódů tohoto řešení (je tedy nutné je mít k dispozici). Následující skript udělá seznam pluginů v databázi, které stojí za to prověřit:

Kód: Vybrat vše
SELECT DISTINCT   
      SUBSTRING(UP,1,(CHARINDEX(N'.',UP))-1) as NazevDLL
      ,ISNULL((SELECT TOP 1 NazevVerejny FROM TabPluginInfo WHERE NazevSys = SUBSTRING(UP,1,(CHARINDEX(N'.',UP))-1)),
      (SELECT TOP 1 (ISNULL((SELECT TOP 1 SUBSTRING(H.Hlaska,1,255) FROM TabExtHlasky H WHERE H.Jazyk = 1 AND H.GUIDText = E.Popis),E.Popis))
      FROM TabExtKom E WHERE E.UP = TabExtKom.UP ORDER BY E.Popis ASC)) as NazevReseni
      ,ISNULL((SELECT TOP 1 VerzePluginu FROM TabPluginInfo WHERE NazevSys = SUBSTRING(UP,1,(CHARINDEX(N'.',UP))-1)),N'(neznámá)') as Verze
FROM TabExtKom
WHERE Typ = 3;


Upozornění:
Tento článek si neklade za cíl kompletně popsat všechny možné případy a situace, které je třeba zohlednit při přechodu na MS SQL 2012. Bezchybný převod databáze je plně na zodpovědnosti a odborné způsobilosti realizátora.