пятница, 27 декабря 2013 г.

Oracle и дохлый винчестер

Началось все с сообщений о поврежденных файлах табличного пространства USERS (пример сообщения для одного из таких файлов):
26.12.13 17:24:20.523,ORB-12117208(57),ERROR,TransactJob,
com.bssys.db.jdbc.DBSQLException: ORA-01115: ошибка ввода/вывода при чтении блока из файла (блок # )
ORA-01110: файл данных 25: '/mnt/hdd2tb/oracle/ORACLE11/users20.dbf'
ORA-27072: Ошибка ввода/вывода файла
Additional information: 3
Additional information: 3632835
Additional information: 8192

Таких сообщений становилось все больше и больше.
В чем моя ошибка?
Во-первых, в том, что я не включил режим "ARCHIVELOG", поэтому восстановить файлы в RMAN не удалось.
Во-вторых, в том, что я его включил уже после ошибки: это привело к аварийной остановке Oracle, т.к. быстро растущие файлы FAST-RECOVERY сожрали все оставшееся свободное место на HDD с системой.
Ладно, довольно-таки быстро сообразил режим отключить и удалить файлы. Место свободное появилось.

После этого настала очередь борьбы с проблемой: Что делать, если умер HDD с частью табличных пространств и Oracle из-за этого не запускается, сообщая при startup'е:
ORA-01157: cannot identify/lock data file 15 - see DBWR trace file
ORA-01110: data file 15: '/mnt/hdd2tb/oracle/ORACLE11/USERS2/users2_07.dbf'
ORA-27037: unable to obtain file status
?

Помогло отключение недостающих DATA-файлов:
alter database datafile '/mnt/hdd2tb/oracle/ORACLE11/users10.dbf' offline drop;
После этого Oracle запустился.
Далее дело техники: либо удалить схемы, которые лежали на недостающих DATA-файлах (drop user cascade;), либо пересоздать табличное пространство
- drop tablespace including contents;
- см. описание "create tablespace".

----после 3-х часов безуспешных попыток удалить датафайлы, чтобы освободить место на диске---
В итоге, на Oracle 11g система не позволяет удалить датафайлы из USERS, сообщая:
SQL> alter tablespace USERS drop datafile '/opt/oracle/oradata/ORACLE11/users25.dbf';
alter tablespace USERS drop datafile '/opt/oracle/oradata/ORACLE11/users25.dbf'
*
ERROR at line 1:
ORA-01662: tablespace 'USERS' is non-empty and cannot be made temporary

Плюнул. Пересоздал БД Oracle.

пятница, 13 декабря 2013 г.

Создание БД (Oracle)

create-db.log:
13.12.13 19:06:45.633,main,DEBUG,DBConnectionPool,Closing of all free database connections
13.12.13 19:06:45.635,main,ERROR,CreateAzkInstance,
java.lang.RuntimeException: Exception creating database
at com.bssys.tools.sqlexecuter.CreateDatabase.create_database(CreateDatabase.java:127)
at com.bssys.tools.sqlexecuter.CreateDatabase.create_database(CreateDatabase.java:146)
at com.bssys.tools.sqlexecuter.Executer$7.process(Executer.java:126)
at com.bssys.tools.AbstractMain.process(AbstractMain.java:157)
at com.bssys.tools.sqlexecuter.Executer.process(Executer.java:246)
at com.bssys.tools.AbstractMain._process(AbstractMain.java:336)
at com.bssys.tools.AbstractMain.run(AbstractMain.java:374)
at com.bssys.tools.server.CreateInstance.createInstance(CreateInstance.java:97)
at com.bssys.tools.server.CreateInstance$1.process(CreateInstance.java:32)
at com.bssys.tools.AbstractMain.process(AbstractMain.java:157)
at com.bssys.tools.AbstractMain._process(AbstractMain.java:336)
at com.bssys.tools.AbstractMain._main(AbstractMain.java:453)
at com.bssys.tools.server.CreateAzkInstance.main(CreateAzkInstance.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.bssys.loader.MainRunner.run(MainRunner.java:18)
at com.bssys.loader.Runner.(Runner.java:30)
at com.bssys.loader.MainRunner.(MainRunner.java:14)
at com.bssys.loader.MainRunner.main(MainRunner.java:22)
Caused by: com.bssys.db.jdbc.DBSQLException: ORA-01031: привилегий недостаточно

at com.bssys.db.jdbc.SQLConnection.validate(SQLConnection.java:391)
at com.bssys.db.jdbc.SQLStatement.afterExecute(SQLStatement.java:27)
at com.bssys.db.jdbc.base.SQLStatementBase.execute(SQLStatementBase.java:57)
at com.bssys.tools.sqlexecuter.CreateDatabase.create_database(CreateDatabase.java:118)
... 20 more
Caused by: java.sql.SQLException: ORA-01031: привилегий недостаточно

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:946)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1687)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1653)
at com.bssys.db.jdbc.base.SQLStatementBase.execute(SQLStatementBase.java:54)
... 21 more
------------------------------------------------------
Чтобы разрешить ситуацию нужно:
grant select on sys.v_$transaction to system with grant option;

