Информация

Последние записи

Теги


Блоги


Записи из всех блогов с тегом: sql


уже МИЛЛИОН!!! 1 000 000!

Блог: Oracle SQL
Просмотров

Сегодня 1718
В этом месяце 10530
Всего 1000003

Сегодня счетчик посещений моего блога превзошел миллион просмотров, что дальше ? Продолжаю вести курсы, публикую книгу , постараюсь и дальше радовать вас новыми интересными заметками, дорогие читатели.
С уважением, Чалышев Максим Михайлович.
автор: Myp3_u_K добавлено: 14 апр 19 просмотры: 1577, комментарии: 1



SERIALIZABLE режим

Блог: Oracle SQL
Чалышев Максим Михайлович

SQL. 5 дней которые изменят вашу жизнь.

В СУБД ORACLE есть возможность, чтобы пользователь всегда видел только те данные в таблицах, которые были доступны с начала его сессии
Такой режим (уровень изоляции) называется SERIALIZABLE. Для того чтобы включить этот режим используется команда

Alter session set isolation_level=serializable;

Следующий пример показывает отличие режима SERIALIZABLE от стандартного режима эксплуатации СУБД. Уровня изоляции READ COMMITTED
Откроем в двух разных окнах программу SQL Developer (или создадим новый Worksheet) подключимся к схеме SYS как администратор.
создадим таблицу man5
Create table Man5(prt number, name varchar2(50));



INSERT INTO man5 VALUES(20, 'Олег');
INSERT INTO man5 VALUES(21, 'Влад');
INSERT INTO man5 VALUES(22, 'Саша');
Commit;


читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 1580, комментарии: 0



Контекст сеанса

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней которые изменят твою жизнь.

Введение
В каждой сессии есть возможность использовать специальные структуры данных, именуемые контекст.
Контексты - это набор данных вида - параметр значение. Контекст предоставляет дополнительные возможности для приложений, использующих СУБД Oracle.
Теория и практика
Контекст - это предопределённый набор параметров и значений создаваемый в рамках определенной сессии. Несколько таких наборов параметр значение, объединяется с помощью структуры называемой контекстом.

Задается значение контекста с помощью процедуры DBMS_SESSION.SET_CONTEXT

Функция SYS_CONTEXT позволяет получить значение заданного контекста в раках сессии.
Для создания контекста специальная команда CREATE CONTEXT.
Сначала следует создать специальною процедуру для управления контекстом.

CREATE OR REPLACE PROCEDURE set_mycontext_value ( par IN VARCHAR2, val IN VARCHAR2 ) 
AS BEGIN  DBMS_SESSION.SET_CONTEXT ( 'myctx', par, val ); END;

CREATE OR REPLACE CONTEXT myctx USING set_mycontext_value;

читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 1485, комментарии: 0



Планировщик JOB заданий. Управление.

Блог: Oracle SQL
Чалышев Максим Михайлович

SQL. 5 дней которые изменят твою жизнь.

Введение
В Oracle есть специальный механизм запланировать выполнение определённой программы, на заданное время, это может быть оператор SQL, программа на языке PLSQL, либо даже внешняя программа. Этот механизм называется механизмом заданий Job

Данный механизм может применяться, например, для планирования запуска тяжелых запросов в ночное время или на выходные дни, распределения задач построения отчетности.

Теория и практика

Для управления заданиями в Oracle существует специальные пакет DBMS_JOB:
Создание заданий
Можно использовать механизм dbms_job
Или механизм dbms_scheduler – более современный способ
DBMS_JOB.SUBMIT(
 JOB OUT BINARY_INTEGER,
 WHAT IN VARCHAR2,
 NEXT_DATE IN DATE DEFAULT SYSDATE,
 INTERVAL IN VARCHAR2 DEFAULT NULL,
 NO_PARSE IN BOOLEAN DEFAULT FALSE,
 INSTANCE IN BINARY_INTEGER DEFAULT any_instance,
 FORCE IN BOOLEAN DEFAULT FALSE
);


