barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

четверг, 15 марта 2018 г.

Как сменить пароль на машине c Windows Server 2012, к которой подключаешься по RDP

Т.к. Ctrl+Alt+Delete просто так на удаленную машину не отправить (комбинация отработает на локальной машине), необходимо воспользоваться комбинацией Ctrl+Alt+End, которая отправит Ctrl+Alt+Delete на удаленную машину. Ну и на появившемся экране нажимаем "Change password".

четверг, 21 декабря 2017 г.

Узнать SID сессии по database link

Проблема

Есть БД "А" и БД "Б", в первой создан DATABASE LINK ко второй. Нужно запросом к БД "А" узнать идентификатор сессии (SID) между БД "А" и БД "Б".

Решение

Из всех опробованных вариантов заработал только этот:
select
   to_number(substr(dbms_session.unique_session_id@DBLINK_NAME,1,4),'XXXX') mysid
from dual;
, где DBLINK_NAME - имя DATABASE LINK'а.

четверг, 23 ноября 2017 г.

Oracle DB: определение размера MATERIALIZED VIEW

Следующий запрос возвращает размеры (в Мб) всех материализованных представлений в БД:
SELECT segment_name,sum((BYTES)/(1024*1024)) "Allocated(MB)"
FROM dba_extents
WHERE segment_name in (SELECT mview_name FROM dba_mviews)
GROUP BY segment_name ;
Спасибо http://javeedkaleem.blogspot.ru/2010/04/find-space-used-by-materialized-views.html.

понедельник, 13 ноября 2017 г.

ORA-02020: используется слишком много каналов связи БД

Проблема

Есть ADF-приложение, в нем некоторые Entity смотрят на вьюхи, которые, в свою очередь, смотрят на удаленные таблицы через DATABASE LINK. При работе с этими Entity падает ошибка:
ORA-02020: используется слишком много каналов связи БД

Решение

Срабатывает ограничение OPEN_LINKS (ограничение на число link-ов в рамках одной сессии, см. https://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams139.htm#REFRN10138) или OPEN_LINKS_PER_INSTANCE (тоже самое, но не на уровне сессии, а глобально, актуально при использовании SHARED-линков и распределенных транзакций, см. https://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams140.htm#REFRN10139). Оба по-умолчанию равны 4. Посмотреть текущие значения можно SQL-запросом:
show parameter OPEN_LINKS
Необходимо поменять значения командами:
ALTER SYSTEM SET OPEN_LINKS=255 SCOPE=SPFILE;
ALTER SYSTEM SET OPEN_LINKS_PER_INSTANCE=255 SCOPE=SPFILE; 
(для применения потребуется рестартануть БД)

воскресенье, 12 ноября 2017 г.

ORA-24777: использование непереносимых ссылок на базы данных недопустимо

Проблема

Есть ADF-приложение, работающее на weblogic. Приложение использует Data source, предоставляемый weblogic'ом, для соединения с БД. Некоторые Entity приложения смотрят на вьюхи, которые, в свою очередь, смотрят на удаленные таблицы через DATABASE LINK.
При попытке приложения обратиться к данным в удаленной БД падает ошибка:
ORA-24777: использование непереносимых ссылок на базы данных недопустимо
Решение

Data source на weblogic использует JDBC-драйвер "oracle.jdbc.xa.client.OracleXADataSource, либо обычный (non-XA) драйвер oracle.jdbc.OracleDriver, но в настройках датасорса стоит галочка "Supports Global Transactions" (которая, кстати, установлена там по-умолчанию). При этом DATABASE LINK создан не как SHARED.
Соответственно, варианта 2:
  1. Использовать oracle.jdbc.OracleDriver со снятой галочкой "Supports Global Transactions", если распределенные транзакции по факту приложению не нужны
  2. Пересоздать DATABASE LINK с использованием SHARED-опции (подробнее см. https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm#i2061693).  Например:
CREATE SHARED PUBLIC DATABASE LINK MY_DBLINK
CONNECT TO "USR1" IDENTIFIED BY "PSWRD1"
AUTHENTICATED BY "USR1" IDENTIFIED BY "PSWRD1"
USING 'MYRMTORCL';

пятница, 20 октября 2017 г.

JDeveloper не запускает приложение на встроенном weblogic

Проблема

Есть JDeveloper 12c, и все было ок - приложение собиралось и запускалось на встроенном weblogic. Но в один прекрасный день этому пришел конец: weblogic стартует, а вот приложение на него не деплоится. И никаких ошибок, просто не деплоится - и всё. В левом нижнем углу окна JDev висит "Starting IntegratedWebLogicServer", хотя по логу запуска видно, что weblogic уже запустился, да и его console доступна в браузере. 
Перезагрузка машины, пересоздание default-ного домена weblogic - ничего не помогало.

Решение

Так и не понял, что это было, но если грохнуть C:\Users\<username>\AppData\Roaming\JDeveloper  - то все приходит в норму. Да, JDev теряет все пользовательские настройки, зато деплой начинает работать.

пятница, 29 сентября 2017 г.

Запуск Tomcat 8 из Netbeans 8.2 и Netbeans 10.0: ошибка "Не удается найти указанный файл"

Проблема

Установил Netbeans 8.2 вместе с Tomcat 8, пробую запустить Tomcat из Netbeans. В выводе старта томката получаю ошибку:
Using CATALINA_BASE:   "C:\Users\aspirinspb\AppData\Roaming\NetBeans\8.2\apache-tomcat-8.0.27.0_base"
Using CATALINA_HOME:   "C:\tomcat-8.0.27"
Using CATALINA_TMPDIR: "C:\Users\aspirinspb\AppData\Roaming\NetBeans\8.2\apache-tomcat-8.0.27.0_base\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.7.0_80"
Using CLASSPATH:       "C:\tomcat-8.0.27\bin\bootstrap.jar;C:\tomcat-8.0.27\bin\tomcat-juli.jar"
Не удается найти указанный файл
(на самом деле вместо  "Не удается найти указанный файл" были кракозябры, это уже расшифрованная фраза, спасибо https://2cyr.com/decode/?lang=ru).
Та же проблема наблюдается на Netbeans 10.0 с тем же Tomcat 8.

Причина

Причина в настройках прокси-сервиса, установленных в IE. Дело в том, что в Netbeans по-умолчанию установлена настройка "Использовать системные настройки прокси". А в них у меня задано исключение из проксируемых адресов по маске: "*.domain.ru;172.26.*". В итоге Netbeans формирует следующий параметр для старта томката:
-Dhttp.nonProxyHosts=*.domain.ru^|172.26.*^|<local> 
Что и вызывает невнятную ошибку  "Не удается найти указанный файл". Пока просто отключил использование прокси в настройках Netbeans.