Postup převodu databáze SQL 7.0/SQL2000 na SQL2005/SQL2008

PříspěvekNapsal: 10.11.2006 16:18
od jan.havranek
NÁSLEDUJÍCÍ PŘÍSPĚVKY V TÉTO SEKCI JSOU OBECNĚ PLATNÉ PRO KAŽDÝ PŘECHOD Z NIŽŠÍ VERZE SQL NA VYŠŠÍ, NAPŘÍKLAD I PŘI PŘECHODU SQL2005 > SQL2008 APOD.

Jediné 100% řešení převodu databáze z kompatibility SQL7.0/SQL2000 na SQL2005/SQL2008 je EXPORT/IMPORT a je námi doporučován, pokud to zákazník dělat nechce tak na vlastní riziko.

V případě migrace databáze v kompatibilitě SQL2005 na SQL2008 se EXPORT/IMPORT provádět nemusí, dosud se nevyskytl žádný důvod k tomuto kroku.

Databáze ponechaná v původní podobě může vykazovat (dosavadní zkušenosti) problémy v oblasti tisku formulářI, v oblasti zadávání diakritiky, zadávání a práce s uživateli v databázi, může docházet k tzv. konfliktu třídění (collation conflict) a důležitá věc - na databázích ze starších verzí SQL neprobíhá jakýsi systémový audit SQL2005 (vylepšené kontrolní a logovací mechanismy konzistence dat apod.). Toto vše je vyřešeno exportem a importem, neboť všechny objekty vzniknou znovu a již plně v kompatibilitě SQL2005 a do nich jsou potom naimportovány datové hodnoty.

!!! Mechanismus Exportu/Importu umí sice přenést tabulky, které nejsou vytvořené systémem Helios a nacházejí se v databázi, ale neumí v těchto tabulkách po importu vytvořit počítané sloupce, pokud takové jsou. Nemá totiž schema těchto tabulek uloženo, tudíž přenese pouze statické atributy.

Stejně tak export nezjistí existenci externích procedur pokud nejsou použity v hlavičce externích akcí. Tedy procedura volaná zevnitř jiné procedury může být pro Export "neviditelná" a takovéto speciality musí ošetřit dodavatel externího řešení. !!!


Podrobný návod jak provést EXPORT/IMPORT je zde ke stažení.
Přílohy
Postup_export_import_db_vzor.rar
Postup exportu/importu databáze.
(56.87 KiB) 2249 krát

Převod externích údajů, které nejsou součástí Heliosu

PříspěvekNapsal: 29.03.2007 15:06
od jan.havranek
V rámci přípravné fáze exportu (viz dokument) lze narazit na přítomnost externích funkcionalit (externí triggery a externí procedury). Ty nejsou uloženy ve strukturách tabulek Heliosu a je nutné je převést jiným způsobem.

Postup je následující:
1/ z hlášky exportu si poznamenat přesná jména triggerů a procedur
2/ v SQL QUERY ANALYZERU (SQL Server Management Studio v případě SQL2005) se připojit do dané databáze
3/ napsat v Query postupně SQL příkaz pro každou externí funkci
Kód: Vybrat vše
EXEC sp_helptext 'jmeno_funkce'
např.:
EXEC sp_helptext 'et_TabStavSkladu'

4/ příkaz vrátí ve výsledku vlastní tělo (SQL script) pro vytvoření dané funkce, tento script je nutné zkopírovat a někam uložit pro každou funkci
5/ po provedení exportu a importu databáze se musí do této postupně spustit všechny scripty vytvořené v bodě 3

chyba [80028019 Old format or invalid type library]

PříspěvekNapsal: 08.12.2007 23:20
od jan.havranek
Při Exportu databáze na SQL2005 se může objevit chybová hláška 80028019 Old format or invalid type library (na českých Windows 80028019 Starý formát nebo neplatná knihovna typů). Na této instalaci SQL Serveru dříve nešlo žádným způsobem Export provést. Potíž je na straně exportní komponenty BCP, která je součástí instalace SQL.

Nyní lze řešit, řešení jsou dvě:

1/ rychlé řešení - do složky C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn nakopírovat novou verzi knihovny ODSOLE70.dll, přepsat stávající. Pokud přepsat nejde, je třeba nejprve zastavit SQL Server.