понедельник, 2 декабря 2013 г.

Установка словарей для электронной книги Digma R60G

У этой книги используется программа StarDict. Чтобы загрузить в нее словари нужно создать в корневом каталоге папку (регистр букв важен) "Dict".
Сами словари можно скачать по адресам:
http://sourceforge.net/projects/xdxf/
http://xdxf.revdanica.com/
после скачивания, их в распакованном виде (но каждый словарь в своей папке) нужно скопировать в созданную папку "Dict".

пятница, 1 ноября 2013 г.

Спарринг

После спарринга, в котором был получен удар по ... месту:
Костя: "Извини, чувак, я не хотел. Как оно там?"
Я: "Да ниче, нормально".
Митя: "А до удара это было правое яйцо, а теперь - «Да ниче, нормально»".

четверг, 24 октября 2013 г.

Центр обновления Windows

Если в Центре обновления Windows строки с информацией о пакетах обновления становятся невидимыми (при этом прекрасно видно количество пакетов для установки), то нужно выполнить следующие рекомендации:

First you have to manually stop Windows Update (WUAUSERV) service. To
do it use command prompt and type
"net stop wuauserv"

(w/o quotation marks, of course). Then re-register the driver by typing
"regsvr32 wups2.dll".

Finally restart Windows Update service by typing
"net start wuauserv".

вторник, 24 сентября 2013 г.

Пример работы с блоками в Oracle и вывод информации помощью DBMS_OUTPUT

Включить режим вывода:
set serveroutput on

Выводит на экран значение поля CAPTION:
DECLARE
CURSOR s is select CAPTION from F_IRKOBL_130829.estimate e where id = 800000131720;
BEGIN
FOR s_rec in s LOOP
dbms_output.put_line(s_rec.id);
END LOOP;
END;


Пример с условиями:
DECLARE
s_parent_id varchar (20);
BEGIN
IF s_parent_id is null then SYS.dbms_output.put_line('s_parent_id is null'); end if;
SELECT parent_id into s_parent_id from estimate where id = 800000131720;
SYS.dbms_output.put_line(s_parent_id);
END;

Примечание:
выше был показан пример для Oracle SQL Developer, а для Toad консоль вывода результатов dbms_output отдельная (пункт меню View —> DBMS Output), см.скриншот:

среда, 4 сентября 2013 г.

На здоровье

d'Greeze (15:07:13 4/09/2013)
горло отваливается,

Fox (16:17:37 4/09/2013)
Пропосол купи, термоядерная хрень

Fox (16:22:15 4/09/2013)
И еще действенная штука: перед сном греешь ноги в горячей воде, чтобы прямо аж еле терпелось, минут 10, потом одеваешь носки и в них спиш. Тоже помогает хорошо, но обычно так лучше делать, когда только симптомы начались, то есть перед болезнью. На утро все как рукой снимает.

d'Greeze (16:23:19 4/09/2013)
Утащю-ка я себе в блог, чтобы в следующий раз применить "до", а не "после".

пятница, 23 августа 2013 г.

