Сообщения

Показаны сообщения с ярлыком "OracleDB"

OEM. Не запускается

Изображение
Используется Oracle 11.20.4 После установки СУБД, при установке и запуске OEM (Oracle Enterprise Manager) возникает ошибка: Error starting Database Control.Execute the following command(s).  1) Set the environment variable ORACLE_UNQNAME to Database unique name   2) E:\ORACLE\oracle11\product\11.2.0\dbhome_1\bin\emctl.bat start dbconsole 25.04.2023 19:30:32 oracle.sysman.emcp.EMConfig perform CONFIG: Passing warning to the caller:  25.04.2023 19:30:32 oracle.sysman.emcp.EMConfig restoreOuiLoc CONFIG: Restoring oracle.installer.oui_loc to E:\ORACLE\oracle11\product\11.2.0\dbhome_1\oui Причина ошибки не ясна, поэтому пытаемся запустить вручную: # emctl start dbconsole Далее можно получить ответ: Служба уже запущена или Порт уже используется В этом случае виноват процесс, который был запущен службой, но при ошибке не завершил его. В моем случае это был порт 5520, поэтому выполняем поиск процесса, который использует данный порт с помощью команды: # netstat -aon Завершаем...

Windows 2012. ORA-01031: привилегий недостаточно

При попытке создать Oracle Enterprise Manager (OEM) на удаленной виртуальной машине под Windows 2012 возникла ошибка 1: ORA-01031: привилегий недостаточно При подключении по логину(SYS, SYSTEM) и паролю ошибок нет. С учетом что выполнение операций происходит без авторизации, то и возникает данная ошибка. Выполняется проверка пользователя, который запускает команду в ОС, но с учетом того что пользователь выполнил вход под учетными данными active directory, система не считает его пользователем, который входит в группу ora_dba. Об этом, указывает сопутствующая ошибка 2: ORA-12638 : credential retrieval failed error которая возникла из-за попытки запуска команды под доменным пользователем и параметра в файле  sqlnet.ora : SQLNET.AUTHENTICATION_SERVICES= (NTS) NTS - проверка подлинности, которая используется в ОС Microsoft Windows для подключения с помощью аутентификации операционной системы. Т.о. для решения проблемы необходимо войти в систему под локальным пользователем, который...

SQL. Очистка записей из связанных таблиц

Дано: Есть 2 таблицы "Сообщения" и "Архив сообщений", вторая содержит только ссылку на первую и дату отправки в архив. Задача:  Почистить сообщения. Решение: Для решения можно было написать 2 скрипта, которые сначала удаляют записи из таблицы "Архив сообщений", а потом из таблицы "Сообщения" (такая очередность обусловлена тем, что в архиве сообщения есть ссылки FK). Выглядеть это будет так: DELETE FROM ARCHIVEMAILUSER WHERE MAIL_ID IN (SELECT ID FROM MAIL WHERE CREATE_DATE >= to_date ('01.01.2022', 'dd.mm.yyyy') AND CREATE_DATE < to_date ('02.02.2022', 'dd.mm.yyyy')); DELETE FROM MAIL WHERE CREATE_DATE >= to_date ('01.01.2022', 'dd.mm.yyyy') AND CREATE_DATE < to_date ('02.02.2022', 'dd.mm.yyyy'); - Но что, делать если связанных таблиц больше? - Использовать PL/SQL! Запрос будет выглядеть следующим образом: --#ORACLE begin for cur in (SELECT id FROM MAIL WHERE CREATE_DA...

Oracle. Импорт схем с исключением больших таблиц

