Benutzer mit den meisten Antworten
varchar in nvarchar konvertieren

Frage
-
Hi zusammen,
ich sollte unsere Datenbank auf UNICODE umstellen. Die zu ändernden Tabellen und Spalten sind bekannt.
Von daher benutze ich das Kommando:
Alter table <Tabelle> alter column <Spalte> nvarchar (250)
Da ich jedoch Tabellen mit bis zu 32 Millionen Zeilen habe dauert dies mehrere Stunden.
Hat jemand eine Idee, mit welcher ich dies beschleuningen könnte?
Ggf. mehrere Zeilen auf einmal konvertieren oder so?
Danke und Gruß
Timo
- Typ geändert Alex Pitulice Dienstag, 19. Juni 2012 06:46 Warten auf Rückmeldung
- Typ geändert Alex Pitulice Freitag, 22. Juni 2012 09:45 Noch aktiv
Antworten
-
hallo Timo
hast Du Dir schon mal ueberlegt mittels BCP die Tabelle(n) in eine Datei zu exportieren und danach wieder einzulesen nachdem Du die Spalte auf Unicode umgestellt hast?
http://msdn.microsoft.com/en-us/library/ms162802.aspx
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
- Als Antwort vorgeschlagen Alex Pitulice Freitag, 15. Juni 2012 10:46
- Als Antwort markiert TimoB_ Freitag, 22. Juni 2012 11:22
Alle Antworten
-
Hallo Timo,
Unicode benötigt doppelt so viel Speicherplatz wie Nicht-Unicode Daten, der Platz muss erst mal geschaffen werden und das kann dauern.
Schneller würde es gehen, wenn Du eine neue Tabelle mit dem finalen Design (also alles Unicode) anlegst und die Altdaten rüber kopierst, dann die beiden Tabellen alt/neu umbenennst, um sie sozusagen auszutauschen. Anpassen der Berechtigungen aber nicht vergessen.
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 -
Hallo Olaf,
die Idee hatte ich auch schon, jedoch soll diese Möglichkeit zumTeil auch auf Express Versionen eingesetzt werden und da würde ich dann an der maximalen Datenbankgröße scheitern.
Gibt es keine Möglichkeit, dass die Konvertierung nicht zeilenweise sondern per rowset oder so vorgeht?
Danek und gruß
-
auch auf Express Versionen eingesetzt werden und da würde ich dann an der maximalen Datenbankgröße scheitern.
Hallo Timo,
da könntest mit einer zweiten (temporäre) Datenbank oder über eine temporäre arbeiten, um die Einschränkung zu umgehen.
Wenn Du die Änderung über den Designer in SSMS vornimmst, wird es genau so gemacht.
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 -
Hallo Timo,
da könntest mit einer zweiten (temporäre) Datenbank oder über eine temporäre arbeiten, um die Einschränkung zu umgehen.
das ist ne gute Idee... Ich probier es mal aus und sag dir, ob es was gebracht hat.
danke.
- Bearbeitet TimoB_ Dienstag, 12. Juni 2012 11:21
-
Hat leider nicht nichts gebracht.
(Der Vortei des direkten updates der Spalten ist wohl, dass ich genau weiss, welche Spalte ich anfassen und konvertieren muss.)
Mit der temporären Datenbank hat es sogar noch länger gedauert. (ca. doppelt so lange wie vorher.)
- Bearbeitet TimoB_ Dienstag, 12. Juni 2012 15:13
-
hallo Timo
hast Du Dir schon mal ueberlegt mittels BCP die Tabelle(n) in eine Datei zu exportieren und danach wieder einzulesen nachdem Du die Spalte auf Unicode umgestellt hast?
http://msdn.microsoft.com/en-us/library/ms162802.aspx
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
- Als Antwort vorgeschlagen Alex Pitulice Freitag, 15. Juni 2012 10:46
- Als Antwort markiert TimoB_ Freitag, 22. Juni 2012 11:22
-
Mit der temporären Datenbank hat es sogar noch länger gedauert. (ca. doppelt so lange wie vorher.)
Nun weiß ich nur nicht, was genau Du gemacht hast. Wenn Du Daten hin und her kopieren musst, empfiehlt es sich bei der Menge, in der Zieltabelle zunächst alle Indizes zu deaktivieren, damit die nicht Datensatz für Datensatz gepflegt werden muss, dann kopiert man die Daten und aktiviert die Indizes wieder.
Ansonsten ist der Vorschlag von Daniel auch sehr gut, per BCP die Daten exportieren, Daten löschen, Tabellen ändern und dann die Daten wieder importieren. Das BCP eigene Format kann die Daten gut komprimieren.
Auch hier gilt: Vorher Indizes deaktivieren und erst nach dem Datenladen neu aufbauen 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- Als Antwort vorgeschlagen Alex Pitulice Freitag, 15. Juni 2012 10:46
-
Hallo Timo,
Hast Du die Tipps von Daniel und Olaf befolgt? Bist Du hier inzwischen weitergekommen?
Gruss,
AlexAlex Pitulice, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Bin gerade am Testen, denke, dass ich in den nächsten Tagen ein Ergebnis melden kann.
Mit bcp krieg ich das irgendwie nicht hin.
Da kommt immer die Fehlermeldung:
"Cannot use the OUTPUT option when passing a constant to a stored procedure."
Befehl:
bcp [tabelle] out output.dat -T -C
Was stimmt hier nicht?
danke und Gruß
- Bearbeitet TimoB_ Montag, 18. Juni 2012 07:57
-
hallo Timo,
nimm Dir etwas Zeit und lies die Beschreibung von BCP durch:
http://msdn.microsoft.com/en-us/library/ms162802.aspx
das gibt Dir eine Ahnung von den notwendigen oder moeglichen Kommandozeilenparameter.
Z.B. muesste bei "-C" ein Parameter angegeben werden.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
-
Konnte jetzt ein paar Tests durchführen.
So wie es aussieht bringt die temporäre / zweite Datenbank nichts. (der Copy Vorgang dauert zu lange.)
Jedoch der Export (mit BCP) der größten Tabellen in eine Datei und nach Umstellung wieder ein Import sieht sehr gut aus.
(Ich fahre die Tage noch ein paar Tests nicht großen Datenbanken und geb dann nochmals eine Rückmeldung.)
Aber schonmal vielen Dank für eure Tipps.
-
Hat funktioniert.... Danke euch beiden..
Mit BCP geht der Umbau doch um einiges schneller. Das einzige, was jetzt noch dauert ist das hinzufügen der Indizes. Aber das ist nicht so schlimm und ich denke, dass man hier auch nichts drehen kann....
Gruß
Timo
PS: Hat einer eine Idee, warum ich hier keinen Beitrag als Antwort markieren kann?- Bearbeitet TimoB_ Freitag, 22. Juni 2012 08:27
-
Hallo Timo,
jetzt kannst Du. Der Thread war im Diskussion umgewandelt weil Du die Tests durchgefuhrt hattest. Jetzt ist dieser wieder aktiv und man kann die Antwort markieren.
Gruss,
Alex
Alex Pitulice, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.