Натолкнулся на неприятную особенность - из-за некорретной работы с unicode версий ФБ менее 2.1, при ресторе БД, в которой даны какие-то права пользователям, имя которого содержит, к примеру, русские символы, рестор останавливается:
gbak: restoring privilege for user ДЕНИС
gbak: ERROR:arithmetic exception, numeric overflow, or string truncation
gbak: ERROR: Cannot transliterate character between character sets
gbak: ERROR: At trigger 'RDB$TRIGGER_9'
gbak:Exiting before completion due to errors
Ситуация конечно редкая, для заведения таких прав до версии 2.1 нужна недюжинная фантазия.
Если такой грант давать в 2.1 - то все работает штатно.
Краткие заметки по ит-шным темам, с которыми я сталкиваюсь. Чаще это вопросы работы с СУБД и прикладной разработки.
суббота, 10 ноября 2007 г.
суббота, 29 сентября 2007 г.
Неоднозначность в запросах с сортировкой и distinct
Такой вот запрос, в FB2 отрабатывает, но данные возвращает в случайном порядке.
Как подсказал Дима Кузьменко:
А вот Oracle(как выяснилось и PostgreSQL) с такими запросами посылает(после чего и поднялся вопрос).
http://ora-01791.ora-code.com/
ORA-01791: not a SELECTed expression
Cause:
There is an incorrect ORDER BY item. The query is a SELECT DISTINCT query with an ORDER BY clause. In this context, all ORDER BY items must be constants, SELECT list expressions, or expressions whose operands are constants or SELECT list expressions.
Action:
Remove the inappropriate ORDER BY item from the SELECT list and retry the statement.
Для экспериментов:
select distinct(t.f1) from table1 t order by t.id
Как подсказал Дима Кузьменко:
сначала идет distinct, потом order.
то есть. набор выливается в sort, удаляются повторы.
Затем набор сортируется по атрибуту order.
как оно этот атрибут возьмет - зависит от того, как на диске
или в индексе легло.
план в 2.0 - PLAN SORT (SORT ((table1 NATURAL)))
А вот Oracle(как выяснилось и PostgreSQL) с такими запросами посылает(после чего и поднялся вопрос).
http://ora-01791.ora-code.com/
ORA-01791: not a SELECTed expression
Cause:
There is an incorrect ORDER BY item. The query is a SELECT DISTINCT query with an ORDER BY clause. In this context, all ORDER BY items must be constants, SELECT list expressions, or expressions whose operands are constants or SELECT list expressions.
Action:
Remove the inappropriate ORDER BY item from the SELECT list and retry the statement.
Для экспериментов:
CREATE TABLE TABLE1 (
ID INTEGER NOT NULL,
F1 VARCHAR(10)
);
INSERT INTO TABLE1 (ID, F1) VALUES (1, 'q');
INSERT INTO TABLE1 (ID, F1) VALUES (2, 'w');
INSERT INTO TABLE1 (ID, F1) VALUES (3, 'e');
INSERT INTO TABLE1 (ID, F1) VALUES (4, 'r');
INSERT INTO TABLE1 (ID, F1) VALUES (5, 't');
INSERT INTO TABLE1 (ID, F1) VALUES (6, 'q');
INSERT INTO TABLE1 (ID, F1) VALUES (7, 'w');
COMMIT WORK;
Блокировка файла базы при XNET подключении с использованием событий
>> 2) Сервер после отключения ничего не держит.
> Неправдачка ваша.
> При XNET подключении с использованием событий именно держит.
События - ключевой момент. Там поток их доставки ждёт 5 сек
до полного отруба.
--
Хорсун Влад
> Неправдачка ваша.
> При XNET подключении с использованием событий именно держит.
События - ключевой момент. Там поток их доставки ждёт 5 сек
до полного отруба.
--
Хорсун Влад
воскресенье, 9 сентября 2007 г.
Хитрый способ починки БД с помощью nbackup
>04.09.2007 12:17:06 INFO: Analyzing database low-level structures...
> 04.09.2007 12:17:06 INFO: Process database file #1 of 1 files.
> 04.09.2007 12:20:01 INFO: Actual PageCount: 238816 found in database
> 04.09.2007 12:20:01 ERROR: Found 6168 undefined pages.
>
> Насколько это страшно ?
VK>> Если это ОДС 11.1 и все 6168 undefined pages в конце БД, то это
VK>> совершенно не страшно.
VK>> Сделай бекап 0-го уровня nbackup'ом, пофикси его им же для
VK>> превращения в БД, и сравни с р-ром оригинала. Потом прогони
VK>> FirstAID на полученной копии
>
> Влад, а можешь пару слов про низкий уровень процесса?
> Nbackup их восстановит правильно или отбросит?
FB 2.1, работая с родным форматом ОДС 11.1, по-умолчанию расширяет файл БД
относительно большими кусками, а не по-странично как раньше. Соответственно в
конце файла, как правило, есть страницы, которые никогда не были использованы.
В PIP есть отметка о том, сколько страниц было реально использовано. nbackup
читает эти отметки и не включает в бекап эти страницы.
--
Хорсун Влад
> 04.09.2007 12:17:06 INFO: Process database file #1 of 1 files.
> 04.09.2007 12:20:01 INFO: Actual PageCount: 238816 found in database
> 04.09.2007 12:20:01 ERROR: Found 6168 undefined pages.
>
> Насколько это страшно ?
VK>> Если это ОДС 11.1 и все 6168 undefined pages в конце БД, то это
VK>> совершенно не страшно.
VK>> Сделай бекап 0-го уровня nbackup'ом, пофикси его им же для
VK>> превращения в БД, и сравни с р-ром оригинала. Потом прогони
VK>> FirstAID на полученной копии
>
> Влад, а можешь пару слов про низкий уровень процесса?
> Nbackup их восстановит правильно или отбросит?
FB 2.1, работая с родным форматом ОДС 11.1, по-умолчанию расширяет файл БД
относительно большими кусками, а не по-странично как раньше. Соответственно в
конце файла, как правило, есть страницы, которые никогда не были использованы.
В PIP есть отметка о том, сколько страниц было реально использовано. nbackup
читает эти отметки и не включает в бекап эти страницы.
--
Хорсун Влад
Различия в работе с savepoint в Firebird и Interbase
Kovalenko Dmitry wrote:
>
> Родился вопрос. А в стандарте SQL (99) вроде как прописано понятие
> точек сохранения (SAVEPOINT).
Так точно.
> А прописано ли в нем что делать с точкой B в таком случае?
>
> 1. savepoint A;
> 2. savepoint B;
> 3. savepoint A;
> 4. в этой точке у нас savepoint B (по-стандарту) существует или нет?
Стандарт лишь говорит, что должен удалиться старый сейвпойнт А и
создаться новый с тем же именем.
> в IB savepoint "B" будет изничтожен
Судя по всему, IB неявно выполняет RELEASE SAVEPOINT A (который по
стандарту уничтожает все сейвпойнты от А до настоящего времени), в то
время как FB выполняет наше расширение: RELEASE SAVEPOINT A ONLY,
которое удаляет только данный сейвпойнт. Отсюда и разница.
Я считаю наше поведение правильным.
--
Дмитрий Еманов
>
> Родился вопрос. А в стандарте SQL (99) вроде как прописано понятие
> точек сохранения (SAVEPOINT).
Так точно.
> А прописано ли в нем что делать с точкой B в таком случае?
>
> 1. savepoint A;
> 2. savepoint B;
> 3. savepoint A;
> 4. в этой точке у нас savepoint B (по-стандарту) существует или нет?
Стандарт лишь говорит, что должен удалиться старый сейвпойнт А и
создаться новый с тем же именем.
> в IB savepoint "B" будет изничтожен
Судя по всему, IB неявно выполняет RELEASE SAVEPOINT A (который по
стандарту уничтожает все сейвпойнты от А до настоящего времени), в то
время как FB выполняет наше расширение: RELEASE SAVEPOINT A ONLY,
которое удаляет только данный сейвпойнт. Отсюда и разница.
Я считаю наше поведение правильным.
--
Дмитрий Еманов
воскресенье, 2 сентября 2007 г.
Мега связка Perl+Oracle
DBD-Oracle-1.19\README.win32.txt
1)...
8) Enough Downloading and installing go have a coffee.
А перед этим мы скачали все что только можно от МС(Microsoft Visual Studio 2005,Windows SDK, Microsoft .Net framework 1.1) - опенсорс, мля.
PS не нужно воспринимать сей пост серьезно
PSS хотя...
1)...
8) Enough Downloading and installing go have a coffee.
А перед этим мы скачали все что только можно от МС(Microsoft Visual Studio 2005,Windows SDK, Microsoft .Net framework 1.1) - опенсорс, мля.
PS не нужно воспринимать сей пост серьезно
PSS хотя...
понедельник, 16 июля 2007 г.
Странности перла
Что вы подумаете должен вернуть ниже приведенный код?
bbb?
неа
b0b
Спасибо другу-перловику - он удержал мой мозг на месте:
Интересно, чего стоит этот пустой keys(%$f___ed_hash);
bbb?
неа
b0b
Спасибо другу-перловику - он удержал мой мозг на месте:
There is a single iterator for each hash, shared by all each(), keys(), and values() function calls in the program; it can be reset by reading all the elements from the hash, or by evaluating keys HASH or values HASH
Интересно, чего стоит этот пустой keys(%$f___ed_hash);
my $f___ed_hash = {
1=>'a',
2=>'b',
3=>'c'
};
sub eb___ya_sub {
keys(%$f___ed_hash);
while (my ($n,$w)=each(%$f___ed_hash)){
if($n==2) {
return $w;
}
}
}
print &eb___ya_sub;
print &eb___ya_sub;
print &eb___ya_sub;
Подписаться на:
Сообщения (Atom)