おらくる。基本レプリケーションにチャレンジです。その3 キャラクタセットが違う編 2011/01/30
2011/02/05

オラクルです。基本レプリケーションです。DBのキャラクターセットが違う場合編です。
ゆくゆくはLocaleBuilderで設定した外字マップがどうはたらくのかみてみたいと思います。



手順
(1)マスターサイトにテーブルを作成
(2)レプリカサイトからマスターサイトにDBLink
(3)レプリカサイトでマテリアライズドVIEWを作成

(1)マスターサイトにテーブルを作成


create table EMP
(
  EMP_ID char(3) ,
  EMP_NAME varchar2(10),
  primary key( EMP_ID )
)


(2)レプリカサイトからマスターサイトにDBLink

create database link test2
connect to system identified by oracle
using 'test2'


(3)レプリカサイトでマテリアライズドVIEWを作成

create materialized view MV_EMP
as
select * from emp@test2


で、ここでふとした疑問、このレプリケーションテーブルはどこのキャラクターセットの影響を受けるでしょうか。
そのまえに、マスターサイトとレプリカサイトで、同じテーブルを作成した場合格納されるデータのサイズはキャラクターセットによってどう影響されるかチェック。


insert into EMP values('3', '仲若')

varchar2のサイズはどうなるでしょうか。

VSIZEを使ってみてみますと

select VSIZE(emp_name) from emp


AL32UTF8では、6バイト
JA16SJISTILDEでは、4バイト
という結果になりました。
UTF8だと漢字一文字3バイト
SJISですと漢字一文字2バイト
って感じでしょうか。

基本レプリケーションのテーブルはどうなるでしょうか?
マスターサイトと同じ6バイト?それともレプリカサイトの4バイト?

select VSIZE(emp_name) from MV_EMP


4バイトとなりました。
このことから、キャラクターセットはレプリカサイト自身のもので決定されているようにみえます。

Oracle Databaseグローバリゼーション・サポート・ガイド

: