Применимо к следующим компонентам.
База данных Oracle — Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Операционные системы — Oracle Linux 6.4 с ядром kernel 2.6.39-400.109.17.1.el6uek.x86-64 и
Red Hat Enterprise Linux с ядром 2.6.32-431.el6.x86_64
Платформы хранения данных — Dell EqualLogic PS 5000 и Dell EqualLogic PS 6110
Проблема.
Как установить соединение с подключаемыми базами данных в Oracle RAC 12CR1?
Решение.
Существует четыре способа установки соединения с подключаемыми базами данных (PDB).
- Использование службы по умолчанию с тем же именем, что и имя базы данных, которая создается автоматически программным обеспечением базы данных.
- Использование определенных пользователем служб, созданных со свойством PDB с помощью утилиты SRVCTL, которая связывает службу с подключаемыми базами данных
- Использование команды «alter session» и установка необходимого контейнера
- Использование Enterprise Manager Express
1. Использование службы по умолчанию для подключения к PDB
Для установки соединения с PDB с помощью службы по умолчанию необходимо выполнить следующие действия.
- В файле tnsnames.ora необходимо создать запись, которая определяет адреса баз данных, позволяющие установить соединение с базой данных.
- Необходимо изменить состояние PDB с установленного на режим чтения и записи.
Необходимо создать запись в файле tnsnames.ora.
При использовании Oracle RAC 12c, хотя программное обеспечение базы данных автоматически создает службу по умолчанию с тем же именем, что и подключаемая база данных, файл tnsnames.ora создается только с одной записью, имеющей отношение к глобальной базе данных. Например, при использовании двухузлового Oracle RAC 12c, где «cpdb» — глобальная база данных, «pdb1» и «pdb2» — две созданные подключаемые базы данных, а «cpdb1» и «cpdb2» — два экземпляра, запись по умолчанию в файле tnsnames.ora приведена ниже:-
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
Таким образом, необходимо создать соответствующие записи для имени службы по умолчанию подключаемых баз данных в файле tnsnames.ora, как показано ниже:
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)
)
)
Изменение статуса подключаемой базы данных.
При создании PDB по умолчанию для параметра «open_mode» установлено значение «Mounted». Это можно проверить следующим образом:
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
Следующая команда открывает все подключаемые базы данных в режиме чтения/записи.
SQL> Alter pluggable database all open;
После этого
можно установить соединение с базой данных с помощью sqlplus следующим образом:
[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba
SQL*Plus: версия 12.1.0.1.0, дата выпуска: 8 октября 2013 г., вторник, 11:23:32
© Oracle, 1982, 2013. Все права сохранены.
Назначение соединения:
Oracle Database 12c Enterprise Edition версия 12.1.0.1.0 — 64-разрядная производственная среда с разбиением на разделы, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics и Real Application Testing
2. Использование определенной пользователем службы для подключения к PDB
Описанную выше службу по умолчанию следует использовать только в административных целях, а не для приложений. Для приложений всегда необходимо использовать определенные пользователем службы, поскольку их можно настраивать в соответствии с требованиями приложений. Установка соединения с помощью определенных пользователем служб включает следующие действия:
- создание службы базы данных со свойством PDB с помощью утилиты SRVCTL;
- создание записи в файле tnsnames.ora для созданной службы;
- запуск службы;
- подключение к базе данных с помощью службы со свойством PDB, созданным на шаге a.
а) Создание службы базы данных со свойством PDB с помощью утилиты SRVCTL
Следующие команды, использующие утилиту SRVCTL, создают две службы базы данных «hr1» и «sales1» для связи с подключаемой базой данных «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
Свойство pdb можно просмотреть в представлении словаря данных «all_services».
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
Команда «$ srvctl config service –db <имя_базы_данных>» также содержит список доступных служб.
б) Создание записи в файле tnsnames.ora для созданной службы базы данных
Имена служб HR_PDB1 и SALES_PDB1, которые могут использоваться приложениями «hr» и «sales» соответственно для установки соединения с подключаемой базой данных «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)
)
)
в) Запуск службы
[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
Запуск службы, связанной с PDB, автоматически открывает PDB в режиме чтения/записи.
г) Подключение к службе базы данных
Пользователь подключается к PDB с помощью службы базы данных со свойством «pdb».
Например, пользователь SYS может подключиться к «pdb1» с помощью службы базы данных HR_PDB1, связанной с «pdb1», следующим образом:
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Connected.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. Использование команды «alter session» для подключения к PDB
По умолчанию при подключении к экземпляру RAC выполняется подключение к CDB$ROOT. Каждый экземпляр RAC открывает PDB, доступен единый образ системы. Если необходимо изменить сеанс на pdb, измените сеанс и укажите необходимый контейнер. Запрос «show con_name» можно использовать для проверки имени текущего контейнера.
[oracle@node1 bin]$ sqlplus / as sysdba
SQL*Plus: версия 12.1.0.1.0, дата выпуска: 9 октября 2013 г., среда, 13:56:27
© Oracle, 1982, 2013. All rights reserved.
Назначение соединения:
Oracle Database 12c Enterprise Edition версия 12.1.0.1.0 — 64-разрядная производственная среда
С разбиением на разделы, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics и Real Application Testing
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
Ниже приведено описание идентификаторов контейнеров.
ID контейнера |
Описание |
0 |
Вся CDB |
1. |
CDB$ROOT |
2. |
PDB$SEED |
От 3 до 254 |
PDB |
Таблица 1. Описания идентификаторов контейнеров
В данном конкретном примере «con_id 3» представляет «pdb1», а «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: версия 12.1.0.1.0, дата выпуска: 9 октября 2013 г., среда, 13:51:39
© Oracle, 1982, 2013. Все права сохранены.
Назначение соединения:
Oracle Database 12c Enterprise Edition версия 12.1.0.1.0 — 64-разрядная производственная среда
С Real Application Clusters и Automatic Storage Management
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Non Consolidated
4. Использование Enterprise Manager (EM) Express для подключения к PDB
При создании базы данных с помощью Database Configuration Assistant (DBCA) на момент завершения URL-адрес для EM Express предоставляется DBCA. URL-адрес имеет формат «http://<hostname>:portnumber/em» с 5500 в качестве идентификатора порта по умолчанию.
Прежде чем перейти по этому URL-адресу для доступа к EM Express, необходимо выполнить следующую инструкцию SQL, чтобы подтвердить порт для EM Express:
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Если выходные данные совпадают с указанными выше, можно подключиться к URL-адресу, отображаемому DBCA.
Однако, если выходные данные не определены, например
GETHTTPSPORT,
необходимо выполнить процедуру PL/SQL, DBMS_XDB_CONFIG.SETTPSPORT, чтобы установить порт HTTPS для EM Express. Например:
SQL> exec dbms_xdb_config.sethttpsport(5500);
Процедура PL/SQL успешно завершена.
После этого попробуйте открыть EM Express с помощью URL-адреса.
Порт HTTP также можно настроить для EM Express, как указано ниже:
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
Чтобы установить порт EM Express для баз данных PDB, необходимо изменить контейнер на соответствующие PDB и выполнить процедуру PL/SQL для установки порта для этого контейнера.
После этого можно проверить порт HTTP для «cpdb», «pdb1» и «pdb2» следующим образом:
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
ПРИМЕЧАНИЕ. Если по-прежнему не удается подключиться к URL-адресу EM Express, перезагрузите элемент управления прослушивателя в качестве пользователя «grid» и повторите попытку.