2011年6月16日木曜日

"Oracle RDS"で"nls_length_semantics"の値をCHARに(文字型のサイズをバイト単位から文字数単位に)

スズキです。

Oracleの文字型の列のサイズは、デフォルトではバイト単位です。
Ex. サイズが10なら10バイト分、文字を入れることが可能。

このサイズを"nls_length_semantics"というパラメータで
文字数単位にすることが可能です。

っというのを、"Oracle RDS"でもDBパラメータグループで設定することが可能です。

デフォルトの"RDS Oracle"では下記のように、バイト単位のままです。

SQL> show parameters nls_length_semantics;
NAME                 TYPE   VALUE
-------------------- ------ -----
nls_length_semantics string BYTE

それを下記のようなPHPなどで、パラメータを変更すると、

require_once("/opt/aws/php/sdk.class.php");

define("AWS_KEY"       , "AAAAAAAA");
define("AWS_SECRET_KEY", "SSSSSSSS");

$rds = new AmazonRDS();
$rds->set_region(AmazonRDS::REGION_APAC_NE1);

$response = $rds->modify_db_parameter_group("suz-lab", array(
    array(
        "ParameterName"  => "nls_length_semantics",
        "ParameterValue" => "CHAR",
        "ApplyMethod"    => "pending-reboot"
    )
));

var_dump($response);

次のように、パラメータが変更されます。


再度、パラメータを確認すると、文字数単位に変更されていることが確認できます。

SQL> show parameters nls_length_semantics;
NAME                 TYPE   VALUE
-------------------- ------ -----
nls_length_semantics string CHAR

でも、文字数単位にしてデータインポートしても、ORA-12899がでてしまう...
--------
http://www.suz-lab.com

0 コメント: