Oracle 11g r2Expressインスタンスで文字セットをAL32UTF8からWE8MSWIN1252に変更する必要があります...次のコマンドを使用しようとしました。
ALTER DATABASE CHARACTER SET WE8MSWIN1252;
しかし、MSWIN1252がAL32UTF8のスーパーセットではないとは言えません。次に、CSSCANについて説明している記事をいくつか見つけましたが、そのツールはOracle 11Expressでは使用できないようです。
http://www.Oracle-base.com/articles/10g/CharacterSetMigration.php
誰かがそれを行う方法についてのアイデアを持っていますか?前もって感謝します
Edit少し明確にする:本当の問題は、VARCHAR(6バイト)として定義された列を持つテーブルにデータをインポートしようとしていることです。 。問題の原因となっている文字列は「eq.mês」です。MSWIN1252では6バイト、UT8では7バイトが必要です。
できません。
Express Editionの11gは、UTF-8文字セットを使用した場合にのみ使用できます。 10gのエクスプレス版に戻りたい場合は、Windows-1252文字セットを使用した西ヨーロッパ版がありました。他のエディションとは異なり、OracleはExpress Editionの全範囲の文字セットをサポートしておらず、既存のXEデータベースの文字セットの変更もサポートしていません。
データベースの文字セットを変更する必要があるのはなぜだと思いますか?一般的に特に頻繁に使用されないWindows-1252範囲の上半分の文字をサポートするために、もう少し多くのストレージスペースを使用する可能性があることを除けば、UTF-8データベースには多くの欠点はありません。
元の文字のサブセットのみをサポートする文字セットに移動する場合の最良のオプションは、expとimp back(またはexpdpとimpdp)を使用することです。
1252コードページにない文字が単一のテーブルに含まれないことを確認しますか?
そのALTERDATABASEコマンドのみを実行する場合の問題は、データディクショナリが変換されておらず、破損している可能性があることです。
私も同じ問題を抱えていました。私の場合、Oracle 11g Express Edition(11.2.0.2.0)を使用しており、WE8MSWIN1252文字セットで実行する必要がありますが、インストール時に文字セットを変更できません(常にAL32UTF8でインストールされます)。
Oracle Client 11gを管理者としてインストールし、csscan full=y
のみを実行します(このリンクを確認してください https://Oracle-base.com/articles/10g/character-set-migration )。データベース内の損失が大きく変換可能なデータの問題であることに注意してください。ただし、問題はMDSYS(Oracle Spatial)およびAPEX_040000(Oracle Application Express)スキーマにあります。したがって、この製品は必要ないため、削除します(このリンクを確認してください: http://fast-dba.blogspot.com.br/2014/04/how-to-remove-unwanted-components-from .html )。
次に、expdp
を使用してユーザースキーマをエクスポートし、ユーザーを削除します(プロセスの最後にユーザーを再作成する必要があります)。
full=y capture=y
を使用してcsscanを再度実行すると、次のように報告されます:The data dictionary can be safely migrated using the CSALTER script
。レポートにこれがない場合、満たされない条件がいくつかあるため、csalter.plbスクリプトは機能しません。
この場合、この条件が満たされ、CSALTERスクリプトを正常に実行できました。さらに、このスクリプトは、実行しようとしているALTER DATABASEコマンドを実行し、変換可能なデータディクショナリのCLOBデータを変換します。
最後に、アプリケーションのユーザーとテーブルスペースを作成し、ユーザーデータのダンプを正常にインポートします。