CACS405 Database Administration

Database AdministrationUnit 911 min read

Network Config & Oracle DB Connectivity: Protocols, Topologies & Troubleshooting

Unit 9 of Database Administration explores how Oracle databases communicate over networks, covering TCP/IP, SQLNet, listener configurations, and troubleshooting connectivity issues—essential for administering distributed database systems.

TAKEAWAYS:

  • Oracle databases use listeners (port 1521 by default) and SQL*Net to establish client-server connections via TCP/IP.
  • Network topologies (star, mesh, hybrid) impact database performance and redundancy; star is most common for centralized DBs.
  • TNSNAMES.ORA and SQLNET.ORA files configure client-side connections, while LISTENER.ORA handles server-side routing.
  • Troubleshooting tools like tnsping, lsnrctl, and tnsnames help diagnose connection failures (e.g., "ORA-12541: TNS:no listener").
  • Security protocols (SSL/TLS) encrypt data in transit, critical for cloud-based or remote Oracle DBs.
  • Real-world example: eSewa’s payment gateway uses Oracle DBs with load-balanced listeners to handle 10,000+ concurrent transactions during Dashain.

1. Why Network Configuration Matters for Oracle DBs

Oracle databases rarely run in isolation. They communicate with:

  • Client applications (e.g., SQL*Plus, TOAD, Java apps).
  • Other databases (replication, sharding).
  • Middleware (WebLogic, Apache Tomcat).
  • Cloud services (AWS RDS, Oracle Cloud).

A poorly configured network leads to:

  • Connection timeouts (users can’t log in).
  • Data corruption (packets lost in transit).
  • Security breaches (unencrypted credentials).

2. Core Components of Oracle Networking

A. SQL*Net: Oracle’s Network Protocol

SQL*Net is Oracle’s proprietary protocol that sits above TCP/IP (Layer 5/6 in OSI model). It:

  • Encapsulates SQL requests/responses.
  • Handles connection pooling (reusing connections).
  • Supports failover (redirecting to backup servers).
graph LR
    A["Client App"] -->|"SQL Request"| B["SQL*Net Driver"]
    B -->|"TCP/IP"| C["Listener (Port 1521)"]
    C -->|"SQL Request"| D["Oracle Database"]
    D -->|"SQL Response"| C
    C -->|"TCP/IP"| B
    B -->|"SQL Response"| A

Key Fields in a SQL*Net Packet (simplified):

+---------------------+---------------------+
| Service Context    | Database SID/PDB    |
+---------------------+---------------------+
| SQL Command         | SELECT * FROM...    |
+---------------------+---------------------+
| Data Payload        | Row data (binary)   |
+---------------------+---------------------+
| Checksum            | Error detection     |
+---------------------+

B. Oracle Listener: The Traffic Cop

The Listener is a background process (LSNRCTL) that:

  • Listens on a port (default: 1521).
  • Routes requests to the correct database instance (SID/PDB).
  • Supports load balancing across multiple instances.

Example Configuration in LISTENER.ORA:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))  # For external procedures
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/19c)
    )
    (SID_DESC =
      (SID_NAME = PDB1)
      (ORACLE_HOME = /u01/app/oracle/product/19c)
    )
  )

3. Methods to Configure Network Connectivity

Method 1: TNSNAMES.ORA (Static Configuration)

A local file ($ORACLE_HOME/network/admin/tnsnames.ora) maps net service names to connection details. Example for eSewa’s DB:

ESewa_DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = esewa-db-01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ESewa_PDB)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 180)
        (DELAY = 5)
      )
    )
  )

Pros: Simple, no DNS dependency. Cons: Hard to maintain in large environments.

Method 2: LDAP Directory Services (Dynamic)

Uses Oracle Directory Manager (ODM) or Active Directory to store connection details centrally. Example: Ncell’s billing system uses LDAP to dynamically resolve DB hostnames.

Method 3: Easy Connect (Simplified)

A command-line shortcut for quick connections:

CONNECT username/password@//host:port/service_name

Example for Daraz’s inventory DB:

CONNECT dba_user/Daraz@123@//inventory-db-01:1521/daraz_pdb

Method 4: Oracle Net Manager (GUI Tool)

A graphical tool to configure:

  • SQL*Net parameters (e.g., SQLNET.AUTHENTICATION_SERVICES).
  • Listener parameters (e.g., TIMEOUT settings).
  • TNS aliases.

4. Network Topologies for Oracle DBs

The physical layout affects performance, redundancy, and cost. Common topologies:

Topology Description Oracle Use Case Pros Cons
Star All clients connect to a central server. Single Oracle DB server (e.g., NEPSE’s trading DB). Simple, easy to manage. Single point of failure.
Mesh Every node connected to every other. High-availability clusters (e.g., banks). Redundant paths, fault-tolerant. Expensive, complex.
Hybrid Mix of star and mesh (e.g., star + backup mesh). Cloud deployments (e.g., Pathao’s DB). Balances cost and reliability. Moderate complexity.
Ring Nodes connected in a loop. Rare in Oracle; used in storage networks. Token-passing for fairness. Slow failure recovery.

Real-World Example: Kathmandu Traffic Routes Imagine the NTC’s network monitoring system uses a hybrid topology:

  • Star: Most sensors connect to a central server.
  • Mesh: Critical sensors (e.g., at major intersections) have backup links.
graph TD
    A["Central DB Server"] --> B["District Office 1"]
    A --> C["District Office 2"]
    B --> D["Backup Link to C"]
    C --> D

5. Troubleshooting Connectivity Issues

Step 1: Verify Basic Connectivity

# Check if the listener is running
lsnrctl status

# Test TNS resolution
tnsping ESewa_DB

