Встретился с такой задачей:
нужно в Таблицу_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. оформить запись перед закрытием
четверг, 7 февраля 2013 г.
пятница, 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 на флеш-накопитель.
Пример:
---
По мотивам: http://windows.microsoft.com/ru-RU/windows7/installing-windows-7-on-a-netbook
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
четверг, 24 января 2013 г.
DBMS_SHARED_POOL
Ознакомится, понять и применить: http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_shpool.htm
вторник, 22 января 2013 г.
Терминал: Есть приостановленные задачи.
Периодически при завершении работы в терминале, выполняя команду 'exit' вижу сообщение:
"There are suspended jobs" (русск. "Есть приостановленные задачи").
Раньше не придавал этому значения, и просто повторял выполнение команды 'exit', что приводило к тому, что терминал закрывался, а вот процесс, о котором мне и сообщала система, оставался в памяти.
Узнал, что управлять ими можно с помощью команд 'fg', 'bg'. Чуть позднее познакомлюсь с ними поближе.
"There are suspended jobs" (русск. "Есть приостановленные задачи").
Раньше не придавал этому значения, и просто повторял выполнение команды 'exit', что приводило к тому, что терминал закрывался, а вот процесс, о котором мне и сообщала система, оставался в памяти.
Узнал, что управлять ими можно с помощью команд 'fg', 'bg'. Чуть позднее познакомлюсь с ними поближе.
Команда screen
Меня долго время смущала ситуация, что рестор баз данных Oracle очень рискованно запускать в putty, потому что процесс долгий, а соединение к Linux-серверу, на котором установлена СУБД, может оборваться, в следствие чего непонятно, как вернуться к просмотру статуса процесса. Физически подключать монитор к серверу не хотелось, потому что ... ну это же Linux-сервер, я к нему подхожу не чаще чем 1 раз в 3 месяца, да и то, чтобы пыль протереть с корпуса.
Чтобы хоть как-то решить задачу я научился настраивать VNC-сервер. Т.е. я запускал процесс рестора БД в терминале, который открыт в VNC-сессии, таким образом, даже если соединение оборвется, я все равно знал, что процесс всегда будет на виду, стоит лишь подключиться VNC-клиентом и я увижу рабочий стол в том виде, в котором я его оставил, а именно на рабочем столе будет открыто окно терминала с процессом рестора. Но все же мне это решение не нравилось, потому что, putty мне нравится больше чем VNC (из-за отсутствия графической составляющей).
Сегодня, наконец-то, смог правильно сформулировать запрос к Google и получил долгожданный ответ: о команде screen.
Чтобы принудительно завершить зависший сеанс screen пригодится команда:
Горячие клавиши: http://xgu.ru/wiki/man:screen
Чтобы хоть как-то решить задачу я научился настраивать 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")
Компилируем:
Запускаем:
(предварительно "set serveroutput on")
(в академических целях реализовано с помощью пакета "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;
Labels:
bash,
command-line,
dba,
invalid,
invalid_object,
invalid_objects,
linux,
oracle,
oracle package,
package,
sql,
sqlplus,
todo
понедельник, 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'
... отсюда
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'
... отсюда
Подписаться на:
Сообщения (Atom)
Архив
-
►
2019
(44)
- декабря (2)
- октября (6)
- сентября (9)
- августа (1)
- июля (1)
- июня (2)
- мая (2)
- апреля (2)
- марта (2)
- февраля (9)
- января (8)
-
►
2018
(54)
- декабря (4)
- ноября (3)
- октября (6)
- сентября (4)
- августа (2)
- июля (2)
- мая (3)
- апреля (4)
- марта (11)
- февраля (6)
- января (9)
-
►
2017
(55)
- декабря (4)
- ноября (14)
- октября (1)
- сентября (3)
- августа (10)
- июля (2)
- июня (5)
- мая (2)
- апреля (3)
- марта (4)
- февраля (4)
- января (3)
-
►
2016
(111)
- декабря (12)
- ноября (4)
- октября (14)
- сентября (7)
- августа (7)
- июля (14)
- июня (12)
- мая (8)
- апреля (5)
- марта (16)
- февраля (10)
- января (2)
-
►
2015
(96)
- декабря (2)
- ноября (4)
- октября (3)
- сентября (6)
- августа (2)
- июля (2)
- июня (2)
- мая (11)
- апреля (14)
- марта (24)
- февраля (21)
- января (5)
-
►
2014
(72)
- декабря (18)
- ноября (16)
- октября (2)
- сентября (7)
- августа (4)
- июля (1)
- июня (4)
- мая (5)
- апреля (3)
- марта (3)
- февраля (6)
- января (3)
-
►
2013
(33)
- декабря (3)
- ноября (2)
- октября (3)
- сентября (2)
- августа (1)
- июля (1)
- июня (2)
- мая (5)
- апреля (2)
- марта (2)
- февраля (1)
- января (9)
-
►
2012
(181)
- ноября (6)
- октября (11)
- сентября (6)
- августа (5)
- июля (6)
- июня (25)
- мая (24)
- апреля (14)
- марта (20)
- февраля (38)
- января (26)