====== Rund um SQL*Net und Real Application Cluster ====== ===== Load Balancing ===== RAC unterstütuzt die folgenden Loadbalancing-Mechanismen: * Client-side Loadbalancing \\ Die Verteilung erfolgt durch den Oracle Client ( z.b. tnsnames.ora). * Server-side Loadbalancing\\ Die Listener Prozesse der Knsoten tauschen regelmäßig Informationen aus und hängen die Verbindungen zum Client um. Die Konfiguration über die REMOTE_LISTENER Konfiguration.\\ Es ist eine Connection-Count (round-robin-Verteilung) oder workload-basiert Verteilung der Sessions möglich. ====Client-side Loadbalancing ==== Wichtig ist die Verwendung der VIP Interface Namen, diese sollten sauber im Netz aufgelößt werden können! \\ Mit LOAD_BALANCE = yes wird SQL*Net angewiesen zufällig einen der Einträge in der ADDRESS_LIST zu verwenden.\\ Eintrag in TNSNames.ora: MYDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = RACmydb1VIP)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = RACmydb12VIP)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = RACmydb13VIP)(PORT = 1521)) (LOAD_BALANCE = yes) ) (CONNECT_DATA = (SERVICE_NAME = opera) ) ) ) ==== Server-side Loadbalancing ==== Die Listener kommunizieren mit Hilfe des Oracle PMON Prozesse untereinander über den Auslastungsgrad\\ Konfiguration: vor 11gR2\\ Eintrag eines TNSAliases für die anderen Listener mit dem Parameter REMOTE_LISTENER in init.ora eine jeden DB Knotens TNSNames Eintrag in der TNSNAmes im Oracle Home der Datenbank Instance auf jeden Knoten \\ \\ ab 11gR2\\ Eintrag der SCAN Listener Adresse :\\ Wie ist die aktuelle Einstellung: SELECT name ,TO_CHAR(creation_date, 'mm-dd-yyyy hh24:mi:ss') created_on ,goal as SRV_Workload_Management_Goal ,clb_goal as onnection_Load_Balancing_Goal ,aq_ha_notifications as AQ_High_Availability_Notific FROM dba_services WHERE name NOT LIKE 'SYS%' ORDER BY name Quelle siehe auch: http://www.databasejournal.com/features/oracle/article.php/3666396/Oracle-10gR2-RAC-Load-Balancing-Features.htm ===== Einen Knoten des Clusters aus dem Benutzerzugriff nehmen ===== Szenario: Ein Node der Datenbank soll neu gestartet werden. Die Anwender sollen sich in den Tagen zuvor nicht mehr an diesen Knoten anmelden, damit sowenig Störungen wie möglich durch bereits angemeldete Sessions entstehen. \\ Ablauf: - Clients: Anpassen der TNSNames der Clients (Adresseintrag des Knotens löschen) - DB Knoten: Remote Listener Eintrag auf dem Knoten, der neu gestartet werden soll, entfernen.\\ Damit wird der Knoten wird aus dem Load Balacing genommen.\\ mit "**alter system set REMOTE_LISTENER='' scope=memory sid='node2';**" - Client: SQL*Plus Session ca. 20/30 mal starten um den Effekt zuprüfen! - DB Knoten: Knoten vor dem Reboot mit "**srvctl stop instance -d mydb -i node2**" stoppen - Clients: Nach dem Reboot Client TNSNames wieder anpassen