У меня есть сценарий SQL, как показано ниже, который состоит из 65000 вставных операторов.Вставьте утверждения в Oracle
SET DEFINE OFF;
SET AUTOCOMMIT 1000;
SET FEEDBACK OFF;
Insert into table (col1,..col20) values ('val1',...'val2');
Insert into table (col1,..col20) values ('val1',...'val2');
...
...
Когда я запускаю этот скрипт через SQLPLUS в моей командной строке (SQLPLUS USR/PWD @ DB @ script.sql) он взял меня около 4 часов, чтобы закончить.
Но когда я запускаю один и тот же сценарий, регистрируясь при запуске подключения к серверу и запуска скрипта через sqlplus (sqlplus usr/pwd @ DB @ script.sql), потребовалось всего одну минуту.
Не могли бы вы, пожалуйста, дайте мне знать, почему эта разница вызвана
Звучит как сетевая латентность - отдельные операторы будут иметь свои отдельные индивидуальные поездки на сервер, что неэффективно. Но разница звучит немного экстремально. Где находится ваш клиент - в локальной сети? WAN? Доступ через Интернет через VPN? Как долго удаленная версия берет, если вы просто делаете ее блоком, ставя 'begin ... end;' вокруг всего списка вставок? (Кроме того, почему вы делаете 65 000 отдельных вставок в первую очередь - откуда берутся эти значения?) –
Если я положил начало .. конец, включающий вставки, то он запускается (из моей командной строки) в течение 4 часов. Мы подключаем сервер через интернет (как через мою командную строку, так и замазку). Я хотел бы вставить эти значения в таблицу из одного высшего env в env. Я знал, что есть другие способы, как SQL LOADER, загружать их быстро, но я хотел бы понять разницу между двумя приведенными выше исполнениями. –
Я не совсем уверен в причине разницы во времени. Одна вещь, о которой я могу думать, заключается в том, что когда вы получаете доступ к базе данных через шпатлевку, вы заходите на сервер db. Это уменьшает задержку сети (как сказал Алекс). – Invalidsearch