Dotyczy:
Baza danych Oracle – Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Systemy operacyjne – Oracle Linux 6.4 z jądrem 2.6.39-400.109.17.1.el6uek.x86-64 i
Red Hat Enterprise Linux z jądrem 2.6.32-431.el6.x86_64
Platformy pamięci masowej — Dell EqualLogic PS 5000 i Dell EqualLogic PS 6110
Problem:
Jak nawiązać połączenie z podłączanymi bazami danych w programie Oracle RAC 12cR1?
Rozwiązanie:
Istnieją cztery sposoby ustanowienia połączenia z podłączanymi bazami danych (PDB).
- Przy użyciu domyślnej usługi o takiej samej nazwie jak nazwa PDB, która jest automatycznie tworzona przez oprogramowanie do baz danych.
- Przy użyciu usług definiowanych przez użytkownika, utworzonych za pomocą właściwości PDB korzystających z narzędzia SRVCTL, które kojarzy usługę z podłączanymi bazami danych.
- Przy użyciu polecenia zmiany sesji i poprzez przypisanie kontenera do wybranego kontenera.
- Przy użyciu programu Enterprise Manager Express.
1. Korzystanie z usługi domyślnej do nawiązania połączenia z PDB
Aby nawiązać połączenie z PDB przy użyciu usługi domyślnej, należy wykonać następujące czynności.
- Wprowadź wpis w pliku tnsnames.ora definiujący adresy baz danych, które umożliwią nawiązanie połączenia z bazą danych.
- Zmień tryb PDB z zamontowanego na do odczytu/zapisu.
Należy wprowadzić wpis w pliku tnsnames.ora:
W przypadku programu Oracle RAC 12c, mimo że usługa domyślna o takiej samej nazwie jak nazwa bazy danych tworzona jest przez oprogramowanie do baz danych automatycznie, plik tnsnames.ora generowany jest tylko z pojedynczym wpisem odnoszącym się do globalnej bazy danych. Przykładowo w przypadku programu Oracle RAC 12c z dwoma węzłami, gdzie cpdb to globalna baza danych, pdb1 i pdb2 są dwiema podłączanymi bazami danych, a cpdb1 i cpdb2 są dwoma elementami, domyślnym wpisem w pliku tnsnames.ora będzie:-
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
W pliku tnsnames.ora należy także stworzyć odpowiednie wpisy dopasowane do domyślnej nazwy usługi podłączanych baz danych:
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1.dbase.lab)
)
)
PDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb2.dbase.lab)
)
)
Zmiana stanu podłączanej bazy danych:
Po utworzeniu PDB domyślnie parametr open_mode ma tylko wartość „Mounted” (zamontowany). Można to zweryfikować w następujący sposób:
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
Poniższe polecenie powoduje otwarcie wszystkich podłączanych baz danych w trybie odczytu/zapisu.
SQL> Alter pluggable database all open;
Po wykonaniu tych czynności
można ustanowić połączenie z bazą danych przy użyciu sqlplus w następujący sposób:
[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba
SQL*Plus: Wersja produkcyjna 12.1.0.1.0, wtorek, 8 października, 11:23:32, 2013 r.
Prawa autorskie (c) 1982, 2013, Oracle. Wszelkie prawa zastrzeżone.
Połączenie z:
Oracle Database 12c Enterprise Edition wersja 12.1.0.1.0 — 64-bitowa z podziałem, klastrami rzeczywistej aplikacji, automatycznym zarządzaniem pamięcią masową, OLAP, zaawansowanymi funkcjami analitycznymi i opcjami rzeczywistego testowania aplikacji
2. Nawiązywanie połączenia z PDB przy użyciu usługi zdefiniowanej przez użytkownika
Usługi domyślne opisane powyżej powinny być używane tylko do celów administracyjnych. Nie powinny być używane do aplikacji. Do aplikacji zawsze używaj usług zdefiniowanych przez użytkownika, ponieważ można je dostosować do ich wymagań. Nawiązywanie połączenia przy użyciu usług zdefiniowanych przez użytkownika obejmuje następujące czynności:
- Utwórz przy użyciu narzędzia SRVCTL usługę baz danych z właściwością PDB.
- Utwórz wpis w pliku tnsnames.ora do utworzonej usługi.
- Uruchom usługę
- Nawiąż połączenie z bazą danych za pomocą usługi z właściwością PDB utworzoną w kroku a.
a. Tworzenie usługi bazy danych z właściwością PDB przy użyciu narzędzia SRVCTL
Następujące polecenia pozwalają przy użyciu narzędzia SRVCTL utworzyć dwie usługi baz danych: hr1 i sales1, które należy skojarzyć z podłączaną bazą danych pdb1:
[[oracle@node1 bin]$ srvctl add service -db cpdb -service hr1 -pdb pdb1 -preferred cpdb1 -available cpdb2
[oracle@node1 bin]$ srvctl add service -db cpdb -service sales1 -pdb pdb1 -preferred cpdb1 -available cpdb2
Właściwość pbd można wyświetlić w widoku słownika danych all_services.
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
Polecenie $ srvctl config service –db <databasename> również pozwala wyświetlić dostępne usługi.
b. Tworzenie wpisu w pliku tnsnames.ora do utworzonej usługi bazy danych
W sposób wskazany poniżej można tworzyć nazwy sieciowe usług HR_PDB1 i SALES_PDB1, które odpowiednio mogą być używane przez aplikację hr i sales do łączenia się z podłączaną bazą danych pdb1:
HR_PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hr1.dbase.lab)
)
)
SALES_PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales1.dbase.lab)
)
)
c. Uruchamianie usługi
[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1
Service hr1 is not running
[oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1
Uruchomienie usługi skojarzonej z pbd automatycznie otwiera pbd w trybie odczytu zapisu.
d. Łączenie się z usługą bazy danych
Użytkownik może połączyć się z pdb przy użyciu usługi bazy danych z właściwością pdb.
Na przykład użytkownik SYS może połączyć się z pdb1 przy użyciu usługi bazy danych HR_PDB1 skojarzonej z pdb1 w następujący sposób:
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Connected.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. Nawiązywanie połączenia z PDB przy użyciu polecenia zmiany sesji
Domyślnie po połączeniu z elementem RAC łączysz się z CDB$ROOT. Każdy wystąpienie RAC otwiera cały system PDB i dostępny jest jeden obraz systemu. Jeśli chcesz zmienić sesję na pdb, możesz to zrobić, zmieniając sesję i przypisując kontener do wybranego kontenera. Zapytanie „show con_name” może posłużyć do zweryfikowania nazwy bieżącego kontenera.
[oracle@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Wersja produkcyjna 12.1.0.1.0, środa, 9 października, 13:56:27, 2013 r.
Prawa autorskie (c) 1982, 2013, Oracle. Wszelkie prawa zastrzeżone.
Połączenie z:
Oracle Database 12c Enterprise Edition wersja produkcyjna 12.1.0.1.0 – 64-bitowa
Z opcjami partycjonowania, Real Application Clusters, Automatic Storage Management, OLAP,
zaawansowanymi funkcjami analitycznymi i opcjami rzeczywistego testowania aplikacji
SQL> show con_name;
CON_NAME
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL> SHOW CON_NAME;
CON_NAME
PDB1
SQL> ALTER SESSION SET CONTAINER = PDB2;
Session altered.
SQL> SHOW CON_ID;
CON_ID
4
SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
Session altered.
SQL> SHOW CON_NAME;
CON_NAME
CDB$ROOT
Opisy identyfikatorów kontenerów są następujące:
Identyfikator kontenera |
Opis |
0 |
Whole CDB |
1 |
CDB$ROOT |
2 |
PDB$SEED |
od 3 do 254 |
PDB |
Tabela 1: Opisy identyfikatorów kontenerów
W tym konkretnym przykładzie con_id 3 stanowi pdb1 a con_id 4 — pdb2.
[grid@node1 bin]$ echo $ORACLE_HOME
/u01/app/12.1.0/grid
[grid@node1 bin]$ echo $ORACLE_SID
+ASM1
[grid@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Wersja produkcyjna 12.1.0.1.0, środa, 9 października, 13:51:39, 2013 r.
Prawa autorskie (c) 1982, 2013, Oracle. Wszelkie prawa zastrzeżone.
Połączenie z:
Oracle Database 12c Enterprise Edition wersja produkcyjna 12.1.0.1.0 – 64-bitowa
Z opcjami Real Application Clusters i Automatic Storage Management
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Non Consolidated
4. Korzystanie z programu Enterprise Manager (EM) Express do łączenia się z PDB
Jeśli baza danych powstaje przy użyciu programu Database Configuration Assistant (DBCA), po zakończeniu procesu adres URL przeznaczony dla programu EM Express jest dostarczany przez DBCA. Adres URL ma format http://<hostname>:portnumber/em. Domyślny identyfikator portu to 5500.
Zanim przejdziesz do tego adresu URL, aby uzyskać dostęp do programu EM Express, użyj następującego polecenia SQL, aby potwierdzić numer portu do programu EM Express:
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Jeśli dane wyjściowe są takie jak powyżej, możesz połączyć się z adresem URL wyświetlanym w programie DBCA.
Jeśli jednak są puste, jak na przykład
GETHTTPSPORT
należy wykonać procedurę PL/SQL, DBMS_XDB_CONFIG.SETHTTPSPORT, aby ustawić port HTTPS do programu EM Express. Na przykład:
SQL> exec dbms_xdb_config.sethttpsport(5500);
PL/SQL procedure successfully completed.
Po wykonaniu tej procedury spróbuj uzyskać dostęp do programu EM Express przy użyciu adresu URL.
Port HTTP do programu EM Express również można skonfigurować, jak pokazano poniżej:
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
Aby ustawić port EM Express do pbd, zmień kontener na odpowiedni pbd i wykonaj procedurę PL/SQL do ustawiania portu do tego kontenera.
Po wykonaniu tych czynności możesz sprawdzić port HTTP dla cpdb, pdb1 i pdb2 w sposób następujący:
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8080
SQL> alter session set container = pdb1;
Session altered.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8081
SQL> alter session set container = pdb2;
Session altered.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8082
Uwaga: Jeśli nadal nie możesz połączyć się z adresem URL programu EM Express, załaduj ponownie kontrolę obserwatora jako użytkownik sieci, a następnie spróbuj ponownie.