Blame

c75a65 feagor 2026-02-02 04:53:41
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 может быть прописана сл. строка подключения:
0d7afb feagor 2026-02-02 04:57:50
17
```
18
MYBASE =
c75a65 feagor 2026-02-02 04:53:41
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:
ce611d feagor 2026-02-02 04:56:05
35
1. ORA-12154 - TNS:could not resolve the connect identifier specified (не найден алиас/ошибка в tnsnames).
1233fa feagor 2026-02-02 04:56:56
36
Попросить выполняюшего подключиться к базе CBS с кредами colvir/colvir через PL SQL Developer. Должен получить ошибку ORA-12154.
37
Ожидается, что выполняющий должен понять что для того чтобы исопользовать TNS имя CBS, его для начала необходимо внести в локальный TNSNAMES.ora, в нашем случае
0d7afb feagor 2026-02-02 04:57:50
38
```
39
CBS =
ce611d feagor 2026-02-02 04:56:05
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
и для сл. теста
0d7afb feagor 2026-02-02 04:57:50
49
```
50
CBS_WR =
ce611d feagor 2026-02-02 04:56:05
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
После добавления локальной записи должно произойти успешное подключение к БД
c75a65 feagor 2026-02-02 04:53:41
60
ce611d feagor 2026-02-02 04:56:05
61
2. ORA-12170: TNS:Connect timeout occurred(тайм-аут/сетевой экран/нет доступа к серверу)
c75a65 feagor 2026-02-02 04:53:41
62
Попросить выполняюшего подключиться к базе CBS_WR с кредами colvir/colvir через PL SQL Developer.<br>
63
Должен получить ошибку `ORA-12170`<br>
64
Рассказать что это разновидность ошибки, когда сервер по какой-то причине не доступен и открытие сокета падает по тайм-ауту из-за сети,фаервола и похожих причин
65
ce611d feagor 2026-02-02 04:56:05
66
3. ORA-12541: TNS:no listener (листенер выключен/на другом порту/вообще нет)
c75a65 feagor 2026-02-02 04:53:41
67
* Pre - Выполнить на сервере команду `lsnrctl stop`
68
69
Попросить выполняющего подключиться к БД из девелопера. В результате должен получить ошибку `ORA-12541: TNS:no listener`
70
Ожидается, что выполняющий должен понять что проблема с листенером, зайти на сервер, выполнить команду lsnrctl status.
71
Команда покажет отсутствие listenera, выполняющий должен выполнить команду `lsnrctl start` и попробовать снова подключиться к БД успешно
72
ce611d feagor 2026-02-02 04:56:05
73
4. ORA-12528: TNS:listener: all appropriate instances are blocking new connections (Listener блокирует все подключения кроме Sys, обычно если БД в режиме NOMOUNT/MOUNT/RESTRICT)<br>
c75a65 feagor 2026-02-02 04:53:41
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
ce611d feagor 2026-02-02 04:56:05
82
5. ORA-12514: TNS:listener does not currently know of service requested in connect descriptor (БД не зарегистрирована в листенере).
c75a65 feagor 2026-02-02 04:53:41
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
* Собрать данные сервера (версия, размер БД, режим логов) для заявки.