- - PR -
oracle9iでのsidの変更
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-03 05:45
oracleで、sidを簡単に変更する方法はありますでしょうか。
dbの内容は保存し、ディレクトリ位置などは、以前のsidを参照した位置のままで かまいません。 JDBC thin-driverは、sidを一意的に参照するみたいで、既存のDBを別の仕事に 流用したい場合、sidを変更して使用したくなります。今までは、oracleの 再インストールをしていたのですが。 pfileを出力して、db_nameだかを書き換えれば、いけるのかな、という気もしないでも ないのですが・・・ oracle sid 変更では、あまり良い内容にヒットしませんでした。 | ||||
|
投稿日時: 2004-11-04 10:41
ども、もしもしと申します。
ちょっと整理させてほしいのですが、いいでしょうか? 要件として、業務ごとに接続先のデータベースを使い分けたい、 ということなのでしょうか? それとも、「既存のDBを別の仕事に流用したい場合」と書いてある ことからデータベースは 1 個で ORACLE_SID を変更したい、 ということなのでしょうか(あまり意味がないかも)? 具体的にどのような作業を実現したいか、というところを もう少し確認させていただきたいと思います。 (内容によっては SID 変更でなくても対応できそう) | ||||
|
投稿日時: 2004-11-04 10:51
コメントありがとうございます。
たとえば、ある仕事をして、そのときに作ったデータベースがtest/test@testだと します。 その仕事が終わって、別の仕事の開発にマシンに流用するときに、oracleを入れなおす のは面倒なので、そのままその仕事のデフォルトになっている環境、たとえば test2/test2@test2 の形で使いたいというわけです。 OCIドライバとかであれば、tnsnames.oraの登録でなんとでもなりそうなのですが、 Thinドライバは無条件にSIDを参照しているようなので、SIDを変更しないといけなさ そうなのですが。 何か良い方法がありますでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2004-11-05 11:49
どもです。
まず、Oracle 製品を入れ直す必要はありません。仮にデータベースが 複数必要であれば、環境変数 $ORACLE_SID を変更してデータベースを 作成すればよいですから。 ただ、「その仕事が終わって、別の仕事の開発にマシンに流用するときに、」 とあることから開発機のデータベースだと思うのですが、データベースの 物理構成を気にしないのであれば現行のデータベースにスキーマを追加して、 接続するときに test2/test2@test で接続すればどうでしょう? SID を云々ということは気にしなくても済むのではないかと。 -- 追加 最初の書き込みで「dbの内容は保存し、ディレクトリ位置などは、 以前のsidを参照した位置のままでかまいません。」とデータベースを 複数用意するには矛盾した内容になるので、スキーマを追加した方が 楽なのでは? $ORACLE_SID はあるマシンで起動しているインスタンスを一意に 識別するためのものですが、インスタンスが 1 つだけであれば 変更する必要は無いです。 [ メッセージ編集済み 編集者: もしもし 編集日時 2004-11-05 12:10 ] | ||||
|
投稿日時: 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-11-08 11:00
ども、もしもしです。
えーっと、そもそも SID を変更しなければならない理由は何なのでしょうか? JDBC(でなくてもそうですが)が SID を参照するのは、接続先のローカル データベースを特定するため、だと思っていたのですが、違うのでしょうか? レジストリにある ORACLE_SID は、単に「デフォルトで接続するローカルの データベースを指定する」というだけです。Windows 環境とのことなので、 データベースはサービスとして起動しますが、こいつ自体はサービスを 再作成でもしない限り ORACLE_SID は変更されません。 (なので、レジストリだけ換えてもTNS-12560 あたりが出ると思いますよ) Windows 環境においては、ORACLE_SID はサービスとひも付いていると考えて いただければ間違いないかな、と。 ただ、別に 1 マシン 1 インスタンス、みたいな縛りはないので(リソースが 足りていることが前提ですけど)、あたらしくデータベースを作成したい、 ということであれば、DBCA あたりのツールで新規に作成されてはいかがでしょう? ※「インストール時に明示的に SID を指定できた」とは、単にインストール後に データベースを作成するので(インストール時にソフトウェアのみをインストール すれば、データベース作成もされないのですが)、そのデータベースで使用して いるだけです。 ちなみに、
パスの名前自体は、単に DBCA がそのようにつけているだけですので、 create database を手で実行する場合はどんなパスに書いても作成できます。 | ||||
|
投稿日時: 2004-11-25 00:57
お返事が遅くなりました。
結局、SIDを直接変更する方法は無く、その場合データベースを作り直すのが一番 適当だということですね。 古いデータベースが残っていると、きっともったいないことがおきるので、全体を エクスポートしてから削除するというところでしょうか。 スクラッチからのデータベースの作成というのは、確か一度試したことがあったの ですが、リスナー関係までセットアップするとかなり大変だったような記憶が あります。このあたり、もう少し勉強と練習してみます。 コメントありがとうございました。 | ||||
|
投稿日時: 2004-11-25 15:51
いえいえ、データベースを再作成する必要はなく、 データベースの「サービスを再作成」していただければよい、という ことです。 # 私の書き方も、後から読むとデータベースの再作成が必要なように # 読めてしまいますね。失礼。 サービス(として起動するインスタンス(メモリ上の実体))の 名前が ORACLE_SID になるわけで、データベースの名前は、データベース ファイル一式の名前です。データベースの名前はデータベースの 再作成(より正確には制御ファイルの再作成)で対処しますが、 インスタンス名はサービスを再作成して、初期化パラメータファイルの 名前を init%ORACLESID%.ora に変更すればよいのです。 ....で、結局サービスにしろデータベースにしろ、再作成の手間を かけるくらいなら、既存のデータベースでスキーマを変えるだけで 対処できないのかなーと思った次第です。 |
1