Blame
|
1 | # Повторение Теории: {#theory} |
||||||
| 2 | Имена базы данных и их отличия: |
|||||||
| 3 | 1. DB_NAME - имя базы данных - это внутренний идентификатор базы данных Oracle. Максимальная длина - 8 символов. Многие каталоги физического хранилища базы данных используют это имя. |
|||||||
| 4 | 2. DB_UNIQUE_NAME - глобальное уникальное имя для базы данных. Базы данных с одним и тем же DB_NAME в одном и том же DB_DOMAIN (например, копии базы данных, созданные для отчетов или STANDBY) должны иметь уникальное DB_UNIQUE_NAME. У каждой базы в компании должно быть уникальное DB_UNIQUE_NAME |
|||||||
| 5 | ||||||||
| 6 | 3. INSTANCE_NAME, он же ORACLE_SID - имя экземпляра базы данных. Это имя, используемое при взаимодействии базы данных и операционной системы. Если вы создали несколько баз данных на машине и хотите подключиться к одной из них через Sqlplus, вам необходимо указать ORACLE_SID: |
|||||||
| 7 | (windows)set ORACLE_SID=SIDNAME |
|||||||
| 8 | (linux/aix)export ORACLE_SID=SIDNAME |
|||||||
| 9 | Метод локального подключения sqlplus / as sysdba будет подключаться к соответствующему экземпляру в соответствии с ORACLE_SID. Возникновение ошибки 12560, обычно происходит из-за неправильного указанного ORACLE_SID или из-за того, что служба не запущена. |
|||||||
| 10 | ||||||||
| 11 | 4. SERVICE_NAMES - параметр с именами служб базы данных. Если у базы данных есть DB_DOMAIN , то SERVICE_NAMES будет равен имени GLOBAL_DB_NAME. В противном случае SERVICE_NAMES будет равен DB_NAME. |
|||||||
| 12 | База регистрируется в LISTENER именно с именами SERVICE_NAMES . И именно эти имена должны указываться в строке подключения к базе данных. |
|||||||
| 13 | В базе данных может быть несколько SERVICE_NAMES. |
|||||||
| 14 | ||||||||
| 15 | 5. TNS_NAME: псевдоним для строки подключения к базе, настраиваемый в файле tnsnames.ora, и позволяющий пользователю подключаться к базе просто по имени, не вводя дополнительных параметров |
|||||||
| 16 | Например в файле tnsnames.ora может быть прописана сл. строка подключения: |
|||||||
|
17 | ``` |
||||||
| 18 | MYBASE = |
|||||||
|
19 | (DESCRIPTION = |
||||||
| 20 | (ADDRESS_LIST =(ADDRESS = |
|||||||
| 21 | (PROTOCOL = TCP) |
|||||||
| 22 | (HOST = MY_HOST) |
|||||||
| 23 | (PORT = 1524))) |
|||||||
| 24 | (CONNECT_DATA =(SERVICE_NAME = MYBASE)) |
|||||||
| 25 | ) |
|||||||
| 26 | ``` |
|||||||
| 27 | Что позволит подключаться к базе через сетевое соединение - `sqlplus sys@MYBASE as sysdba`, вместо того чтобы указывать сервер, порт и имя сервиса - `sqlplus sys@MY_HOST:1524/MYBASE as sysdba` |
|||||||
| 28 | ||||||||
| 29 | ||||||||
| 30 | # Практический блок (Лабораторные работы): {#practice} |
|||||||
| 31 | - [x] 195.133.254.57:53421 - проброс 1521 листенера |
|||||||
| 32 | - [x] 195.133.254.57:53422 - проброс 22 ssh |
|||||||
| 33 | ||||||||
| 34 | 1. Listener: |
|||||||
|
35 | 1. ORA-12154 - TNS:could not resolve the connect identifier specified (не найден алиас/ошибка в tnsnames). |
||||||
|
36 | Попросить выполняюшего подключиться к базе CBS с кредами colvir/colvir через PL SQL Developer. Должен получить ошибку ORA-12154. |
||||||
| 37 | Ожидается, что выполняющий должен понять что для того чтобы исопользовать TNS имя CBS, его для начала необходимо внести в локальный TNSNAMES.ora, в нашем случае |
|||||||
|
38 | ``` |
||||||
| 39 | CBS = |
|||||||
|
40 | (DESCRIPTION = |
||||||
| 41 | (ADDRESS = (PROTOCOL = TCP)(HOST = 195.133.254.57)(PORT = 53421)) |
|||||||
| 42 | (CONNECT_DATA = |
|||||||
| 43 | (SERVER = DEDICATED) |
|||||||
| 44 | (SERVICE_NAME = cbs) |
|||||||
| 45 | ) |
|||||||
| 46 | ) |
|||||||
| 47 | ``` |
|||||||
| 48 | и для сл. теста |
|||||||
|
49 | ``` |
||||||
| 50 | CBS_WR = |
|||||||
|
51 | (DESCRIPTION = |
||||||
| 52 | (ADDRESS = (PROTOCOL = TCP)(HOST = 1.1.1.4)(PORT = 1521)) |
|||||||
| 53 | (CONNECT_DATA = |
|||||||
| 54 | (SERVER = DEDICATED) |
|||||||
| 55 | (SERVICE_NAME = CBS_WR) |
|||||||
| 56 | ) |
|||||||
| 57 | ) |
|||||||
| 58 | ``` |
|||||||
| 59 | После добавления локальной записи должно произойти успешное подключение к БД |
|||||||
|
60 | |||||||
|
61 | 2. ORA-12170: TNS:Connect timeout occurred(тайм-аут/сетевой экран/нет доступа к серверу) |
||||||
|
62 | Попросить выполняюшего подключиться к базе CBS_WR с кредами colvir/colvir через PL SQL Developer.<br> |
||||||
| 63 | Должен получить ошибку `ORA-12170`<br> |
|||||||
| 64 | Рассказать что это разновидность ошибки, когда сервер по какой-то причине не доступен и открытие сокета падает по тайм-ауту из-за сети,фаервола и похожих причин |
|||||||
| 65 | ||||||||
|
66 | 3. ORA-12541: TNS:no listener (листенер выключен/на другом порту/вообще нет) |
||||||
|
67 | * Pre - Выполнить на сервере команду `lsnrctl stop` |
||||||
| 68 | ||||||||
| 69 | Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку `ORA-12541: TNS:no listener` |
|||||||
| 70 | Ожидается, что выполняющий должен понять что проблема с листенером, зайти на сервер, выполнить команду lsnrctl status. |
|||||||
| 71 | Команда покажет отсутствие listenera, выполняющий должен выполнить команду `lsnrctl start` и попробовать снова подключиться к БД успешно |
|||||||
| 72 | ||||||||
|
73 | 4. ORA-12528: TNS:listener: all appropriate instances are blocking new connections (Listener блокирует все подключения кроме Sys, обычно если БД в режиме NOMOUNT/MOUNT/RESTRICT)<br> |
||||||
|
74 | * Pre - Перевести БД на стандартный listener 1521, выполнив `alter system set LOCAL_LISTENER='' scope=both` и `alter systen register` |
||||||
| 75 | * Pre - Потушить БД - `shu immediate` и поднять в режиме nomount - `startup nomount` |
|||||||
| 76 | ||||||||
| 77 | Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку `ORA-12528` |
|||||||
| 78 | Ожидается, что выполняющий пойдет смотреть статус командой `lsnrctl status`, который будет BLOCKED. После ожидается подключение локально под sysdba и проверка состояния БД из `v$instance.status` |
|||||||
| 79 | Рассказать о флаге `(UR=A)` в локальном tnsnames.ora, позволяющим удаленно подключаться к БД под sys, даже когда листенер блокирует все подключения. |
|||||||
| 80 | После этого выполняющий должен подключиться под sys по сети, выполнить mount бд и её открытие |
|||||||
| 81 | ||||||||
|
82 | 5. ORA-12514: TNS:listener does not currently know of service requested in connect descriptor (БД не зарегистрирована в листенере). |
||||||
|
83 | * Pre - Добавить новый листенер, в listener.ora `LISTENER_RESERV = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))` |
||||||
| 84 | * Pre - Добавить новый путь в tnsnames.ora(на сервере) `LISTENER_RESERV = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))` |
|||||||
| 85 | * Pre - Поставить БД дефолтом второй листенер - `alter system set LOCAL_LISTENER='LISTENER_RESERV' scope=both` |
|||||||
| 86 | ||||||||
| 87 | Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку `ORA-12514` |
|||||||
| 88 | Ожидается, что выполняющий пойдет смотреть статус команды `lsnrctl status`, где БД не увидит, |
|||||||
| 89 | Правильный путь так же предполагает попытку вручную зарегать БД в листенере через `alter systen register`; |
|||||||
| 90 | Нужно подсказать посмотреть файл listener.ora, чтоб увидел наличие 2 работающих листенеров, |
|||||||
| 91 | а в БД заполненное значение параметра `local_listener` ссылающееся на второй листенер на порту 1522 |
|||||||
| 92 | ||||||||
| 93 | ||||||||
| 94 | 2. Доступ в БД и авторизация |
|||||||
| 95 | * Неверный пароль |
|||||||
| 96 | * Пользователь заблокирован |
|||||||
| 97 | * Подключение к sys не как sysdba |
|||||||
| 98 | 3. Блокировки |
|||||||
| 99 | * TX Блокировка на строку |
|||||||
| 100 | * TM Блокировка таблицы |
|||||||
| 101 | * Library cache lock при попытке компиляции использующегося объекта и дальнейшего дерева блокировок |
|||||||
| 102 | 4. Инфраструктура |
|||||||
| 103 | * Собрать данные сервера (версия, размер БД, режим логов) для заявки. |
|||||||