ママのスキンケアのお悩みにおすすめアイテム

SID、(init.SIDora内の)SERVICE_NAMES、GLOBAL_DBNAME、DB_NAME、DB_DOMAINの関係は
どうなっているのでしょうか?以下でいいのでしょうか?

SID =DB_NAME
サービス名=GLOBAL_DBNAME=DB_NAME+DB_DOMAIN

このQ&Aに関連する最新のQ&A

A 回答 (1件)

通常はそのような記述をしますね


違う名前をつけるとあとでわけがわからなくなるので。

まずはSIDとDB_NAMEの関係について
SID:インスタンスのID
DB_NAME:データベースのID
インスタンスとデータベースは別物なのでそれぞれに名前を付けます
インスタンスはデータベースを操作するプロセス群とSGAと呼ばれるメモリ領域を合わせたものです
データベースとはデータファイル、制御ファイル、REDOログファイルなどの物理構成、その中の論理構成をさします
インスタンスとデータベースはほとんどの場合1対1で関連付けされますが、1つのデータベースに対して複数のインスタンスを立ち上げることも可能です(Real Application Clusters)(8iまではパラレルサーバという名前だったような。。。)
というわけで、インスタンス名とデータベース名は別々につけることができるようになっているわけです。

サービス名はインスタンスに接続するための識別子です
Oracle8まではクライアント側のtnsnames.oraに(SID=ORCL)と記述したのですが、Oracle8iからは(SERVICE_NAME=ORACLE.WORLD)と記述するようになりました。(でも古いままでも接続できる)
サービス名は1つのインスタンスに対して複数の名前を付けることができます。別名のようなものですね。

GLOBAL_NAMEはDB_LINKを使用するときに必要だったような。。。すいません、このへんはちょっと詳しくないです。。。

まとめると、クライアントからサービス名をもとにインスタンスに接続し、インスタンスではinitORCL.oraのDB_NAMEをもとにデータベースに接続するという感じでしょうか。
[クライアント]--[サービス名]--[インスタンス]--[データベース]
    • good
    • 0
この回答へのお礼

ありがとうございました。自分でも
もう少し調べてみました。


DB_NAME が同じでもSIDを別にすることで
複数インスタンスを立ち上げることが
できるのですねMTSで使ったり、複数の
試験環境に使ったりするようです

サービス名はホストネーミング、
ローカルネーミング、ORACLE NAMEで
名前解決するための、定義のようですね

リスナーにインスタンスを自動登録する際に
のインスタンス登録名のようなんですが
GLOBAL_NAMEはDB_NAME+DB_DOMAINの様なのですが
いまひとつ理解できてません

お礼日時:2005/02/26 11:44

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSIDとSERVICE_NAMEの違いとは?

tnsnames.oraの中の(CONNECT_DATA=に SIDだったりSERVICE_NAMEだったりしますが、どのような違いがあるのでしょうか?
どちらでもつながるのでいいかとは思いますが、何かメリット・デメリットでもあるのでしょうか?
それとも過去の遺物が未だ共存しているだけでしょうか?
SIDはインスタンスにつけられた名前だと知っていますが、SERVICE_NAMEってなんですか?

Aベストアンサー

SIDはインスタンスの識別子、service_nameはサービス名。
インスタンスとサービスの違いはRAC を勉強されるとよくわかると思います。

サービス名は初期化パラメータのservice_namesで設定します。
設定されていない場合は先述のとおりdb_unuque_name.db_domainになります。
(これが同義と誤解されやすい原因となっているわけですが)

ところで、service_namesパラメータですが、複数形になっていることからもわかるように、複数のサービス名をコンマ区切りで指定できるようになっています。

これをこのように使います。

2ノードRAC環境で、インスタンス1(SID=hoge1)、インスタンス2(SID=hoge2)があったとします。
ノードを意識することなく接続できるようにするためにクライアント側のtnsnames.oraにはこんな設定を追加します。

HOGE.EXAMPLE.COM
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
(CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = hoge.example.com))
)

