Blame

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