Oracle Data Access Components (ODAC)

2024-04-04

Oracle tnsnames.oraにおけるSIDとサービス名の違い

Oracleデータベースに接続するには、tnsnames.oraファイルに設定されたSIDまたはサービス名を使用する必要があります。 一見似ているように見えますが、SIDとサービス名は異なるものです。

SID

SIDはSystem Identifierの略で、データベースインスタンスを識別する一意の名前です。 データベースインスタンスは、データベースサーバー上で実行される個別のデータベース環境です。 同じデータベースサーバー上でも、複数のデータベースインスタンスが実行可能です。

サービス名は、ネットワーク上でのデータベースへの接続を容易にするために使用される名前です。 SIDとは異なり、サービス名はデータベースインスタンスごとに一意である必要はありません。 複数のデータベースインスタンスが同じサービス名を使用することも可能です。

tnsnames.oraファイルは、ネットワーク上のデータベースへの接続情報を記述するファイルです。 このファイルには、SIDまたはサービス名、ホスト名、ポート番号などの情報が含まれます。

# tnsnames.ora

# SIDによる接続
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SID = XE)
    )
  )

# サービス名による接続
orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
  • 同じデータベースサーバー上にあるデータベースに接続する場合は、SIDを使用するのが一般的です。
  • 複数のデータベースインスタンスが同じサービス名を使用している場合は、SIDを使用して接続する必要があります。

SIDとサービス名は、Oracleデータベースへの接続に使用する異なる名前です。 それぞれの違いを理解し、状況に応じて使い分けることが重要です。




Python

import cx_Oracle

# SIDによる接続
connection = cx_Oracle.connect("XE", user="scott", password="tiger")

# サービス名による接続
connection = cx_Oracle.connect("orcl", user="scott", password="tiger")

# クエリの実行
cursor = connection.cursor()
cursor.execute("SELECT * FROM emp")
results = cursor.fetchall()

# 接続のクローズ
cursor.close()
connection.close()

Java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Main {

    public static void main(String[] args) throws SQLException {
        // SIDによる接続
        Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XE", "scott", "tiger");

        // サービス名による接続
        connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/orcl", "scott", "tiger");

        // クエリの実行
        java.sql.Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("SELECT * FROM emp");

        // 結果の処理
        while (resultSet.next()) {
            System.out.println(resultSet.getString("ENAME"));
        }

        // 接続のクローズ
        resultSet.close();
        statement.close();
        connection.close();
    }
}

C#

using System;
using System.Data;
using System.Data.OracleClient;

namespace OracleConnectionSample {
    class Program {
        static void Main(string[] args) {
            // SIDによる接続
            string connectionString = "Data Source=localhost:1521/XE;User Id=scott;Password=tiger";
            OracleConnection connection = new OracleConnection(connectionString);

            // サービス名による接続
            connectionString = "Data Source=localhost:1521/orcl;User Id=scott;Password=tiger";
            connection = new OracleConnection(connectionString);

            // クエリの実行
            OracleCommand command = new OracleCommand("SELECT * FROM emp", connection);
            OracleDataReader reader = command.ExecuteReader();

            // 結果の処理
            while (reader.Read()) {
                Console.WriteLine(reader["ENAME"].ToString());
            }

            // 接続のクローズ
            reader.Close();
            connection.Close();
        }
    }
}

これらのコードは、tnsnames.oraファイルに設定されたSIDまたはサービス名を使用してOracleデータベースに接続する方法を示しています。




SIDとサービス名を使用する以外の方法

Easy Connectは、Oracle Database 10g以降で導入された接続方法です。 SIDやサービス名を使用する代わりに、データベースサーバーのホスト名、ポート番号、データベース名を使用して接続します。

# Easy Connectによる接続
sqlplus scott/tiger@localhost:1521/orcl

Oracle接続文字列は、JDBCなどのプログラミング言語でデータベースに接続するために使用されます。 SID、サービス名、ホスト名、ポート番号などの接続情報を文字列形式で指定します。

# Oracle接続文字列による接続
connection = cx_Oracle.connect("jdbc:oracle:thin:@localhost:1521/XE", user="scott", password="tiger")

Oracle Data Access Components (ODAC)

ODACは、Oracleが提供するデータベース接続用のコンポーネントです。 ODACを使用すると、C#、Java、Delphiなどのプログラミング言語からOracleデータベースに接続することができます。

SQLPlusは、Oracleデータベースのコマンドラインツールです。 SQLPlusを使用して、データベースへの接続、クエリの実行、データの編集などを行うことができます。

SIDとサービス名を使用する以外にも、Oracleデータベースに接続する方法はいくつかあります。 それぞれの方法にはメリットとデメリットがあるので、状況に応じて使い分けることが重要です。


database oracle service


C#、ASP.NET、データベースで使える!LinqDataSource のレコード数制限テクニック

LinqDataSource は ASP. NET Web Forms で使用されるデータソースコントロールです。LINQ クエリを使用して、データベースからデータを取得することができます。LinqDataSource でデータベースから取得するレコード数を制限するには、以下の方法があります。...


Entity Framework Core を使用して C# で列挙型をデータベースに格納する

数値として格納最も一般的な方法は、列挙型の値を数値としてデータベースに格納する方法です。これは、列挙型の基底型が通常 int であるため、シンプルでわかりやすい方法です。この例では、Status 列挙型は Pending、Approved、Rejected の 3 つの値を持つことが定義されています。データベースに格納する場合、これらの値はそれぞれ 0、1、2 として保存されます。...


データベーストランザクション:ACID 特性で実現する安全なデータ操作

ACID 特性は、データベーストランザクションの信頼性を保証するために必要な 4 つの特性です。原子性 (Atomicity)原子性とは、トランザクション内のすべての操作が成功するか、すべて失敗するかを保証する特性です。たとえ一部の操作が失敗しても、データベースは元の状態に戻ります。...


PHPとMySQLで成果システムを構築する方法

このチュートリアルでは、PHPとMySQLを使用して成果システムを構築する方法を説明します。このシステムでは、ユーザーが達成した成果を記録し、追跡することができます。必要なものApacheまたはNginxなどのWebサーバーPHPがインストールされたホスティング...


製品バリアントモデリング:MySQL、データベース、JSON、NoSQLの比較

製品バリアントをモデリングするには、まず製品のデータ構造を理解する必要があります。製品は通常、次の属性を持つエンティティとして表されます。製品ID:製品を識別する一意の番号製品名:製品の名前製品説明:製品の詳細な説明製品カテゴリ:製品のカテゴリ...