インスタンス1とインスタンス2のservice_namesパラメータにhoge.example.comを追加します。すると、インスタンス1とインスタンス2にラウンドロビンで接続できるようになります。

ここで、もしtnsnames.oraのservice_name=...がSID=hoge1だったらどうなるでしょう?
インスタンス2のSIDはhoge2ですから一致せず、インスタンス2には接続できず、いつもインスタンス1に繋がってしまいます。

次に、一時的にメンテナンスのためにインスタンス2にアクセスしてほしくないケースを考えます。service_nameであれば、インスタンス2のservice_namesパラメータからhoge.example.comを削除することで(動的に変更できます)直ちにインスタンス1にのみ接続されるようにできます。

ここで、もしORACLE_SIDだったら・・・変更のためにインスタンスの再起動が必要になってしまいますね?

最後にservice_namesは複数登録できます。3ノードRAC環境において、オンライン処理(service_name=ONLINE)、バッチ処理(service_name=BATCH)があったとします。
バッチ処理は1つのノード(インスタンス1)でのみ処理したいとします。オンライン処理は3つのノードでしたいとします。

そんなとき、service_nameであれば、

<<サーバ側の初期化パラメータ>>
1:service_names = online, batch
2:service_names = online
3.service_names = online

<<クライアント側のtnsnames.ora>>

オンライン処理
ONLINE.EXAMPLE.COM
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
(CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = online.example.com))
)

BATCH.EXAMPLE.COM
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
(CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = batch.example.com))
)

と、クライアント側では接続先サーバを気にすることなく構成できますね?
BATCHのノードを1から2にしたい場合の変更はサーバ側のみでできますよね?
serivce_namesの"batch"設定をノード2に移すだけです。

SIDはインスタンスの識別子、service_nameはサービス名。
インスタンスとサービスの違いはRAC を勉強されるとよくわかると思います。

サービス名は初期化パラメータのservice_namesで設定します。
設定されていない場合は先述のとおりdb_unuque_name.db_domainになります。
(これが同義と誤解されやすい原因となっているわけですが)

ところで、service_namesパラメータですが、複数形になっていることからもわかるように、複数のサービス名をコンマ区切りで指定できるようになっています。

これをこのように...続きを読む

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QSQL*PLUSにてデータベース名表示

SQL*PLUSにて、起動時ホスト文字列(データベース)を入力しますが、
そのデータベースをSQL*PLUS上、表示する方法を知りたいです。
どこかテーブルに持っているのか、もしくは、表示コマンドがあるのか、ぜひ教えてください。
以上、よろしくお願いします。

Aベストアンサー

インスタンス名でよいのですか?一応、インスタンス名とホスト名を表示するSQLを書きます。

select INSTANCE_NAME, HOST_NAME from v$instance;

回答が的を射ていない場合は補足をお願いいたします。

QOracleで流したSQLのログを取得できますか?

ASP+Oracle9iで作られたシステムがあります。
Oracleの設定などは前任者がしており、まともな引継ぎを受けないまま私が維持運用員となりました。
現在DBからあるレコードが消えてしまい(最初から作られてない可能性もあり)、顧客からクレームがついています。
状況から考えて怪しいプログラムを調査したのですが、原因不明でした。
そこで、Oracleの方で今まで流れたSQLをログとして保存していれば手がかりがつかめるのではないかと思い、情報を探しているのですが見つからないので教えて頂きたいのです。
私はOracleの知識(管理面について)が殆どなく、Oracleを使うことはできるが、Oracleの設定がどういう状況になっているか調べることもできず、資料もありません。

1.そもそもOracleにSQLをログとして保存する機能があるのか?
2.あるとすれば、保存機能が有効になっているか、保存したファイルがどこにあるかをどこで確認できるか?

以上の点についてご存知の方、どうぞ回答よろしくお願いします。

Aベストアンサー

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができます。
  アーカイブログモードになっているかどうかは、下記で確認できます。
   SQL> select log_mode from v$database;

  また、どのアーカイブログファイルを調査するかは下記を参照すれば良いと思います。
   SQL> select name,to_char(completion_time, 'yyyy/mm/dd hh24:mi') adate from v$archived_log;