Отзыв о SSD

Надо было развернуть базу 1С на компе на участке, сервак резона нет по ряду причин, купил комп и5 и ссд на него 60 гб ... и тут мой 1с-ник ахуел)
- ебааааать
- че такое?
- ссд блять!
- че? не работает?
- да это пиздец
- я рад данному конструктивному диалогу, но мне нужно резюме по нему
- база крутица на винте ссд быстрее чем на серваке с 2мя ксеонами, на сас винтах с память. в 32 гб
- ну ок

[ проходит время ... на неделе покупаю второй такой комп в порт, для тестовой базы 1С ]

- пиздец
- че, опять все ахуенно быстро?
- да у меня нет слов, у них на серваке отчет делается ну минут 5, а тут смотри (считает секунды): 1,2,3 ... хуяк отчет
- заебца )

[Snake]

среда, 5 июня 2013 г.

Программы для Android

Список моих программ для Android (смартфон HTC Incredible S)
- Семейный бюджет

Список моих программ для Android (смартфон HTC Wildfire)
- Cyanogenmod-7.2.0-RC1-buzz (Android 2.3.7);
- Remote Web Desktop Full / Airdroid - никак не могу, решить какой же все-таки лучше;
- Swype (клавиатура);
- Google+;
- Opera Mini;
- File Expert;
- 2ГИС;
- SMS Backup+;
- DiskUsage;
- Google Переводчик;
- FReader;
- Gmail;
- MortPlayer Music;
- MortPlayer Audiobooks;
- Callback Assistant;
- Whatsapp;
- Launcher 7;
- Screen Filter;
- Google Maps (из-за "Локатора").

Недавно выбывшие из списка
- SlideIt Keyboard (во-первых, платная, во-вторых, если в пользовательский словарь занести хотя бы одно слово, то приложение перестает запускаться);
- Smart Keyboard Pro (нет функции ввода текста жестами, как в Swype);
- ES File Explorer (заменил на "File Expert", потому что последний умеет предоставлять доступ к файловой системе
смартфона через WEB или FTP);
- MyPhoneExplorer (данная программа состоит из двух частей: одна устанавливается на смартфон, вторая - на ПК. Заменил на "Remote Web Desktop Full", потому что последний запускается только на смартфоне, а со стороны ПК нужен только браузер);
- Brightness Level (виджет управления подсветкой. Удален после установки прошивки Cyanogenmod 7.1.0.1, в которой, чтобы изменить уровень подсветки, достаточно провести пальцем по статусбару);
- Smart Rotator (программа включает датчик положения в указанных пользователем приложениях. Отказался от нее, потому что не запоминает предыдущее состояние датчика ... это допекает);
- Сканер штрих-кодов (заменил на "QR Droid");
- Google Reader (пользуюсь им же, только не как приложением, а просто с веб-морды читаю).

Список программ, которые я считаю полезными, но самому лично они без надобности
- 3G Watchdog (подсчитывает мобильный интернет);
- Chrome to Phone;
- QR Droid;
- RemoteDroid;
- Яндекс.Карты;


Задачи, для которых пока не нашел подходящего ПО
- TODO (задачи)
- Диктофон

Oracle: Temporary tablespace

Temporary tablespace shrink/clean/recreate:
http://stackoverflow.com/questions/1824572/how-to-shrink-temp-tablespace-in-oracle

четверг, 30 мая 2013 г.

Наконец-то, выяснили

[12:10:04] d'Greeze: почему я так на этой фотке хитро кошусь куда-то?
[12:10:09] d'Greeze: я всегда такой?
[12:10:33] [Snake]: всегда такой ускоглазый? да
[12:10:39] d'Greeze: расист ))
[12:10:39] [Snake]: ты паходу Ден не русский )
[12:10:41] [Snake]: ыыыы
[12:10:44] d'Greeze: )))))))))
[12:10:55] d'Greeze: [12:10]
<<< [Snake]: ты паходу Ден не русский ) >>>
чота меня под стол срезало ))
[12:11:08] d'Greeze: фраза дня
[12:11:10] [Snake]: сука ржу сижу пиздец)
[12:11:12] Dadon: ыыыыы
[12:11:17] Dadon: сам ржу блять

