こんばんは。
最近Solaris 8 for Intel(10/00)に挑戦しているものです。
コンパイルの時に必要となるcc(C++コンパイラ?)のことで質問があります。
ccを実行しようとすると、こんなエラーがでます。

$ cc
/usr/ucb/cc: language optional software package not installed

原因を探るために/usr/ucb/ccを見たところ、
/usr/ccs/bin/ucbccがないとのことです。
さらに調べていくうちに、/opt/SUNWspro/bin/ccへのシンボリックリンクを
/usr/ucb/ccとして置けばいいということがわかりました。

しかし、/opt/SUNWspro/というフォルダがないのです。
できるかぎり無駄は省きたいので、最小構成でインストールし、
CompanionからはGCCしかインストールしていません。
何か/opt/SUNWspro/以下にインストールするパッケージがあるのでしょうか。
SOFTWARE 2 of 2やCompanionには
そういう雰囲気を漂わせているパッケージはありませんでしたが・・・。

どうすればよいのでしょうか。
/opt/SUNWspro/以下にインストールするパッケージは何でしょうか。

コンパイルができないとほとんどなにもできません(^^;
どなたか、どんなことでもよいので情報があったら教えてくださいませm(_ _)m

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

A 回答 (5件)

何の configure かわかりませんが、GNU がらみの configure なら、


環境変数 CC を gcc にセットして実行すればgcc が使われるよう
になると思いますよ。(というか、GNU のやつなら普通はデフォル
トで gcc だと思うけど)
一旦実行してしまっているなら make distclean で配布状態に戻してから、
env CC=gcc ./configure とかして実行します。

それでだめなら、
ln -s ***/gcc /usr/local/bin/cc
とかして、cc と打ったら gcc が動くようにしてみてはいかがでしょう?
/usr/local/bin が path の前の方にないといけませんが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
見事にenv CC=gcc ./configureで通りました。
#まだまだmakeはできませんが(^^;
ありがとうございました。

お礼日時:2001/02/16 22:45

下の文章が変なので書き直します。



Companionには、*入っていない* libstdc++ をsunsite辺りから取ってきてインストールする必要があると聞いた覚えがあります。
sinsiteのSolaris 8の所には libstdc++ がありませんので Solaris 7の所からダウンロードして下さい。
# stripが無いと言われ、binutilを入れたら
# エンディアンが違うとか言われ、コンパイラ自体
# 動かなくなった、現状使えてない人からの
# アドバイスでした(^^;

参考URL:http://sunsite.sut.ac.jp/sun/solbin/
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
一応ccをGCCとすることで解決しましたので、
この方法はまた機会があったら試させてもらいます。
ポイントをあげられるのが二人までなのでポイントはあげられません。
申し訳ないですm(_ _)m

お礼日時:2001/02/16 22:50

Companionには、*入っていない* libstdc++-2.8.1.1 をインストールする必要があると聞いた覚えがあります。


sunsite の Solaris 7(Solaris 8用は無い)を入れないと駄目、と聞いた覚えがあります。
# stripが無いと言われ、binutilを入れたら
# エンディアンが違うとか言われ、コンパイラ自体
# 動かなくなった、現状使えてない人からの
# アドバイスでした(^^;

参考URL:http://sunsite.sut.ac.jp/sun/solbin/
    • good
    • 0

Solaris2 からは C コンパイラは


別売の製品になっていたはずです。
なので Solaris 標準の cc ではコンパイルできません。

GCC を利用されるようなので Sun C コンパイラを
購入することはないのでしょうが、
他の方も答えられているように
環境変数 CC に gcc をセットするか
configure 実行時に GCC を使うように設定することで
通常は大丈夫です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
こちらにも20ptあげたいのですが、時間順ということにさせてもらいました。

お礼日時:2001/02/16 22:47

ccって普通のCコンパイラですよ?


しかも大体のマシンにおいてgccのほうが使いやすく、早かったりします

ccでなければコンパイルできないソフトがある、とかでもない限りgccを使うほうがよいと思いますが・・・
ちなみにC++コンパイラはg++です

この回答への補足

ご回答ありがとうございます。
もともとccを使う気はなくGCCを使う気ですが、
ccが動かないとconfigureで引っ掛かってしまうのです。
ですので、ccが動かないと困ってしまうのです。

補足日時:2001/02/15 22:10
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QSolaris10でCコンパイラが見つからない?

Solaris 10 1/06 X86版にphp5.1.2をインストールしようとしているのですが、下記エラーが表示されてコンパイルが終了してしまいます。
エラー内容を見るとCコンパイラが見つからないといっているようなのですが、どう対応すればいいのでしょうか・・・

Solaris10にはgccコンパイラがインストールされていると思うのですが・・・

どなたかよろしくおねがいします。

# ./configure
loading cache ./config.cache
checking for Cygwin environment... no
checking for mingw32 environment... no
checking for egrep... egrep
checking for a sed that does not truncate output... /usr/bin/sed
checking host system type... i386-pc-solaris2.10
checking target system type... i386-pc-solaris2.10
checking for gcc... no
checking for cc... no
configure: error: no acceptable cc found in $PATH

Solaris 10 1/06 X86版にphp5.1.2をインストールしようとしているのですが、下記エラーが表示されてコンパイルが終了してしまいます。
エラー内容を見るとCコンパイラが見つからないといっているようなのですが、どう対応すればいいのでしょうか・・・

Solaris10にはgccコンパイラがインストールされていると思うのですが・・・

どなたかよろしくおねがいします。

# ./configure
loading cache ./config.cache
checking for Cygwin environment... no
checking for mingw32 environment... no
che...続きを読む

Aベストアンサー

>インストール時に、全体全体ディストリビューションでインストールして、
>Companion CDもインストールしてあります。

OK。そういう肝心なことは、質問時に書くようにしましょう。
あとは、あなたが使っているシェルの設定ファイルのPATHに、GCCのあるディレクトリを
追加するだけです。

CompanionCDは、GCC等開発用コマンドを、/opt/sfw/bin 配下にインストールしますので、

たとえば、「$HOME/.profile」でPATHを設定
PATH=/opt/sfw/bin:/bin:/usr/bin:/usr/ucb:/etc:.
export PATH

たとえば、「$HOME/.cshrc」でPATHを設定
set path=(/opt/sfw/bin /bin /usr/bin /usr/ucb /etc .)


PATH上にgccがあることの確認。

$ which gcc
/opt/sfw/bin/gcc


gcc にPATHが通っていれば、実行可能

$ gcc -v
Reading specs from /opt/sfw/lib/gcc/i386-pc-solaris2.10/3.4.2/specs
Configured with: ../gcc-3.4.2/configure --prefix=/opt/sfw --with-ld=/usr/ccs/bin/ld \
--with-gnu-as --with-as=/opt/sfw/bin
/gas --enable-shared --disable-libgcj
Thread model: posix
gcc version 3.4.2



>/opt/sfwの中にはgcc-2があるのですが・・・

gcc-2 は古いバージョンのGCCです。

$ /opt/sfw/gcc-2/bin/gcc -v
Reading specs from /opt/sfw/gcc-2/lib/gcc-lib/i386-pc-solaris2.10/2.95.3/specs
gcc version 2.95.3 20010315 (release)

>インストール時に、全体全体ディストリビューションでインストールして、
>Companion CDもインストールしてあります。

OK。そういう肝心なことは、質問時に書くようにしましょう。
あとは、あなたが使っているシェルの設定ファイルのPATHに、GCCのあるディレクトリを
追加するだけです。

CompanionCDは、GCC等開発用コマンドを、/opt/sfw/bin 配下にインストールしますので、

たとえば、「$HOME/.profile」でPATHを設定
PATH=/opt/sfw/bin:/bin:/usr/bin:/usr/ucb:/etc:.
export PATH

たと...続きを読む

Qsolarisのmakeについて

こんにちは。教えて下さい。
solaris7にperl5.6.1をインストールしようとしている所です。
./configuerを実行したあと、makeをしないといけないようなのですが、
make とやると、「見つかりません」と言われてしまいます。
PATHが通ってないのかと思い、echo$PATH とやると
/usr/bin:/usr/sbinと出てきます。
で、ここでmakeを探したのですが見あたらなかったので、
find / -name make としてやると、
/usr/share/lib/make
/usr/ccs/bin/make
/usr/xpg4/bin/make
の三つが見つかりました。
このうち、Linuxでいう/usr/bin/makeにあたる物はどれなんでしょうか。
それとも、私は基本的に何か勘違いをしているでしょうか。
solarisもLinuxもよくわかっていません。
何かアドバイスいただけると嬉しいです。宜しくお願いいたします。

Aベストアンサー

/usr/ccs/bin/make です。
うちでは、これを見てます。

Qcc と gcc の違い

CCとGCCの違いについて教えてください。
どちらも、コンパイラという点では同じだと思うのですが、なぜ2つの方式ができたのでしょうか??

少し話がずれますが、プログラムを汎用性も持たせるなら、どのようなオプションをつけるべきでしょうか?
-ansi とか -Wall あたりをつける癖をつけておけば十分なのでしょうか??

G++とGCCの違いについても知っていれば教えて下さい
初歩的な質問ですがお願いします

Aベストアンサー

GCCはそのコンパイラの固有名詞です。
http://gcc.gnu.org/ このサイトに解説があります。
ccは多くの場合そのシステムに標準で突いているコンパイラです。
そのOSのベンダが提供しているばあいもあれば、FreeBSDのように
中身はgccというものもあります。

g++とgccの違いはデフォルトでC++のファイルとして扱うか
というところが違うだけだったはずです。(多分)

Qmakeコマンドができない

基本的なことだと思いますがお願いします。

fedore core で色んなことをやってみようと思い sl を インストール

していたのですがmakeができないのです。インストール通りにできないの

はなんでですか? makeコマンドは /usr/bin にありました。

的はずれなこと言っていたらすみません。

[root@localhost sl]# ls -lrt
合計 36
-rw-r--r-- 1 3605 lock 4101 1月 19 1994 sl.h
-rw-r--r-- 1 3605 lock 980 1月 19 1994 sl.txt
-rw-r--r-- 1 3605 lock 689 1月 19 1994 sl.1
-rw-r--r-- 1 3605 36 417 7月 22 1998 README
-rw-r--r-- 1 3605 36 331 7月 22 1998 Makefile
-rw-r--r-- 1 root root 76 10月 31 2005 install.txt
-rw-r--r-- 1 3605 36 7131 10月 31 2005 sl.c
[root@localhost sl]# more install.txt
1. # tar xvf sl.tar
2. # cd sl
3. # make
4. # cp sl /usr/local/bin/
5. # sl
[root@localhost sl]# make
cc -O -o sl sl.c -lcurses -ltermcap
make: cc: コマンドが見つかりませんでした
make: *** [sl] エラー 127

基本的なことだと思いますがお願いします。

fedore core で色んなことをやってみようと思い sl を インストール

していたのですがmakeができないのです。インストール通りにできないの

はなんでですか? makeコマンドは /usr/bin にありました。

的はずれなこと言っていたらすみません。

[root@localhost sl]# ls -lrt
合計 36
-rw-r--r-- 1 3605 lock 4101 1月 19 1994 sl.h
-rw-r--r-- 1 3605 lock 980 1月 19 1994 sl.txt
-rw-r--r-- 1 3605 lock 689 1月 19 1994 sl.1
-rw-r--...続きを読む

Aベストアンサー

そのslの出自がわかりませんが、
http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/
にあるものならば、

Makefile の
CC=cc
という行を
CC=gcc
に変更して再度 make してみてください。

> make: cc: コマンドが見つかりませんでした

というメッセージが出ているのだから、makeそのものは実行できている
というのはわかりそうなものですが。make 一発ですまないのは
このslだいぶ前に作られた古いものだからでしょうね。

QBシェルとCシェル

Solarisサーバの運用において、シェルでスクリプトを作成する場合、BシェルとCシェルでは、どちらが多く用いられているでしょうか?

Aベストアンサー

ちょっと補足。
BshかCshかという選択ならBshですが、他の方が言っておられるようにbashなどで書いても構いません。

・一般ユーザが利用するsetuidしていないスクリプト
 shでもbashでもzshでもなんでもよい。
 csh系(tcshも)だけはやめた方が無難。
・setuidしていいるスクリプト
 シェルスクリプトはsetuidしないのが安全。
 csh系(tcshも)だけはやめときましょう。

・Solaris以外のOSに移植するかも知れないスクリプト
 shかbashで書く。
 OSにデフォルトで存在するシェルで書いておいた方が無難。
 shはどのOSにもあるが、微妙なところで仕様が違うので要注意。
 ただ、Solarisの/bin/shは一番古くて仕様がしょぼいので、
 Solarisで動けばよそに持っていっても動くと期待できる。

・システムのブート段階などで動くスクリプト
 基本は/sbin/sh。シェルがスタティックリンクされている必要がある。

QSolaris、SunOSの呼び方

SunOS5 = Solaris7だと、ある方から聞いたのですがSolarisの8、9、10に対応する別の呼び方、例えばSunOSXXと言った呼び方はあるのでしょうか。
また、SunOS4に対応するSolarisXXあるいは別の呼び方があるのでしょうか。
以下の?部分に相当する呼び方を教えていただければ幸いです。

SunOS4 = ?
SunOS5 = Solaris7
? = Solaris8
? = Solaris9
? = Solaris10

Aベストアンサー

デフォルトの設定だと、telnet でログインした時に出てくるかと思います。

#3の方が回答されているように、

Solaris 2.5 = SunOS 5.5
Solaris 2.6 = SunOS 5.6
Solaris 7 (Solaris 2.7) = SunOS 5.7
Solaris 8 (Solaris 2.8) = SunOS 5.8
Solaris 9 (Solaris 2.9) = SunOS 5.9
Solaris 10 (Solaris 2.10) = SunOS 5.10

となっています。

Qエクセルで特定文字列に色をつけたいです。

表中の特定の文字列(例「日本」)に色をつけて表示するようにしたいのですが、ひとつひとつ手で変えていくしかないのでしょうか。
よろしくお願いします。

Aベストアンサー

vba処理です

Sub test()
Dim rng As Range, r As Range, i As Long, colInd As Integer
With ActiveSheet
Set rng = .Range("a1:z100") '範囲の設定
txt = "日本" '文字の設定
colInd = 3 '色の設定
For Each r In rng
If InStr(r, txt) > 0 Then _
r.Characters(InStr(r, txt), Len(txt)) _
.Font.ColorIndex = colInd
Next
End With
End Sub

QSolaris10のswap領域の見方について

Solaris10のswap領域の見方について、教えていただきたいと思います。
df -hコマンドを使用してみると、
ファイルシステム サイズ 使用済み 使用可能 容量 マウント先
/dev/dsk/c0d0s0 5.5G 5.2G 263M 96% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
swap 2.5G 920K 2.5G 1% /etc/svc/volatile
objfs 0K 0K 0K 0% /system/object
/usr/lib/libc/libc_hwcap1.so.1
5.5G 5.2G 263M 96% /lib/libc.so.1
fd 0K 0K 0K 0% /dev/fd
swap 2.5G 1.1M 2.5G 1% /tmp
swap 2.5G 28K 2.5G 1% /var/run
/dev/dsk/c0d0s7 33G 4.7G 28G 15% /export/home

という形でswap領域が表示されますが、

swap -l で計算すると
swap ファイル デバイス swaplo ブロック 空き容量
/dev/dsk/c0d0s1 102,1 8 1076344 1076344
と表示され、1ブロック512バイトなので、551088128byte = 551M となり
上のdf の結果と異なります。

topコマンドを使用すると
total swap, 526M free swap
と出て、どうやら、SWAP領域は500Mちょっと、という認識が正しいのかとおもわれますが、とするとdfの結果の2.5Gは何を指しているのでしょうか?

Solaris10のswap領域の見方について、教えていただきたいと思います。
df -hコマンドを使用してみると、
ファイルシステム サイズ 使用済み 使用可能 容量 マウント先
/dev/dsk/c0d0s0 5.5G 5.2G 263M 96% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab...続きを読む

Aベストアンサー

納得し難いのはわかったので調べてみました。
※ バグや個別の版の動作も考えられるので詳しい版を見れば情報ずっと絞り易いですよ

Sunのサイトでswap と df で検索して見ました。
紹介ページには同様の質問に関する説明がでてますね。(一例)
Supportのタブを開けばバグ関連の情報があれば得られます。
Developerのタブには同様の対話が見つかるかも。

http://onesearch.sun.com/onesearch/index.jsp?qt=swap+df&col=developer-all&cs=false&rt=true&reslang=en
※ 参考URI併記したら半角文字数120迄とのメッセージで書込めなかった。


swap -l の結果はtopの結果と完全に一致してますね。
1076344Block≫525MB+1144Block=525MB+572KB(四捨五入か切上げで526MB)
(1Block512bytes≫2Block 1KB[1025bytes]) / 1MB=1024KB

参考URL:http://forums.sun.com/thread.jspa?forumID=844&threadID=5073339

納得し難いのはわかったので調べてみました。
※ バグや個別の版の動作も考えられるので詳しい版を見れば情報ずっと絞り易いですよ

Sunのサイトでswap と df で検索して見ました。
紹介ページには同様の質問に関する説明がでてますね。(一例)
Supportのタブを開けばバグ関連の情報があれば得られます。
Developerのタブには同様の対話が見つかるかも。

http://onesearch.sun.com/onesearch/index.jsp?qt=swap+df&col=developer-all&cs=false&rt=true&reslang=en
※ 参考URI併記したら半角文字数120迄との...続きを読む

QVNCServerをSolarisにインストール

VNCServerをSolaris9 V100 (UltraSPARC-IIe)にインストールしたいのですが、Unix系のOSに関して全くの初心者なので、なかなか前に進めません。
今のところ、VNCのサイトから下記のファイルを自分のPCにダウンロードして来ましたがこのどちらかのファイルで良いのか、そしてその先はどうすればいいのか分かりません。

また、調べているうちに、サンのコンパニオンCDからもVNCをインストールできると知り、コンパニオンCDとSFWvnc.bz2.sdm というファイルをPCにそれぞれダウンロードしてCDに焼いて見たのですがうまくいきません。
また、実際どちらの方法がベストなのか分かりません。

VNCサイトよりダウンロード
vnc-4_1_2-sparc_solaris.tar
vnc-4_1_2-sparc_solaris.pkg

サンよりダウンロード
software_companion_sparc.iso.bz2
SFWvnc.bz2.sdm

現在Solaris9はネットワークに接続されていません。モニターもキーボードも無く、PCからコンソールケーブルのみで接続されています。

cd /cdrom/s9_software_companion/components/sparc/Packages というコマンドも実行してみましたが、だめでした。

# bunzip2 /cdrom/cdrom0/sfwvnc_b.sdm
bunzip2: Can't guess original name for /cdrom/cdrom0/sfwvnc_b.sdm -- using /cdrom/cdrom0/sfwvnc_b.sdm.out
bunzip2: Can't create output file /cdrom/cdrom0/sfwvnc_b.sdm.out: Read-only file system.


どなたかどういうステップで進めていけばいいのかアドバイスお願いいたします。

VNCServerをSolaris9 V100 (UltraSPARC-IIe)にインストールしたいのですが、Unix系のOSに関して全くの初心者なので、なかなか前に進めません。
今のところ、VNCのサイトから下記のファイルを自分のPCにダウンロードして来ましたがこのどちらかのファイルで良いのか、そしてその先はどうすればいいのか分かりません。

また、調べているうちに、サンのコンパニオンCDからもVNCをインストールできると知り、コンパニオンCDとSFWvnc.bz2.sdm というファイルをPCにそれぞれダウンロードしてCDに焼いて見たので...続きを読む

Aベストアンサー

>Ethernet ケーブルで転送できなかったのはSolaris側からRefuse
自信はありませんが、/etc/hosts.denyや/etc/hosts.allowでアクセス制限があるかもしれません。

何はともあれ、CDからコピーできたとのこと。そして、vncinstallまで実行できたとのこと。

私も、/etc/inet/servicesと/etc/inet/inetd.confはviで編集しました。というより、エディタはviしかわかりません。emacesは知りません。
また、viのカーソルも教科書どおり動きました。(solaris10で確認済み)
カーソルが教科書どうりに動いてくれないのはおかしいですね・・・。

編集前に念のため、servicesとinetd.confをコピーしておくべきでしょう。例えばservices0やinetd.conf0などに。
また、vi使用中におかしなことが起こればetc→:q!コマンドで保存せずにviを強制終了できます。

# vi /usr/local/bin/vncserverで、vncserverファイルを修正。
変更前:#!/usr/local/bin/perl
変更後:#!/usr/bin/perl

次に、servicesの編集。これは例です。
 vnc-1024x768x8 5952/tcp
を追加。5950とは、solarisの未使用ポート番号。おそらく5950は使われてないので、vncで利用します。

次に、inetd.confの編集。これも例です。
 vnc-1024x768x8 stream tcp nowait nobody (Xvncまでのフルパス) Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 8 -cc 3
solaris10での(Xvncまでのフルパス)は/opt/sfw/bin/Xvncでした。solaris9では不明です。ごめんなさい。

# shutdown -i6 -g10 -yで、solarisを再起動。

以上でsolaris側での設定は終わりだと思います。思いますというのは、私はsolaris10をつかっているので、solaris9ではどうなのかは定かではありません。

あとは、windowsクライアントにvnc viewerを入れればよいでしょう。

>Ethernet ケーブルで転送できなかったのはSolaris側からRefuse
自信はありませんが、/etc/hosts.denyや/etc/hosts.allowでアクセス制限があるかもしれません。

何はともあれ、CDからコピーできたとのこと。そして、vncinstallまで実行できたとのこと。

私も、/etc/inet/servicesと/etc/inet/inetd.confはviで編集しました。というより、エディタはviしかわかりません。emacesは知りません。
また、viのカーソルも教科書どおり動きました。(solaris10で確認済み)
カーソルが教科書どうりに動いてくれな...続きを読む

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

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


人気Q&Aランキング

おすすめ情報