2.フラッシュバック問い合わせ
  これは初期化パラメータUNDO_MANAGEMENTがAUTOに設定されており、かつUNDO_RETENTIONが保存期間として適切に設定されている場合のみ使用できます。
  やっていることは、UNDO表領域(旧RBS用表領域)の中に残っている実行履歴を参照しています。したがって、データベース設計時にフラッシュバック問い合わせを前提としていない限り、使える可能性は低いです。

3.その他
  監査を実行していれば、実行SQLを取得できる可能性があります。
  ただし、監査レベルなどを理解しておかないと、すべてのSQLが取得されていない可能性がありますので、難しいかもしれません。

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができま...続きを読む

Q突然オラクルへ接続できなくなりました

ローカルにオラクルをインストールして開発をしていました。
しばらく時間があいた後、開発を再開しようとするとDBへの
接続ができなくなっていました。

sqlplusではDB操作可能なので、DBそのものは落ちていないと
思うのですが…
リスナーのステータスを確認すると(lsnrctl status SID)下記のエラーが出ます。

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MY-PC)(PORT=1521))(CONNECT_DATA=(
SERVER=DEDICATED)(SERVICE_NAME=SID)))に接続中
TNS-12535: TNS: 操作はタイム・アウトしました。
TNS-12560: TNS: プロトコル・アダプタ・エラー
TNS-00505: 操作タイムアウトです。
32-bit Windows Error: 60: Unknown error

何が問題でどうすればよいのかわからないのですが、何か対応策があれば教えてください。
DBを再構築することも考えたのですが、原因がわからなければ同じ事が起こる(起こす?)
ような気がするので。

よろしくお願いします。

ローカルにオラクルをインストールして開発をしていました。
しばらく時間があいた後、開発を再開しようとするとDBへの
接続ができなくなっていました。

sqlplusではDB操作可能なので、DBそのものは落ちていないと
思うのですが…
リスナーのステータスを確認すると(lsnrctl status SID)下記のエラーが出ます。

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MY-PC)(PORT=1521))(CONNECT_DATA=(
SERVER=DEDICATED)(SERVICE_NAME=SID)))に接続中
TNS-12535: TNS: 操作はタイム・アウトしました。
TNS-12560: TNS:...続きを読む

Aベストアンサー

DBの起動/停止とサービスの起動/停止は別物です。
サービスの「OracleServiceSID」と「OracleOraDb11g_home1TNSListener」は、それぞれDBとリスナーのためのもので、DBやリスナーそのものではありません。
サービスの「OracleServiceSID」と「OracleOraDb11g_home1TNSListener」を起動状態にした後で
DBやリスナを起動します。

以下を参考にしてください。
http://www.shift-the-oracle.com/config/startup-oracle.html
http://otndnld.oracle.co.jp/beginner/oracle10g/1st/windows/index.html#configuration

QOracleDB接続エラー(ORA-12541: TNS:no listener)が出ます。

OracleDBで以前までは普通に繋がっていたインスタンスに接続できなくなってしまいました。
Net8 Configration Assistantでテストしたところ、以下のようなエラーが発生しました。

-------------------------
接続しています...ORA-12541: TNS:no listener
テストは成功しませんでした。

指定した情報が間違っている可能性があります。
指定したネット・サービス名情報を確認するには、「戻る」をクリックします。ユーザー名を変更するには「ログインの変更」をクリックします。
-------------------------
特に設定を変えた記憶は無いのですが・・・

情報が少ないかも知れませんが、何か原因が考えられる方、よろしくお願い致しますm(_ _)m
これだけだと厳しいでしょうか・・・
Oracleはかなり初心者ですので、どのような情報が必要かもちょっと分かりかねてます。
こういう情報があればわかるかも、というものがあれば提示致しますので、何卒よろしくお願いします。

なお、OSはWin2000、Oracleのバージョンは8.1.7です。