среда, 15 мая 2013 г.

Управление "А"

http://nnm.ru/blogs/Maggi0/boevye-aksiomy-upravleniya-a-alfa/#cut

Load Balancer через SSL для Windows

1. Установите Apache;
2. Если требуется, чтобы подключение происходило по протоколу HTTPS (TCP 443), то в файле
<Apache>\conf.d\ssl.conf
укажите строку
Listen 443
3. <Apache>\conf\openssl.cnf копируем в <Apache>\bin
4. Создаем папку, в которой предполагается хранить ключи для SSL, например, <Apache>\conf\my-certs.
Находясь в этой папке выполняем команды:
..\bin\openssl req -config openssl.cnf -new -out my-server.csr - отвечаем на вопросы;
..\bin\openssl rsa -in privkey.pem -out my-server.key - вводим пароль, который вводили на предыдущем этапе;
..\bin\openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 365
..\bin\openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
5. В файле <Apache>\conf\httpd.conf расскоментировать/добавить ниже строку:
LoadModule ssl_module modules/mod_ssl.so
В блок
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

добавляем 2 строки:
SSLMutex default
SSLSessionCache none

внизу <Apache>\conf\httpd.conf добавляем блок:
<VirtualHost localhost:443>
SSLEngine On
SSLCertificateFile conf/my-certs/my-server.cert
SSLCertificateKeyFile conf/my-certs/my-server.key
JkMount /myapp-from-tomcat_webapps/* balancer
</VirtualHost>

6. Скачиваем в папку <Apache>\modules модуль mod_jk со страницы
http://tomcat.apache.org/download-connectors.cgi
7. В файле <Apache>\conf\workers.properties количество воркеров должно соответствовать количеству томкатов, между которыми требуется распределить нагрузку. Пример файла workers.properties:
workers.tomcat_home=/home/dbadmin/WEB_NEW
workers.java_home=c:/PROGRA~1/Java/jdk1.7.0_21

worker.list=balancer

worker.jvm1.port=8009
worker.jvm1.host=localhost
worker.jvm1.type=ajp13
worker.jvm1.lbfactor=1

worker.jvm2.port=8010
worker.jvm2.host=localhost
worker.jvm2.type=ajp13
worker.jvm2.lbfactor=1

worker.balancer.type=lb
worker.balancer.balance_workers=jvm1,jvm2

где jvm1 и jvm2, это значения параметра jvmRoute в файле <tomcat>\conf\server.xml каждого томката.
8. В файле <Apache>\conf\httpd.conf расскоментировать/добавить ниже строки:
LoadModule jk_module modules/mod_jk.so

# Path to workers.properties
JkWorkersFile conf/workers.properties

# Path to jk logs
JkLogFile logs/mod_jk.log

# Jk log level [debug/error/info]
JkLogLevel info

# Jk log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions for forwarding
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

#JkMount /* balancer
9. Запустить томкаты и Апач.

Биткоин

https://50btc.com/
регаешься здесь.
качаешь майнер оттуда, настраиваешь - там инструкциии есть
а в точке вывода - указываешь - свой номер телефона)))))))))))
и пополняешь оттуда))))))
как намайнишь))
видюху надо правильную
либо процов дохера
разберешься кароч.
сама главное - https://50btc.com/ дает на телефон бабло вывести.

--
Дед.

Tomcat Manager

"Tomcat Manager", например, позволяет видеть количество сессий к каждому вэб-приложению, подключенному к томкату.

1. Из оригинальной сборки томката (для tomcat 6.0.29 см. тут) нужно скопировать в папку <tomcat>/webapps/ следующие директории:
- host-manager;
- manager;
- ROOT.
2. В файле <tomcat>/conf/tomcat-users.xml нужно после начала блока <tomcat-users> добавить строку:
<user name="admin" password="my-password" roles="admin,manager,admin-gui,manager-gui" />

вторник, 9 апреля 2013 г.

Про телевизор

кароче была xBounce помоему ... приставка с флешку размером в телек и она конвертит по вайфаю изображение с мобилы на телек в ФулХД!
я на ютюбе ролек пасатрел - ахуел как прекольно.
хотел заказать, сказали будет только в начале 2012 года ...
я подождал - нету
в середине года пишу разработчикам в немецыю, говорю, эй вы, ахтунги, продавайте мне эту херню пажалуста быстрее
а они в ответ, типа мы тут еще дрочим как ее сделать, еще не готова, будет в конце года ....
уже блять прошло времени, можно было ядерную торпеду смастерить ..... гавнюки ..
пойду почитаю, может сделали )
— [Snake], 09.04.2013 15:28

пятница, 22 марта 2013 г.

Автоматический запуск экземпляра Oracle

Реализовано по советам - тынц. Внесены поправки, в соответствии с официальной документацией: тынц2. Жду подходящего времени для проверки.

cat /etc/rc.d/init.d/oracle-automatic

#!/bin/sh
#
# /etc/rc.d/init.d/oracle
# Description: Starts and stops the Oracle database and listeners
# See how we were called.
case "$1" in
  start)
        echo -n "Starting Oracle Databases: "
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle
        echo "----------------------------------------------------" >> /var/log/oracle
        su - oracle -c dbstart $ORACLE_HOME >> /var/log/oracle
        echo "Done."
        echo ""
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Finished." >> /var/log/oracle
        echo "----------------------------------------------------" >> /var/log/oracle
        touch /var/lock/subsys/oracle
        ;
  stop)
        echo -n "Shutting Down Oracle Listeners: "
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Shutting Down Oracle Databases as part of system down." >> /var/log/oracle
        echo "----------------------------------------------------" >> /var/log/oracle
        rm -f /var/lock/subsys/oracle
        echo -n "Shutting Down Oracle Databases: "
        su - oracle -c dbshut $ORACLE_HOME >> /var/log/oracle
        echo "Done."
        echo ""
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Finished." >> /var/log/oracle
        echo "----------------------------------------------------" >> /var/log/oracle
        ;
  *)
        echo "Usage: oracle {start|stop}"
        exit 1
esac

пятница, 15 марта 2013 г.

четверг, 7 февраля 2013 г.

INSERT ... SELECT ... [sequence] ... GROUP BY

Встретился с такой задачей:
нужно в Таблицу_1 вставить сгруппированные значения из Таблицы_2 и одновременно присвоить каждой новой записи в Таблице_1 порядковый номер (sequence)

Пример:
insert into UserOrg(id,access_mode,org_id,sysuser_id)
select
userorg_seq.nextval,
min(rorg.access_mode),
rorg.org_id
from [бла-бла-бла]
group by
rorg.org_id

Этот запрос завершается с ошибкой:
ORA-02287: порядковый номер здесь недопустим
02287. 00000 - "sequence number not allowed here"
*Cause: The specified sequence number (CURRVAL or NEXTVAL) is inappropriate
here in the statement.
*Action: Remove the sequence number.

Нашел решение здесь: нужно вынести порядковый номер (sequence) за скобки, включив остальную часть запроса SELECT (которую необходимо сгруппировать) в отдельный подзапрос с поименованными полями:

insert into userorg(id,access_mode,org_id,sysuser_id,version)
select userorg_seq, daAccessMode, daOrgId ... from (
select
min(rorg.access_mode) as daAccessMode,
rorg.org_id as daOrgId,
...
from [бла-бла-бла]
group by rorg.org_id, vur.sysuser_id);

Подглядел здесь: http://stackoverflow.com/questions/7125936/oracle-sql-use-sequence-in-insert-with-select-statement

P.S. оформить запись перед закрытием

пятница, 25 января 2013 г.

Как установить Windows 7 с флешки

Вызвать утилиту:
diskpart

выполнить в ней команды:
list disk
select disk X (где X номер диска из списка команды "list disk", который обозначает флеш-накопитель)
clean
create partition primary
select partition 1
active
format fs=NTFS QUICK
assign
exit

Из папки "boot", которая находится на диске с дистрибутивом MS Windows 7, выполните команду:
bootsect /nt60 (ТУТ БУКВА ФЛЕШ-НАКОПИТЕЛЯ)

После этого нужно скопировать содержимое диске с дистрибутивом MS Windows 7 на флеш-накопитель.

Пример:
C:\WINDOWS\system32>diskpart

Microsoft DiskPart, версия 10.0.14393.0

(С) Корпорация Майкрософт (Microsoft Corporation), 1999-2013.
На компьютере: IRK-NK-14-4

DISKPART> list disk

Диск ### Состояние Размер Свободно Дин GPT
-------- ------------- ------- ------- --- ---
Диск 0 В сети 465 Gбайт 444 Mбайт
Диск 1 В сети 7509 Mбайт 9 Mбайт

DISKPART> select disk 1

Выбран диск 1.

DISKPART> clean

DiskPart: очистка диска выполнена успешно.

DISKPART> create partition primary

DiskPart: указанный раздел успешно создан.

DISKPART> select partition 1

Выбран раздел 1.

DISKPART> active

DiskPart: раздел помечен как активный.

DISKPART> format fs=NTFS QUICK

Завершено (в процентах): 100

Программа DiskPart успешно отформатировала том.

DISKPART> assign

DiskPart: назначение имени диска или точки подключения выполнено успешно.

DISKPART> exit

Завершение работы DiskPart...

C:\WINDOWS\system32>e:

E:\>cd boot

E:\boot>bootsect.exe /nt60 d:
Target volumes will be updated with BOOTMGR compatible bootcode.

D: (\\?\Volume{93381bdc-9f34-11e4-a516-d850e63b9fd6})

Successfully updated NTFS filesystem bootcode.

Bootcode was successfully updated on all targeted volumes.

E:\boot>

---
По мотивам: http://windows.microsoft.com/ru-RU/windows7/installing-windows-7-on-a-netbook

вторник, 22 января 2013 г.

Терминал: Есть приостановленные задачи.

Периодически при завершении работы в терминале, выполняя команду 'exit' вижу сообщение:
"There are suspended jobs" (русск. "Есть приостановленные задачи").
Раньше не придавал этому значения, и просто повторял выполнение команды 'exit', что приводило к тому, что терминал закрывался, а вот процесс, о котором мне и сообщала система, оставался в памяти.

Узнал, что управлять ими можно с помощью команд 'fg', 'bg'. Чуть позднее познакомлюсь с ними поближе.

Команда screen

Меня долго время смущала ситуация, что рестор баз данных Oracle очень рискованно запускать в putty, потому что процесс долгий, а соединение к Linux-серверу, на котором установлена СУБД, может оборваться, в следствие чего непонятно, как вернуться к просмотру статуса процесса. Физически подключать монитор к серверу не хотелось, потому что ... ну это же Linux-сервер, я к нему подхожу не чаще чем 1 раз в 3 месяца, да и то, чтобы пыль протереть с корпуса.

Чтобы хоть как-то решить задачу я научился настраивать VNC-сервер. Т.е. я запускал процесс рестора БД в терминале, который открыт в VNC-сессии, таким образом, даже если соединение оборвется, я все равно знал, что процесс всегда будет на виду, стоит лишь подключиться VNC-клиентом и я увижу рабочий стол в том виде, в котором я его оставил, а именно на рабочем столе будет открыто окно терминала с процессом рестора. Но все же мне это решение не нравилось, потому что, putty мне нравится больше чем VNC (из-за отсутствия графической составляющей).

Сегодня, наконец-то, смог правильно сформулировать запрос к Google и получил долгожданный ответ: о команде screen.

Чтобы принудительно завершить зависший сеанс screen пригодится команда:
screen -X -S <sessionname> quit

Горячие клавиши: http://xgu.ru/wiki/man:screen

пятница, 18 января 2013 г.

Невалидные/инвалидные/недействительные объекты Oracle (invalid_objects.sh)

В одном из отделений столкнулся с ситуацией, когда "Oracle Enterprise Manager" не работает, а компилировать недействительные объекты вручную трудоемко, поэтому решил задачу таким образом:
(в академических целях реализовано с помощью пакета "my_package")

Компилируем:
CREATE OR REPLACE PACKAGE my_package as
    PROCEDURE recompile_invalid_objects;
END my_package;

CREATE OR REPLACE PACKAGE BODY my_package as
    PROCEDURE recompile_invalid_objects IS
    BEGIN
        FOR stmt IN (
            select
             case
              when object_type = 'PACKAGE BODY' then 'ALTER PACKAGE ' || owner || '.' || object_name || ' COMPILE BODY'
              else 'ALTER ' || object_type || ' ' || owner || '.' || object_name || ' COMPILE'
             end as txt
            from dba_objects where status = 'INVALID' order by object_type, owner        
        ) LOOP
        BEGIN
        EXECUTE IMMEDIATE stmt.txt;
        COMMIT;
        EXCEPTION WHEN OTHERS THEN
            /* Сообщаем о любой ошибке и пропускаем итерацию */
            DBMS_OUTPUT.put_line (TO_CHAR(SYSTIMESTAMP, 'DD.MM.YYYY HH24:MI:SS.FF3') || ',ERROR,' || stmt.txt);
            DBMS_OUTPUT.put_line (SQLERRM);
            CONTINUE;
        END;
        /* Если ошибок не было, то сообщаем об успешном выполнении */
        DBMS_OUTPUT.put_line (TO_CHAR(SYSTIMESTAMP, 'DD.MM.YYYY HH24:MI:SS.FF3') || ',SUCCESS,' || stmt.txt);
        END LOOP;
    END;