Изображение
Восстановление дампа размером 98 Гб занимает примерно 233 минут (03:53). Довольно длительное время, а с учетом того что схемы ресторятся часто и при этом содержат практически одни и те же данные (дампы за разные даты), то получаем как минимум 2 проблемы: Большой объем схемы, который занимает табличное пространство и дисковое пространство Грустные сотрудники 😞, которые ожидают окончания рестора БД В связи с этим, было решено восстанавливать схемы исключая из них часть таблиц, особенно больших размеров. Логично, что данное решение имеет недостаток - в случае, если понадобятся данные из исключенной таблицы, то придется выполнять доимпорт схемы . Но это не страшно, дабы эти данные бывают нужны в 1 из 10 случаев. После исключения таблиц - время рестора уменьшилось до 100 минут (01:40). Довольно хороший результат 💪 С учетом, что рестор выполняется скриптом (sh), то в коде используется следующая команда: # Импорт таблиц за исключением некоторых, чтобы ускорить рестор (EXCLUDE) $CMD $SYSUSER...

Python. DPI-1047 ошибка с работой Oracle

При запуске python-скрипта возникает ошибка: PS > python test.py File "...\test.py", line 3, in <module> cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help Причина: Отсутствуют необходимые библиотеки Oracle Как решить: Скачиваем instantclient basic для Windows тут Файлы библиотек переносим в каталог с Python (лучше в каталоге venv ): oci.dll ocijdbc21.dll ociw32.dll oramysql.dll orannzsbb.dll oraocci21.dll oraocci21d.dll oraociei.dll orasql.dll

SQL. Вывести информацию по данным в Oracle

Вывести информацию по табличным пространствам: SQL>  select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb     from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space        from dba_free_space        group by tablespace_name) a,       (select tablespace_name, sum(bytes)/1024/1024 as tbs_size        from dba_data_files        group by tablespace_name) b      where a.tablespace_name(+)=b.tablespace_name; Вывести 10 самых больших таблиц: SQL>  SELECT * FROM (     SELECT owner, segment_name, bytes/1024/1024 meg     FROM dba_segments     WHERE segment_type = 'TABLE'     ORDER BY bytes/1024/1024 desc)     WHERE rownum <= 10;

СУБД Oracle в Windows Server 2012. Как удалить?

Используя Windows Server 2102 в универсальный Installer не нашел такой возможности, в папке с установленным ORACLE, нашел батник  Deinstall.bat  но и он не сработал. Далее, все то что я делал: Открываем Службы, останавливаем все, что имеют отношение к Oracle Все процессы ORACLE тоже гасим Удаляем папку, в которою устанавливали ORACLE В реестре удаляем ветки: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE HKEY_LOCAL_MACHINE\SOFTWARE\Oracle После чего можно удалить службы, которые были остановлены в пункте 1. sc delete OracleVssWriterORCL11B sc delete OracleServiceORCL11B sc delete OracleOraDb11g_home1TNSListener sc delete OracleOraDb11g_home1ClrAgent sc delete OracleJobSchedulerORCL11B sc delete OracleDBConsoleORCL11B sc delete OracleMTSRecoveryService

Переменные bash_profile Oracle

Информация для настройки сервера dbserver # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then         . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export ORACLE_BASE=/home/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=ORACL11B export ORACLE_UNQNAME=ORACL11B export ORACLE_HOSTNAME=172.*.*.9 export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$ORACLE_HOME/bin:$PATH export LIBPATH=$ORACLE_HOME/lib export TZ=Etc/GMT-8 export THREADS_FLAG=native export JAVA_HOME=/opt/java/jdk1.8.0.291 export playground=/mnt/disk4tb01/playground export DBI=$playground/DBI/bin

Oracle DB. Переносим файлы (dbf, log)

Изображение
1. Отключаем БД: SQL> shutdown immediate; 2. Переносим физически файлы из одного каталога в другой. 3. Запускает БД без открытия доступа для пользователей: SQL> startup mount; 4. Переименовываем файлы: SQL>  alter database rename file '/mnt/oradata/users100.dbf' to '/mnt/sda1/oradata/users100.dbf'; 5. Открываем базу для пользователей: SQL>   alter database open;

Инвалидные объекты Oracle. Перекомпиляция.