2/ finální řešení - instalace SP3 pro SQL2005 (ta by nakonec měla proběhnout tak jako tak)

MSSQL 2005 SP3
http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=AE7387C3-348C-4FAA-8AE5-949FDFBE59C4&displaylang=en

MSSQL 2005 Express SP3
http://www.microsoft.com/downloads/details.aspx?FamilyID=3181842a-4090-4431-acdd-9a1c832e65a6&DisplayLang=en
Přílohy
ODSOLE70.rar
(27.78 KiB) 1290 krát

Přechod na vyšší verzi MS SQL - databáze s externími doplňky

PříspěvekNapsal: 12.03.2008 11:57
od jiri.dolezal
Zejména při převodu složitějších databází s řadou externích řešení na vyšší verzi MS SQL je možno postupovat dle přiloženého checklistu.

Pro kontrolu existence externích doplňků v databázi (resp. na serveru) je možno využít přiložený SQL skript.
Přílohy
Prechod_SQL_skripty_DJ180308.txt
Přechod na vyšší verzi MS SQL - skripty (přejmenujte na *.sql)
(6.63 KiB) 1387 krát
Prechod_SQL_checklist_DJ180308.txt
Přechod na vyšší verzi MS SQL - checklist
(2.76 KiB) 1173 krát

Export/import externích tabulek - neexportuje se!

PříspěvekNapsal: 18.03.2008 10:34
od jiri.dolezal
POZOR !!!

Předmětem exportu/importu databáze jsou všechny pevné sloupce všech (nesystémových) tabulek v databázi se zachováním svého datového typu a nullability. K tomu se exportují všechny typy indexů, které byly známy na SQL2000. Nové typy indexů se vyexportují jako normální indexy, tzn. chybí jim příslušné nové klauzule.

Vše ostatní není předmětem exportu!

Přehled o tom, čemu je třeba věnovat speciální pozornost uvádí tabulka v příloze.

Stručný výčet objektů externích tabulek, které se nezachovají:

  • Computed Column (struktura tabulky)
  • Foreign Key (Constraints)
  • Check (Constraints)
  • Default Value (Constraints)

V případě existence objektů, které nejsou zachovány je tedy nutno vytvořit skripty pro jejich založení!
Přílohy
HeO_export-import_objekty.xls
Export/Import databáze HeO - zachování databázových objektů
(17 KiB) 794 krát

Chyba při importu databáze pomocí Import.BAT

PříspěvekNapsal: 02.04.2008 08:03
od jan.havranek
Při importu databáze (viz předchozí příspěvky) se může objevit například chyba [SQL:0,0]. Tato blíže nespecifkovaná chyba není nutně spojena s importem, může indikovat jiné potíže na SQL, v případě importu může znamenat problém s příliš dlouhými cestami na exportní adresář. Script, kterým se provádí import obsahuje jednotlivé importní příkazy pro každou tabulku. Délka jednoho výrazu nesmí přesáhnout 255 znaků (konvence T-SQL). Výraz je složen z vlastního příkazu, cesty na importní soubor, vlastního jména souboru a parametrů příkazu. Např.:
Kód: Vybrat vše
BULK INSERT JmenoDatabaze.dbo.JmenoTabulky FROM 'C:\JmenoDatabaze\dbo.JmenoTabulky.bcp' WITH(CODEPAGE='RAW',DATAFILETYPE='native',KEEPIDENTITY,KEEPNULLS,TABLOCK)

Jako výchozí cesta pro export je v Helios Orange přednastaven adresář záloh SQL, pokud je tato cesta příliš vnořená (např.: c:\Program Files\Microsoft SQL Server\MSSQL$SQL2005\MSSQL.1\MSSQL\Backup) a názvy souborů dlouhé (např.: dbo.TabFIAAVVykazParamObdobiStavu.bcp) pak doporučujeme při exportu vybrat cestu kratší, nejlépe do rootu lokálního disku serveru (tedy: C:\JmenoDatabaze).

Zkušenosti z převodu - složitější DB