END my_package;

Запускаем:
(предварительно "set serveroutput on")

BEGIN
    my_package.recompile_invalid_objects;
END;

понедельник, 14 января 2013 г.

Rlwrap для утилит Linux

Утилита rlwrap очень полезна в случаях, когда другие консольные утилиты, либо не имеют возможности хранить и работать с историей своих же команд, либо когда эта возможность реализована непривычно/неудобно, например, как у SQLPLUS:

Download the latest rlwrap software from the following URL.

http://utopia.knoware.nl/~hlub/uck/rlwrap/
Unzip and install the software using the following commands.

gunzip rlwrap*.gz
tar -xvf rlwrap*.tar
cd rlwrap*
./configure
make
make check
make install

Run the following commands, or better still append then to the ".bash_profile" of the oracle software owner.

alias rlsqlplus='rlwrap sqlplus'
alias rlrman='rlwrap rman'

... отсюда

Yum - незавершенные задачи

Когда yum сообщает о том, что есть незавершенные задачи, их можно "поднять" и завершить с помощью:
yum-complete-transaction
из пакета
yum-utils.

воскресенье, 13 января 2013 г.

Утилита "which" для Windows (как в UNIX)

Следующий текст нужно вставить в текстовый файл и сохранить под именем which.bat.

@echo off

:: check for illegal charecters
if "%1"=="" goto USAGE
echo %1 | find /v ":" | find /v "\" | find /v "*" | find /v "?" | find /v "," | find /v ";" | find /v "/" | find "%1" > nul
if errorlevel 1 goto USAGE

:: actual 'which' logic
for %%a in (.;%pathext%) do for %%b in (%1%%a) do ( echo %%~f$PATH:b | find /i "%1" )
goto END

:USAGE
:: Help screen:

echo.
echo UNIX-like which utility for Windows
echo Written by Ibrahim - www.digitalinternals.com
echo.
echo Usage: which executable_name
echo.
echo you may specify executable_name with or without
echo extension, but without a drive, path,
echo spaces or wildcards character(s).
echo.

rem from here: http://www.digitalinternals.com/147/20101105/unix-like-which-utility-for-windows/

:END

Удаление используемой схемы Oracle

Порой нужно удалить (тестовую) схему Oracle, а она кем-то используется, и на команду
drop user <my_username> cascade;
Oracle отвечает:
ORA-01940: cannot drop a user that is currently connected

Тогда помогает это:
select sid, serial# from v$session where username = '<my_username>';
alter user <my_username> account lock;
alter system kill session '<sid from v&session>,<serial# from v$session>';

Архив