Здесь:
JOB – Входной параметр уникальный идентификатор задания. Идентификатор генерируется специальной системной последовательностью.
WHAT - анонимный PL/SQL блок, в данном блоке указывается последовательность команд которая будет выполнена в процессе работы задания.
В же в этом параметре можно также писать команды вставки удаления редактирования (inser update delete), а так же команды для создания создания индексов таблиц, создания индексов, ограничений.
NEXT_DATE – дата время следующего выполнения задания.
Если будет указана дата меньше чем текущую дата, то выполнение задания будет начато немедленно.
INTERVAL – Вычисляемая дата следующего выполнения задания в столбце NEXT_DATE. Примеры интервала задания:
NULL
Задание выполнится однократно и удалится.
читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 1617, комментарии: 0



Быстрая очистка таблиц и EXECUTE IMMEDIATE.

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней, которые изменят твою жизнь.

Введение


Для быстрой очистки таблиц в Oracle применяется специальный оператор TRUNCATE TABLE.
Данный оператор является оператором DDL, оператором мгновенного выполнения и поэтому для его вызова нам потребуется оператор динамического SQL.
Динамический SQL используется в ORACLE с помощью команды EXECUTE IMMEDIATE
Теория и практика
Оператор EXECUTE IMMEDIATE выполняет динамический оператор SQL или анонимный PL / SQL блок. В нашем случае мы будем использовать EXECUTE IMMEDIATE для работы с TRUNCATE TABLE.
Текст динамического SQL заключается в кавычки.
Оператор TRUNCATE TABLE используется для быстрого удаления всех записей из таблицы в Oracle. По результату аналогичен DELETE, без условий WHERE, но выполняется гораздо быстрее.
Синтаксис
TRUNCATE TABLE table_name
  [ PRESERVE MATERIALIZED VIEW LOG | PURGE MATERIALIZED VIEW LOG ]
  [ DROP STORAGE | REUSE STORAGE ] ;

читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 1424, комментарии: 0



Внешние таблицы External Table

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней, которые изменят вашу жизнь.
Внешние таблицы – специальный механизм Oracle СУБД с помощью которого можно обращаться в данным , хранящимся в файлах вне базы данных как к обычным таблицам.

Для загрузки данных могут использоваться команды драйвера OracleLoader. В ExternalTable не могут применяться операторы изменения данных (DELETE INSERT UPDATE MERGE).

Но, к таким таблицам вполне могут применяться стандартные запросы SELECT, с использованием групповых операций, агрегатных функций, аналитического SQL.

Все это делает механизм внешних таблиц особенно эффективным для проектов DWH(хранилищ данных) , при формировании ETL(процедур загрузки) для данных.

Теория и практика

Предположим, у нас есть несколько файлов заданного формата, файлы расположены в каталоге temp на диске c:
Необходимо подключить эти файлы как внешние таблицы к экземпляру нашей базы данных.

Название файлов city.csv и man.csv, кодировка UTF8 - ниже представлено содержание этих файлов текстовом виде.

city.csv

1,Москва,10000000
2,Владимир,500000
3,Орел,300000
4,Курск,200000
5,Казань,2000000
7,Котлас,110000
8,Мурманск,400000
9,Ярославль,500000 

man.csv
9152222221,Андрей,Николаев,1,22
9152222222,Максим,Москитов,1,31
9153333333,Олег,Денисов,3,34
9173333334,Алиса,Никифорова,4,31
9173333335,Таня,Иванова,4,31
9213333336,Алексей,Иванов,7,25
9213333331,Андрей,Некрасов,2,27
9213333332,Миша,Рогозин,2,21
9214444444,Алексей,Галкин,1,38

Вы можете создать эти файлы сами с помощью любого текстового редактора. Напоминаю, что кодировка файлов UTF8.
Перед использованием внешних таблиц необходимо создать специальный объект directory указывающий на каталог, где расположены файлы для внешних таблиц

CREATE OR REPLACE DIRECTORY ext_tab_data AS 'c:/temp';

Здесь
• ext_tab_data – название объекта directory
• AS 'c:/temp' – каталог, где расположены файлы для формирования внешних таблиц.
Далее формируем временные таблицы
Создаем таблицу для файла city.csv
читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 1524, комментарии: 1



Ускорение выборки из производных таблиц с учётом всей цепочки наследования

Блог: СУБД Caché
Недавно возникла интересная задача: 21665297 и 21666325.

Итак, дано:
  • три хранимых класса "a","b" и "c", где "с" наследуется от "b", а "b" в свою очередь - от "a";
  • данные всех трёх классов хранятся в одном глобале и соответственно нумерация ID у всех трёх - сквозная;
  • необходимо как-то ускорить следующие запросы, чтобы избежать полного сканирования
    select * from a
    select * from b
    select * from с
  • также должна учитываться вся цепочка наследования при работе с указанными таблицами.
А ларчик-то просто открывается...
автор: servit добавлено: 25 сен 18 просмотры: 1934, комментарии: 1



SQL Server 2017: Adaptive Query Processing

В этой публикации я хочу поговорить о новых методах обработки запросов, которые призваны бороться с ошибками в оценках кардинальности, предполагаемом числе строк в операторах плана запроса, и улучшать производительность.

Эти методы объединяются под общим названием – Adaptive Query Processing, и состоят из трех основных компонентов:

• Adaptive Memory Grant Feedback
• Interleaved Execution
• Adaptive Joins

Далее мы рассмотрим каждый из этих методов, где они применяются и какой имеют эффект. Для демонстрации примеров я буду использовать SQL Server 2017 CTP 2.0 совместно с SQL Server Management Studio 17.0.

Читать дальше...


out of memory while reading tuples при импорте из PostgreSQL

Блог: Cruel SQL
Импортировал давеча SSIS-ом в меру увесистую (несколько миллионов записей) таблицу на SQL Server из PostgreSQL. Скачал официальный бесплатный ODBC-драйвер ( http://www.postgresql.org/ftp/odbc/versions/ ), пульнул DataFlow.

И всё бы пучком, но на небольших выборках.
А вот забрать всю таблицу разом не получалось. Вместо данных вылезала ошибка из сабжа.
Погуглил. Ну ладно, может, лениво погуглил, но, кроме каких-то невнятных кувырков с импортированием данных по кускам и рекламы коммерческих OLEDB-шных провайдеров, ничего не нашёл. Пришлось действовать методом тыка.

В общем, коллеги, если у вас вдруг вскочит аналогичный прыщ по работе, то вот рецепт.
В ConnectionString-е находим свойство useserversideprepare=0 и проставляем там единичку вместо нуля. Ошибка out of memory возникает на уровне ODBC-шного драйвера при подготовке данных на стороне клиента и, соответственно, исчезает при виде этой самой единички.

Ну и да, если импорт запускается по расписанию, нужно в свойствах jobstep-а проставить выполнение в 32-битной среде, иначе валится с мутной ошибкой о невозможности подключения.
автор: Алексей Дружинин добавлено: 17 май 17 просмотры: 2788, комментарии: 0



Использование GUID в ORACLE

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней которые изменят вашу жизнь.

Бесплатные авторские видеокурсы SQL, PLSQL, JAVA

GUID некоторая уникальная последовательность символов, в некоторых случаях, может использоваться в качестве первичного ключа.
Рассмотрим основные работы с GUID в ORACLE.

Получить GUID в ORACLE можно, воспользовавшись функцией
sys_guid()
запрос в этом случае будет выглядеть следующим образом
select sys_guid() from dual

результат
4A9B3CF364FB92CAE050A8C0670A0D3A
Для получения GUID в PL SQL используются несколько аналогичная команда
Следует так же отметить, что для ранения GUID в ORACLE используются следующие типы данных
raw(16) и varchar2(32);

следующие примеры демонстрируют работу c GUID в PL/SQL ORACLE
declare
  p_raw raw(16); 
begin
  p_raw := sys_guid;
  dbms_output.put_line(p_raw);
end;

результат 4A9B3CF3650092CAE050A8C0670A0D3A

declare
  p_vc2 varchar2(32);
begin
  p_vc2 := sys_guid;
  dbms_output.put_line(p_vc2);
end;

результат 4A9B3CF3652292CAE050A8C0670A0D3A
читать дальше...
автор: Myp3_u_K добавлено: 13 мар 17 просмотры: 7228, комментарии: 5


предыдущие записи