PříspěvekNapsal: 13.08.2008 11:05
od jiri.dolezal
od p. Radka Naumece, HARPAGON Software s.r.o.

  1. Přenos uživatelských účtů – zákazník požadoval přenos včetně hesel, aby zamezil prvotnímu neoprávněnému přístupu do systému.

    Řešení:
    vytváření uživatelů můžete vyskriptovat pomocí

    Kód: Vybrat vše
    SELECT 'exec sp_addlogin '''+name+''',',CONVERT(VARBINARY(256), password),', @encryptopt = ''skip_encryption''' FROM syslogins


    Výsledek uložit (vznikne skript na generování uživatelů včetně jejich původních hesel, které se ale nedozvíte). Tím založit SQL uživatele na novém serveru. Pozor – uživatelské účty bez hesla skriptem založit nešlo, bylo potřeba parametr @password změnit z hodnoty null na hodnotu prázdný řetězec ''.


  2. Při exportu externích funkcionalit (externí triggery, uložené procedury atd.) používat export do formátu Unicode. V případě použití kódování Windows se chybně přenesly české znaky (původní server by CZ, nový EN).


  3. Export externích views – ta se standardním exportem DB nepřenášejí. Zároveň doporučuj i export views, která jsou definovanými přehledy v Heliosu, je to jednoduší, než v Heliosu všechny def. přehledy otevřít a dát OK.


  4. Import DB vytvoří DB s nastavením Autoshrink=true. Musel jsem ručně přepnout zpět na doporučovanou hodnotu false.


  5. Pokud se v nějaké vlastní funkcionalitě používá procedura xp_smtp_sendmail, tak již nemá pro SQL2005 podporu a ideální je jednoduše ji nahradit pomocí integrovaného Database mail.

[SQL:3853,16] Chyba při přechodu na SQL2005

PříspěvekNapsal: 24.11.2008 11:08
od jan.havranek
Po obnově databáze z nišší verze SQL na SQL2005 a spuštění Heliosu do této databáze se při kontrole konzistence může objevit SQL chyba s informací:

NEPOKRAČUJTE V PRÁCI S DATABÁZÍ - kontaktujte dodavatele vašeho systému Helios Orange!

Číslo SQL chyby může být též: 3851, 3852, 3853, 3854, 3855, 3856, 3857, 3858 nebo 8992, jak je dokumentováno zde:
http://msdn.microsoft.com/en-us/library/aa337359.aspx


V tomto konkrétním případě se může jednat pouze o nekompatibilitu určitých specifických vlastností s prostředím SQL2005. Do databáze se dá vstoupit bez kontroly konzistence, tj. pokud je zobrazen dialog pro update tak zrušit obě zaškrtávátka uvedená v okně, nebo druhá varianta, nastavit do zástupce Heliosu řádkový parametr -kk- za Helios.exe.

Poté je třeba ověřit verzi databáze - v Systémových konstantách přes Nastav zobrazit sloupec Třídění databáze a pokud je zde uvedeno SQL_Czech_CP1250_CI_AS jedná se o data vznilká na SQL 7.0. Na takové databázi je třeba provést E/I a v dialogu exportu je třeba zaškrtnout volbu Smazání počítaných sloupců. Pokud je třídění databáze Czech_CI_AS je třeba též provést E/I, Smazání sloupců se provádět nemusí.
Přílohy
chyba_update.jpg
chyba_update.jpg (27.26 KiB) Zobrazeno 37958 krát

chyba [ERRORLEVEL=1 BCP.EXE ...]

PříspěvekNapsal: 12.03.2009 09:26
od jan.havranek
Při exportu databáze na SQL2005 se může objevit podobná chyba (uvedené názvy tabulek se mohou lišit):
BCP_error.jpg
BCP_error.jpg (20.83 KiB) Zobrazeno 37466 krát

Tato chyba znamená, že databáze vznikla na SQL 7.0 a při exportu nebyl zaškrtnut parametr
Před exportem smazat všechny počítané sloupce ... v dialogu exportu.
Je třeba export spustit znovu a parametr zaškrtnout, export je třeba nasměrovat do jiného adresáře nebo vzniklý exportní adresář nejprve smazat z disku.

Přenášení uživatelů včetně hesla mezi instancemi SQL Serveru

