- PR -

oracle9iでのsidの変更

1
投稿者投稿内容
ぴんぴん
大ベテラン
会議室デビュー日: 2004/05/07
投稿数: 141
投稿日時: 2004-11-03 05:45
oracleで、sidを簡単に変更する方法はありますでしょうか。
dbの内容は保存し、ディレクトリ位置などは、以前のsidを参照した位置のままで
かまいません。
JDBC thin-driverは、sidを一意的に参照するみたいで、既存のDBを別の仕事に
流用したい場合、sidを変更して使用したくなります。今までは、oracleの
再インストールをしていたのですが。

pfileを出力して、db_nameだかを書き換えれば、いけるのかな、という気もしないでも
ないのですが・・・ oracle sid 変更では、あまり良い内容にヒットしませんでした。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2004-11-04 10:41
ども、もしもしと申します。
ちょっと整理させてほしいのですが、いいでしょうか?

要件として、業務ごとに接続先のデータベースを使い分けたい、
ということなのでしょうか?
それとも、「既存のDBを別の仕事に流用したい場合」と書いてある
ことからデータベースは 1 個で ORACLE_SID を変更したい、
ということなのでしょうか(あまり意味がないかも)?

具体的にどのような作業を実現したいか、というところを
もう少し確認させていただきたいと思います。
(内容によっては SID 変更でなくても対応できそう)
ぴんぴん
大ベテラン
会議室デビュー日: 2004/05/07
投稿数: 141
投稿日時: 2004-11-04 10:51
コメントありがとうございます。

たとえば、ある仕事をして、そのときに作ったデータベースがtest/test@testだと
します。
その仕事が終わって、別の仕事の開発にマシンに流用するときに、oracleを入れなおす
のは面倒なので、そのままその仕事のデフォルトになっている環境、たとえば
test2/test2@test2 の形で使いたいというわけです。

OCIドライバとかであれば、tnsnames.oraの登録でなんとでもなりそうなのですが、
Thinドライバは無条件にSIDを参照しているようなので、SIDを変更しないといけなさ
そうなのですが。

何か良い方法がありますでしょうか。
よろしくお願いします。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2004-11-05 11:49
どもです。

まず、Oracle 製品を入れ直す必要はありません。仮にデータベースが
複数必要であれば、環境変数 $ORACLE_SID を変更してデータベースを
作成すればよいですから。

ただ、「その仕事が終わって、別の仕事の開発にマシンに流用するときに、」
とあることから開発機のデータベースだと思うのですが、データベースの
物理構成を気にしないのであれば現行のデータベースにスキーマを追加して、
接続するときに test2/test2@test で接続すればどうでしょう?
SID を云々ということは気にしなくても済むのではないかと。

-- 追加

最初の書き込みで「dbの内容は保存し、ディレクトリ位置などは、
以前のsidを参照した位置のままでかまいません。」とデータベースを
複数用意するには矛盾した内容になるので、スキーマを追加した方が
楽なのでは?

$ORACLE_SID はあるマシンで起動しているインスタンスを一意に
識別するためのものですが、インスタンスが 1 つだけであれば
変更する必要は無いです。


[ メッセージ編集済み 編集者: もしもし 編集日時 2004-11-05 12:10 ]
ぴんぴん
大ベテラン
会議室デビュー日: 2004/05/07
投稿数: 141
投稿日時: 2004-11-06 03:02
コメントありがとうございます。

Oracleを入れなおしていたのは、インストール時に明示的にSIDを指定できたから、
でした。Win環境なので、ORACLE_SIDはレジストリの中になりますが、たとえば
HTLM/Software/ORACLE/HOME0のORACLE_SIDをtestからtest2に変更して再起動すれば
SIDの変更が完了する、と考えてよろしいということでしょうか。

test2/test2@testが問題なのは、たとえば接続文字列をstruts-configに書いている
ので、環境一式を他に渡したときに、余計な編集作業の発生を極力抑えたいという
ことによります。これが問題で、接続エラーが・・・ といわれるのも面倒です
ので・・・

「dbの内容を保存し、ディレクトリ位置などは・・・」というのは、たとえばパス
や設定などの保存されるディレクトリには通常SIDが含まれますが、それまで今回の
SIDの変更に合わせて変更しなくても良い、という意味でした。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2004-11-08 11:00
ども、もしもしです。

えーっと、そもそも SID を変更しなければならない理由は何なのでしょうか?
JDBC(でなくてもそうですが)が SID を参照するのは、接続先のローカル
データベースを特定するため、だと思っていたのですが、違うのでしょうか?

レジストリにある ORACLE_SID は、単に「デフォルトで接続するローカルの
データベースを指定する」というだけです。Windows 環境とのことなので、
データベースはサービスとして起動しますが、こいつ自体はサービスを
再作成でもしない限り ORACLE_SID は変更されません。
(なので、レジストリだけ換えてもTNS-12560 あたりが出ると思いますよ)

Windows 環境においては、ORACLE_SID はサービスとひも付いていると考えて
いただければ間違いないかな、と。
ただ、別に 1 マシン 1 インスタンス、みたいな縛りはないので(リソースが
足りていることが前提ですけど)、あたらしくデータベースを作成したい、
ということであれば、DBCA あたりのツールで新規に作成されてはいかがでしょう?

※「インストール時に明示的に SID を指定できた」とは、単にインストール後に
データベースを作成するので(インストール時にソフトウェアのみをインストール
すれば、データベース作成もされないのですが)、そのデータベースで使用して
いるだけです。


ちなみに、

引用:
「dbの内容を保存し、ディレクトリ位置などは・・・」というのは、たとえばパス
や設定などの保存されるディレクトリには通常SIDが含まれますが、それまで今回の
SIDの変更に合わせて変更しなくても良い、という意味でした。



パスの名前自体は、単に DBCA がそのようにつけているだけですので、
create database を手で実行する場合はどんなパスに書いても作成できます。
ぴんぴん
大ベテラン
会議室デビュー日: 2004/05/07
投稿数: 141
投稿日時: 2004-11-25 00:57
お返事が遅くなりました。

結局、SIDを直接変更する方法は無く、その場合データベースを作り直すのが一番
適当だということですね。
古いデータベースが残っていると、きっともったいないことがおきるので、全体を
エクスポートしてから削除するというところでしょうか。

スクラッチからのデータベースの作成というのは、確か一度試したことがあったの
ですが、リスナー関係までセットアップするとかなり大変だったような記憶が
あります。このあたり、もう少し勉強と練習してみます。

コメントありがとうございました。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2004-11-25 15:51
引用:

ぴんぴんさんの書き込み (2004-11-25 00:57) より:

結局、SIDを直接変更する方法は無く、その場合データベースを作り直すのが一番
適当だということですね。



いえいえ、データベースを再作成する必要はなく、
データベースの「サービスを再作成」していただければよい、という
ことです。

# 私の書き方も、後から読むとデータベースの再作成が必要なように
# 読めてしまいますね。失礼。

サービス(として起動するインスタンス(メモリ上の実体))の
名前が ORACLE_SID になるわけで、データベースの名前は、データベース
ファイル一式の名前です。データベースの名前はデータベースの
再作成(より正確には制御ファイルの再作成)で対処しますが、
インスタンス名はサービスを再作成して、初期化パラメータファイルの
名前を init%ORACLESID%.ora に変更すればよいのです。


....で、結局サービスにしろデータベースにしろ、再作成の手間を
かけるくらいなら、既存のデータベースでスキーマを変えるだけで
対処できないのかなーと思った次第です。
1

スキルアップ/キャリアアップ(JOB@IT)