Изображение
/* Вывести невалидные схемы и объекты */ select owner, object_type, count(1) from all_objects where status = 'INVALID' GROUP BY owner, object_type ORDER BY owner; /* перекомпилирование схемы полностью */ begin    dbms_utility.compile_schema(' ваша схема ',TRUE);  end  ; /* Компиляция одного конкретного объекта */ BEGIN   dbms_ddl.alter_compile ('ваш тип объекта','ваша схема','ваше имя объекта'); END ; SQL> select owner, object_type, 'begin dbms_utility.compile_schema('''||owner||''',TRUE); end ;' AS "CommandToRecompil", count(1) AS "Количество объектов" from all_objects where status = 'INVALID' GROUP BY owner, object_type ORDER BY owner;

Варианты запуска и отключения БД Oracle

Изображение
Варианты запуска: STARTUP NOMOUNT STARTUP MOUNT STARTUP OPEN - по умолчанию Варианты отключения: SHUTDOWN NORMAL - по умолчанию SHUTDOWN TRANSACTIONAL - ожидаем завершения активных транзакций SHUTDOWN IMMEDIATE - обрываем все транзакции SHUTDOWN ABORT - аварийное завершение работы БД (после перезапуска необходимо восстановление)

dbca. Удалить базу данных Oracle

Изображение
Ситуация: Была развернута БД Oracle. (СУБД Oracle 11.2.0.4) После перекомпиляции схемы SYS, возникли проблемы и вместо 300 невалидных объектов "вывалилось" более 30 000 объектов. Вообщем, ситуация очень печальная. Повторная попытка компиляции инвалидных объектов с помощью SQLDeveloper , скриптов из rdbms/admin/utlrp.sql , а также команды  dbms_ddl.alter_compile успехом не увенчалась. Поэтому было решено снести полностью БД и создать новую. Что делаем: Переходим: mnt/u01/app/oracle/product/11.2.0/dbhome_1/bin запускаем dbca Далее, через GUI выбираем и удаляем БД После завершения, выбираем пункт "Продолжить работу" и переходим к созданию новой БД*. *может быть так, что oratab не будет удалена. В этом случае необходимо вручную удалить файла etc/oratab. **проверить что запущен Listrener.

SQL. Найти всю информацию по связанным таблицам

Задача: Проверить и найти все таблицы, где используется определенное значение из связанной таблицы. Т.е. есть документы, справочники, которые содержат конкретное значение из связанного справочника. Решение для СУБД Oracle: Узнаем все таблицы, в которых есть необходимое нам поле: select * from dba_tab_columns where column_name like '%LAWACT_ID'; Далее, пишем запрос по каждой таблице: select TABLE_NAME AS "ТАБЛИЦА",    COLUMN_NAME AS "КОЛОНКА",    'SELECT '''||TABLE_NAME||''''||' AS "Таблица",     count(1) AS "Количество" FROM '||TABLE_NAME||' WHERE '||COLUMN_NAME||' = <необходимый ID> UNION ALL' AS "СКРИПТ"   from dba_tab_columns  where column_name like 'KD_CODE' /*Укажите название поля (колонки) */  --AND OWNER like '<schema_name>'; /*Укажите схему */ Далее, копируем значение из колонки "СКРИПТ", редактируем его, убирая  UNION ALL...

job_queue_processes. Ошибка при создании репозитория OEM

При создании репозитория  Oracle Enterprise Manager  возникла ошибка: SEVERE: 'job_queue_processes' must be greater than or equal to 1. Fix the error (s) and run EM Configuration Assistant again in standalone mode. 25.03.2020 23:00:23 oracle.sysman.emcp.EMConfig perform SEVERE: 'job_queue_processes' must be greater than or equal to 1. Fix the error (s) and run EM Configuration Assistant again in standalone mode. Причиной ошибки является значение параметра job_queue_processes Ранее при ошибке  ORA-02374, ORA-12899 and ORA-02372 when restore DB  я изменил значение: ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; Для исправления необходимо: alter system set job_queue_processes=1 scope=both;

rlwrap. Установка

1. Добавляем репозиторий: # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2. Загружаем: # yum install rlwrap

ORA-39083 and ORA-01847 when restore DB

Имеем СУБД Oracle 11g + Oracle Linux 6.10 При ресторе БД возникла ошибка: ORA-39083: Object type TABLE:"*"."USERCERT" failed to create with error: ORA-01847: day of month must be between 1 and last day of month ORA-39083: Object type TABLE:"*"."NOTIFYMSG" failed to create with error: ORA-01861: literal does not match format string Причина (в моем случае) Некорректно настроенный файл ".bash_profile". Значения ORACLE_BASE, ORACLE_HOME, ORACLE_SID я почему-то прописал в файл "/etc/bashrc". Решение Переносим указанные переменные из "/etc/bashrc" в ".bash_profile". Т.о. в файле должны быть обязательно указаны: export ORACLE_BASE=/mnt/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=ORACL11B export ORACLE_UNQNAME=ORACL11B export NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export LIBPATH=$ORACLE_HOME/lib export PATH=$ORACL...

ORA-39006 and ORA-39213 when restore DB

При ресторе БД возникла ошибка: ORA-39006: internal error ORA-39213: Metadata processing is not available Решение: sqlplus / as sysdba SQL> execute sys.dbms_metadata_util.load_stylesheets; решение отсюда

ORA-02374, ORA-12899 and ORA-02372 when restore DB

При ресторе БД возникла ошибка : ORA-02374: conversion error loading table "F_*"."FILEFOLDER" ORA-12899: value too large for column FILE_NAME (actual: 101, maximum: 100) ORA-02372: data for row: FILE_NAME : 0X'313030303039333336333838407363616E20F3E2E5E4EEECEB' Причина ошибки: Используемая кодировка кодировка не соответствует данным в дампе (схемы), с которой создается БД. В моем случае, это произошло из-за переустановки Oracle DB. Параметр сейчас выглядит так: select * from nls_database_parameters; PARAMETER |VALUE | -----------------------|----------------------------| NLS_CHARACTERSET |AL32UTF8 | ацауц Решение: Изменить значение параметра на необходимое. В моем случае, это  CL8MSWIN1251 CL8MSWIN1251 -  MS Windows Code Page 1251 8-bit Latin/Cyrillic В sqlplus выполнить: SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM S...

ORA-01034 и ORA-27101

После запуска lsnrctl и попытке подключиться к БД возникает ошибка: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Данная ошибка связана с тем, что экземпляр БД, к которому осуществляется подключение, закрыт.  Необходимо выполнить его запуск: SQL> sqlplus "/ as sysdba" SQL> startup;      Oracle instance started      ------      Database mounted.      Database opened. SQL> quit;

INS-20802: Oracle Net Configuration Assistant failed error on Oracle Linux (6.10)

Изображение
При установке Oracle database 11g, на 11 шаге возникла ошибка: INS-20802: Oracle Net Configuration Assistant failed Cause - The plug-in failed in its perform method Action - Refer to the logs or contact Oracle Support Services. Log File Location /mnt/u01/app/oraInventory/logs/installActions2021-03-13_05-08-32PM.log Аналогичная ошибка и была при установке СУБД Oracle на Windows тут . Но судя по ошибке в логе, проблема здесь возникла не из-за переменной среды. Текст из лога: INFO: Started Plugin named: Oracle Net Configuration Assistant INFO: Found associated job INFO: Starting 'Oracle Net Configuration Assistant' INFO: Starting 'Oracle Net Configuration Assistant' INFO: Parsing command line arguments: INFO:     Parameter "orahome" = /mnt/u01/app/oracle/product/11.2.0/dbhome_1 INFO:     Parameter "orahnam" = OraDb11g_home1 INFO:     Parameter "instype" = typical INFO:     Parameter "inscomp" = client,oraclenet,javavm,server,an...