PříspěvekNapsal: 20.04.2009 11:21
od jiri.dolezal
Při přechodu provozu na jinou instanci MS SQL Serveru (přechodu na vyšší verzi MS SQL Serveru) se standarně počítá s tím, že uživatelé příjdou o svá původní hesla (založí se jen jejich loginy - v rámci kontroly konzistence). Ztrátě hesel lze zabránit aplikací následujích postupů (oficiálních od Microsoft):

How to transfer logins and passwords between instances of SQL Server
http://support.microsoft.com/kb/246133

How to transfer the logins and the passwords between instances of SQL Server 2005
http://support.microsoft.com/kb/918992/

Chyba při importu databáze

PříspěvekNapsal: 07.09.2009 15:42
od marcel.vitek
Během akce export/import databáze může ve fázi import vyskočit chybová hláška typu
Kód: Vybrat vše
xxx.SMAZAT_TabInvVyrobyPrikazy
Msg 2760, Level 16, State 1, Line 3
The specified schema name "ondrusak" either does not exist or you do not have permission to use it.

kde "xxx" může být jakýkoliv uživatel databáze(ondrusak) jako je vidět v přiložené ukázce.

Zřejmě to bylo vlivem zapomenutého vlastníka ve změnových skriptech někde mezi verzemi 20041109 až 20041112. Tato verze byla na webu ke stažení cca 5 dní.

Jednoduché řešení by bylo před exportem spustit tento skript :
Kód: Vybrat vše
DROP TABLE xxx.SMAZAT_TabInvVyrobyPrikazy

nebo
v importním scriptu vymazat část, kde se tato tabulka znovu zakládá.

Re: Chyba při importu databáze

PříspěvekNapsal: 08.09.2009 10:18
od jiri.dolezal
K této chybě může dojít také v případě existence externího řešení využívajícího zakaznické tabulky (= nedistribuční tabulky), která byla tvůrcem řešení nesprávně založena bez specifikace vlastníka [dbo].

Chyba Importu: Column name 'XY' does not exist ...

PříspěvekNapsal: 19.05.2010 15:25
od jan.havranek
Problém:
V některých případech lze narazit po importu v souboru IMPORT.LOG na chybové hlášky typu
Msg 1911, Level 16, State 1, Server ABC, Line N
Column name 'XY' does not exist in the target table or view.

Aktuálně jsou známé pouze dva výskyty, jedná se o atributy 'BarCode' a 'CisloUcet' .

Důvod:
Tato chyba je dle dosavadních zkušeností způsobena existencí SQL indexů vytvořených na počítaném atributu tabulky (computed column). Export Heliosu totiž přenese pouze pevné atributy tabulek, ale zároveň vyexportuje všechny indexy bez rozdílu. Import založí tabulku (její pevné atributy) a snaží se vytvořit všechny indexy. V tuto chvíli ale počítané atributy ještě neexistují (ty dogeneruje Helios až při spuštění) tudíž tvorba indexu na počítaný atribut končí chybou.

Řešení:
Zde je postup jak věc řešit.

1/ Provést export.

2/ Otevřít IMPORT.SQL, najít a smazat všechny tyto řádky (pokud existují). Místo Helios001 musí být správné jméno DB. Změny uložit.

CREATE INDEX IX__TabPrPostup__BarCode__IDOdchylkyDo ON Helios001.dbo.TabPrPostup(BarCode,IDOdchylkyDo)
CREATE INDEX IX__TabFIAAVCisUctVykazDefinice__CisloUcet ON Helios001.dbo.TabFIAAVCisUctVykazDefinice

3/ Provést IMPORT, ale zatím nespouštět Helios.

4/ Přes Management Studio do Databáze spustit tyto příkazy.

Kód: Vybrat vše
ALTER TABLE dbo.TabFIAAVCisUctVykazDefinice ADD CisloUcet AS (isnull([CisloUcetBrutto],'')+isnull([CisloUcetKorekce],''))

ALTER TABLE dbo.TabPrPostup ADD BarCode AS (CONVERT(nvarchar(15),(N'A' + ISNULL(REPLICATE(N'0',(4 - LEN([ID1]))),'') + CONVERT(nvarchar(13),[ID1]) + N'B')))


5/ Spustit Helios a potvrdit všechny změny.


REVIZE STAVU:
Tento problém je vyřešen v kódu programu od verze 2.0.2011.0611.