OracleDBで以前までは普通に繋がっていたインスタンスに接続できなくなってしまいました。
Net8 Configration Assistantでテストしたところ、以下のようなエラーが発生しました。

-------------------------
接続しています...ORA-12541: TNS:no listener
テストは成功しませんでした。

指定した情報が間違っている可能性があります。
指定したネット・サービス名情報を確認するには、「戻る」をクリックします。ユーザー名を変更するには「ログインの変更」をクリックします。
---------------------...続きを読む

Aベストアンサー

>サーバ側のTNSリスナーとはどのように起動すれば良いのでしょうか?

MS-DOSプロンプトで
  「lsnrctl start」
と打つと起動します。

ちなみに
  「lsnrctl status」
でTNSListenerの状態が確認できますよ

Qoracleで別のグローバルデータベースのテーブルからPL/SQLでデータをinsertする方法。

こんにちは。

別の場所に設置してあるoracleのデータベースからinsert文でデータを引っ張って来れないかと思っています。

ご存知の方いらっしゃれば宜しくお願い致します。

内容:
ここのoracleです。
グローバルデータベース名:testa.ok.com
(データベース名:testa)
スキーマ名:output
テーブル名:名称マスタ
項目内容:番号、名前
ユーザ名:tosi
password:tosi

あっちのoracleです。
グローバルデータベース名:testb.ok.com
(データベース名:testb)
スキーマ名:input
テーブル名:名称マスタ
項目内容:番号、名前
ユーザ名:tosi
password:tosi

PL/SQLで出来ないものでしょうか?
宜しくお願い致します。

Aベストアンサー

こんにちわ。

データベースリンクを使用すれば可能です。
まず、あっちのデータベース (testb.ok.com) に接続
するための接続文字列をtnsnames.ora に定義します。
→ sqlplus tosi/tosi@接続文字列 でtestb.ok.com
  に接続できる事を確認して下さい。

次にtesta.ok.com 側にデータベースリンクを作成します。
Create database link DBリンク名
 connect tosi identified by tosi using '接続文字列';
→ select ~ from input.名称マスタ@DBリンク名
  where ~
 で、データベースリンク経由でデータにアクセスできること
 を確認して下さい。

後は、SQL 文 (PL/SQL でも可) の中で
Insert into 名称マスタ select * from
 input.名称マスタ@DBリンク名 where ~;
とすれば、Ok です。

Qオラクルのグローバルデータベース名について

グローバルデータベース名またはSIDはどこに設定されているのでしょうか?環境変数?レジストリ?
問題はOracle8iをアンインストールしてOracle9iのインストール時に同じグローバルデータベース名もしくはSIDがありますというエラーメッセージが出てしまいます。同じ名称でDBを作成したいのですが。
アドバイスお願いします。

Aベストアンサー

アンインストールする前、もしくは製品コンポーネントのみをインストール後に Oracle 製品に付属する oradim.exeを使ってサービスを削除することでその問題は回避できると思います。

C:\> oradim -delete -sid <SID>

Q【Oracle】リモートでのimpコマンドによりインポート

初心者ですが、よろしくお願いいたします。

Windows2003サーバからRedHatLinuxES3のOracle10.2.0.1.0にたいして
impコマンドを実施したところ、以下のエラーで接続できません。
調べてみたのですが、有効な情報が得られなかったのでどなたか教えてください。

IMP-00058: Oracleエラー6550が発生しました。
ORA-06550: line 1, column 33:
PLS-00302: component 'SET_NO_OUTLINES' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
IMP-00000: エラーが発生したためインポートを終了します。

Aベストアンサー

1.Importしようとしているダンプファイルは10.2.0.1のexp.exeで取得したものでしょうか?

2.Windows2003には10.2.0.1以外のOracleは入っていないでしょうか?impと打つとバージョンが出ますが、意図しないバージョンのimpが起動しているなんてことは無いですか?

3.提示されているエラーの前後も載せることが出来ますか?

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。


人気Q&Aランキング