- 締切済み
複数企業が利用するOracleの構成について
複数社に納入しているC/S型パッケージ業務ソフトを、 ASP化しようと検討しています。 (現状は各顧客先にサーバとクライアントを 設置していますが、今後はサーバのみ1台に集約して データセンタに設置し、顧客側にはクライアントのみ 設置する予定です。) そこでご相談なのが、Oracleのデータの持たせ方なのですが、 1サーバの中に顧客毎にインスタンス(データベース)を 作成するか、1インスタンスに顧客分ユーザを作成して、 ユーザ毎にスキーマをもたせるか悩んでおります。 セキュリティや個別メンテナンスを考慮すると前者の方が 良いのでしょうが、予算の関係から可能であれば後者を 採用したいと考えております。 そこでそれぞれのメリット・デメリットはどういった事が 考えられるでしょうか?(特に1インスタンスとした場合の デメリットが問題ですが。) よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Siegrune
- ベストアンサー率35% (316/895)
(1)1サーバの中に顧客毎にインスタンス(データベース)を作成する (2)1インスタンスに顧客分ユーザを作成してユーザ毎にスキーマをもたせる >セキュリティや個別メンテナンスを考慮すると前者の方が良いのでしょうが とおよそ認識しておられるとおりですし、ANO1の方が書いておられるとおりです。 で、追加するポイントとして、 障害発生時にはどうなるかという点くらいですか。 (1)なら、ハードやOSレベルの障害でなければ、1インスタンス=1ユーザがダウンするだけ。 (2)なら、全ユーザがダウン。 最近はあまりないですけど、セッションが切れないとかだんまりになっているとかが おきたときにインスタンスを立ち上げなおしたりしたくなることはあります。 必ずサーバを再起動するとか考えておられるなら、(1)でも、全ユーザダウンなので一緒。 あと、資源の利用は(2)のほうが効率的であり、作業の手間も少ないのですが、どれくらい良いかは、 テーブルの持たせ方しだい。 ユーザ毎に別テーブルを持たせて、ユーザ毎にシノニムかビューを作って、同じ名前でプログラムから アクセスさせる方法もありえます。あるいはユーザ毎に同じ名前の別テーブルを作る方法も。 これらだと、効率的なのは、単にインスタンスに関連する資源だけ。 全ユーザが同じテーブルを参照するようにすると、全テーブルに会社区分を入れて、それを参照して 処理が動くようにしないといけないので今がそうなっていないと作業の手間はかえって増えます。 それより、ちょっと気になったのが、 >複数社に納入しているC/S型パッケージ業務ソフトを、 >ASP化しようと検討しています。 >(現状は各顧客先にサーバとクライアントを > 設置していますが、今後はサーバのみ1台に集約して > データセンタに設置し、顧客側にはクライアントのみ > 設置する予定です。) どうされるのかよくわからない書き方ですが、 DBサーバのみデータセンタにおいてクライアントから直接アクセスさせるつもりですか? クライアントとやりとりするサーバはDMZ(非武装地帯)といわれるサーバへの攻撃に対して抵抗力の弱い場所 (今はそんなに弱くないかもしれませんが、それでも万一のときに大丈夫なように内部ネットワークと分けているのが普通。)におかざる得ないので、 DBサーバをおくと攻撃受けてデータ漏洩事件とか比較的簡単に起きてしまいますが。 APサーバが間に入っているのだが記載を省略しているのならいいのですが。
- entree
- ベストアンサー率55% (405/735)
既にご自分でそれなりの回答を出されていません? まずデメリットはセキュリティの低下。 クライアントが直接DBに接続しない場合、アプリによほど致命的な不具合がない限り 大きなリスクになるとは思いませんが。 次に、DBメンテナンスを顧客毎にできない。DBだけ止めてメンテナンスということが ないのであれば全く問題にはなりませんが。 その他、小さな問題でしょうが、1顧客1DBユーザならいいですが、拡張されて 1顧客複数DBユーザにしたくなったとき。パブリックシノニムなどが使えません。 あと、性能面では共有できない大きな1つの共有プール、バッファキャッシュに なるので複数インスタンスに比べると検索効率が悪く若干不利だと思います。 逆に、ログバッファなどは複数インスタンスの場合に比べると効率的になると思います。 メリットはメモリやディスクの使用量が少なくて済むこと。 ディスクについて言えば、システム系の表領域やREDOログが1DB分なので効率的と 言えるでしょう。これはI/O性能にも関わってくる問題です。 なので、自分ならデータ量が少なければディスクの無駄が多いため1つにまとめて、 多ければディスクの無駄は無視しうるため別にすることを検討するかな。 もちろん、別にするにはそれなりのリソースを必要としますし、セキュリティ要件とも 照らし合わせる必要がありますけど。