# Check network reachability
ping db-server
telnet db-server 1521

Step 2: Common Errors & Fixes

Error Cause Solution
ORA-12541: TNS:no listener Listener not running. Start listener: lsnrctl start
ORA-12154: TNS:could not resolve Incorrect tnsnames.ora entry. Verify HOST and PORT in TNSNAMES.ORA.
ORA-01017: invalid username/password Auth failure. Check SQLNET.AUTHENTICATION_SERVICES in sqlnet.ora.
ORA-3136: connection closed Network timeout. Increase SQLNET.EXPIRE_TIME in sqlnet.ora.

Step 3: Log Analysis

Check these logs:

  • $ORACLE_BASE/diag/tnslsnr/<host>/listener/trace/listener.log
  • $ORACLE_BASE/diag/tnslsnr/<host>/listener/alert/log.xml

Example Log Entry:

TNS-12541: TNS:no listener
 VER=19.0.0.0.0
 TNS-12560: TNS:protocol adapter error
  0 64000000

6. Security in Oracle Networking

A. Encryption (SSL/TLS)

Configure in sqlnet.ora:

SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA1)
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA1)
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)

Real-World Use: Khalti’s payment DB uses AES-256 to encrypt card data in transit.

B. Firewall Rules

Allow only necessary ports:

  • 1521: Default Oracle listener port.
  • 1522-1530: Additional listener ports if configured.
  • 2484: Oracle Notifications (ONS).

Example Firewall Rule (Linux):

iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
iptables -A INPUT -p tcp --dport 2484 -j ACCEPT

C. VPN for Remote Access

Use Oracle Wallet or third-party VPNs (e.g., OpenVPN) for secure remote DB access.


7. Real-World Scenario: Configuring Ncell’s Billing Database

Problem: Ncell’s billing system (Oracle DB) experiences connection drops during peak hours (5–8 PM).

Steps to Fix:

  1. Check Listener Load:

    lsnrctl status
    
    • Issue: Listener queue length = 500 (default max is 100).
    • Fix: Increase in LISTENER.ORA:
      QUEUESIZE = 200
      
  2. Enable Connection Pooling: In sqlnet.ora:

    SQLNET.CONNECTION_POOLING = YES
    
  3. Add a Failover Entry:

    FAILOVER_MODE =
      (TYPE = SELECT)
      (METHOD = BASIC)
      (RETRIES = 3)
      (DELAY = 1)
    
  4. Monitor with mwmon:

    mwmon -l -s -t 60
    
    • Result: Connection drops reduced by 90%.

8. Advanced: Oracle Database Gateway

For heterogeneous connectivity (e.g., Oracle ↔ MySQL), use Oracle Gateway:

sequenceDiagram
    participant Client
    participant OracleDB
    participant OracleGateway
    participant MySQLDB

    Client->>OracleDB: SELECT * FROM MySQL_TABLE@MYSQL_GW
    OracleDB->>OracleGateway: Translate SQL to MySQL
    OracleGateway->>MySQLDB: Execute on MySQL
    MySQLDB-->>OracleGateway: Return data
    OracleGateway-->>OracleDB: Convert to Oracle format
    OracleDB-->>Client: Results

Use Case: Daraz’s multi-DB system uses gateways to sync inventory between Oracle (ERP) and PostgreSQL (web app).


In the Real World

  1. eSewa’s Payment Gateway

    • Idea Used: Load-balanced Oracle listeners (multiple listeners on ports 1521–1525) to distribute 50,000+ transactions during Dashain.
    • How: LISTENER.ORA configured with:
      LISTENER =
        (DESCRIPTION_LIST =
          (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = esewa-db-01)(PORT = 1521))
            (ADDRESS = (PROTOCOL = TCP)(HOST = esewa-db-02)(PORT = 1522))
          )
        )
      
  2. Ncell’s Billing System

    • Idea Used: TNS failover to switch to a backup DB if the primary fails.
    • How: tnsnames.ora entry:
      Ncell_Billing =
        (DESCRIPTION =
          (FAILOVER = ON)
          (FAILOVER_TYPE = SELECT)
          (LOAD_BALANCE = ON)
          (ADDRESS = (PROTOCOL = TCP)(HOST = billing-db-01)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = billing-db-02)(PORT = 1521))
        )
      
  3. Pathao’s Ride-Hailing DB

    • Idea Used: Hybrid network topology (star + mesh) for driver-location updates.
    • How:
      • Star: Most driver apps connect to a central Oracle DB.
      • Mesh: Critical nodes (e.g., dispatch servers) have redundant links.

Exam Tip

  1. Memorize Default Ports:

    • Oracle Listener: 1521
    • Oracle Notifications (ONS): 2484
    • Default SQL*Net port: 1521 (unless changed).
  2. TNSNAMES.ORA vs. Easy Connect:

    • TNSNAMES.ORA is static; use for production.
    • Easy Connect is dynamic; use for testing.
  3. Troubleshooting Flow:

    • Step 1: tnsping → Checks TNS resolution.
    • Step 2: lsnrctl status → Checks listener.
    • Step 3: telnet host 1521 → Checks firewall/port.
  4. Security Shortcuts:

    • Always enable SSL in sqlnet.ora for remote DBs.
    • Restrict LISTENER.ORA to specific IPs if possible.
  5. Real-World Questions:

    • Expect scenario-based questions (e.g., "How would you configure a failover for eSewa’s DB?").
    • Draw diagrams for network topologies (star/mesh) in long-answer questions.

Final Note: Oracle networking is 90% configuration, 10% troubleshooting. Master tnsping, lsnrctl, and tnsnames.ora, and you’ll ace this unit!

Based on the TU BCA syllabus for Database Administration (CACS405), unit 9.

Discussion

Loading…