Повторение Теории: {#theory}
Имена базы данных и их отличия:
DB_NAME - имя базы данных - это внутренний идентификатор базы данных Oracle. Максимальная длина - 8 символов. Многие каталоги физического хранилища базы данных используют это имя.
DB_UNIQUE_NAME - глобальное уникальное имя для базы данных. Базы данных с одним и тем же DB_NAME в одном и том же DB_DOMAIN (например, копии базы данных, созданные для отчетов или STANDBY) должны иметь уникальное DB_UNIQUE_NAME. У каждой базы в компании должно быть уникальное DB_UNIQUE_NAME
INSTANCE_NAME, он же ORACLE_SID - имя экземпляра базы данных. Это имя, используемое при взаимодействии базы данных и операционной системы. Если вы создали несколько баз данных на машине и хотите подключиться к одной из них через Sqlplus, вам необходимо указать ORACLE_SID: (windows)set ORACLE_SID=SIDNAME (linux/aix)export ORACLE_SID=SIDNAME Метод локального подключения sqlplus / as sysdba будет подключаться к соответствующему экземпляру в соответствии с ORACLE_SID. Возникновение ошибки 12560, обычно происходит из-за неправильного указанного ORACLE_SID или из-за того, что служба не запущена.
SERVICE_NAMES - параметр с именами служб базы данных. Если у базы данных есть DB_DOMAIN , то SERVICE_NAMES будет равен имени GLOBAL_DB_NAME. В противном случае SERVICE_NAMES будет равен DB_NAME. База регистрируется в LISTENER именно с именами SERVICE_NAMES . И именно эти имена должны указываться в строке подключения к базе данных. В базе данных может быть несколько SERVICE_NAMES.
TNS_NAME: псевдоним для строки подключения к базе, настраиваемый в файле tnsnames.ora, и позволяющий пользователю подключаться к базе просто по имени, не вводя дополнительных параметров Например в файле tnsnames.ora может быть прописана сл. строка подключения:
MYBASE = (DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP) (HOST = MY_HOST) (PORT = 1524))) (CONNECT_DATA =(SERVICE_NAME = MYBASE)) )Что позволит подключаться к базе через сетевое соединение -
sqlplus sys@MYBASE as sysdba, вместо того чтобы указывать сервер, порт и имя сервиса -sqlplus sys@MY_HOST:1524/MYBASE as sysdba
Практический блок (Лабораторные работы): {#practice}
- 195.133.254.57:53421 - проброс 1521 листенера
- 195.133.254.57:53422 - проброс 22 ssh
Listener:
ORA-12154 - TNS:could not resolve the connect identifier specified (не найден алиас/ошибка в tnsnames). Попросить выполняюшего подключиться к базе CBS с кредами colvir/colvir через PL SQL Developer. Должен получить ошибку ORA-12154. Ожидается, что выполняющий должен понять что для того чтобы исопользовать TNS имя CBS, его для начала необходимо внести в локальный TNSNAMES.ora, в нашем случае
CBS = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 195.133.254.57)(PORT = 53421)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cbs) ) )и для сл. теста
CBS_WR = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.4)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = CBS_WR) ) )После добавления локальной записи должно произойти успешное подключение к БД
ORA-12170: TNS:Connect timeout occurred(тайм-аут/сетевой экран/нет доступа к серверу) Попросить выполняюшего подключиться к базе CBS_WR с кредами colvir/colvir через PL SQL Developer.
Должен получить ошибкуORA-12170
Рассказать что это разновидность ошибки, когда сервер по какой-то причине не доступен и открытие сокета падает по тайм-ауту из-за сети,фаервола и похожих причинORA-12541: TNS:no listener (листенер выключен/на другом порту/вообще нет)
- Pre - Выполнить на сервере команду
lsnrctl stop
Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку
ORA-12541: TNS:no listenerОжидается, что выполняющий должен понять что проблема с листенером, зайти на сервер, выполнить команду lsnrctl status. Команда покажет отсутствие listenera, выполняющий должен выполнить командуlsnrctl startи попробовать снова подключиться к БД успешно- Pre - Выполнить на сервере команду
ORA-12528: TNS:listener: all appropriate instances are blocking new connections (Listener блокирует все подключения кроме Sys, обычно если БД в режиме NOMOUNT/MOUNT/RESTRICT)
- Pre - Перевести БД на стандартный listener 1521, выполнив
alter system set LOCAL_LISTENER='' scope=bothиalter systen register - Pre - Потушить БД -
shu immediateи поднять в режиме nomount -startup nomount
Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку
ORA-12528Ожидается, что выполняющий пойдет смотреть статус командойlsnrctl status, который будет BLOCKED. После ожидается подключение локально под sysdba и проверка состояния БД изv$instance.statusРассказать о флаге(UR=A)в локальном tnsnames.ora, позволяющим удаленно подключаться к БД под sys, даже когда листенер блокирует все подключения. После этого выполняющий должен подключиться под sys по сети, выполнить mount бд и её открытие- Pre - Перевести БД на стандартный listener 1521, выполнив
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor (БД не зарегистрирована в листенере).
- Pre - Добавить новый листенер, в listener.ora
LISTENER_RESERV = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522)) - Pre - Добавить новый путь в tnsnames.ora(на сервере)
LISTENER_RESERV = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522)) - Pre - Поставить БД дефолтом второй листенер -
alter system set LOCAL_LISTENER='LISTENER_RESERV' scope=both
Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку
ORA-12514Ожидается, что выполняющий пойдет смотреть статус командыlsnrctl status, где БД не увидит, Правильный путь так же предполагает попытку вручную зарегать БД в листенере черезalter systen register;
Нужно подсказать посмотреть файл listener.ora, чтоб увидел наличие 2 работающих листенеров, а в БД заполненное значение параметраlocal_listenerссылающееся на второй листенер на порту 1522- Pre - Добавить новый листенер, в listener.ora
Доступ в БД и авторизация
- Неверный пароль
- Пользователь заблокирован
- Подключение к sys не как sysdba
Блокировки
- TX Блокировка на строку
- TM Блокировка таблицы
- Library cache lock при попытке компиляции использующегося объекта и дальнейшего дерева блокировок
Инфраструктура
- Собрать данные сервера (версия, размер БД, режим логов) для заявки.