2014-10-09 91 views
1

我有一個sql腳本,它創建我的應用程序表,序列,觸發器等。&插入大約10k行數據。在慢速網絡上運行sql腳本

我在慢速網絡上,當我從本地機器運行此腳本時,需要很長時間才能完成。 想知道是否有任何支持在sqlplus(或sqldeveloper)在服務器上運行此腳本。因此,整個腳本首先被傳輸到執行的服務器,然後返回執行的日誌文件。

+0

也許你可以創建一個shell腳本或服務器上類似於運行SQL腳本。 – 2014-10-09 13:36:28

+0

是的,但沒有對服務器或共存機器的那種訪問 – 6ton 2014-10-09 13:42:12

+0

文件有多大,「緩慢」有多慢,以及「多長」有多長? – 2014-10-09 16:17:25

回答

0

不,沒有。有些事情可能會使數據加載速度變得更快,例如,如果您正在執行單個插入操作,則使用sql loader,並增加提交間隔。但是,我將不得不看到代碼非常有幫助。

+0

是的,我確實添加了提交。數據導入後也會創建約束條件。但不幸的是沒有辦法解決網絡跳躍:( – 6ton 2014-10-09 13:43:13

0

如果您有權訪問託管數據庫的遠程服務器,並且您有權在該服務器上執行sqlplus,那麼可以。

  1. 登錄或SSH(取決於OS - Windows或* nix中)到 服務器
  2. 在那裏創建SQL腳本(myscript.sql)。
  3. 登錄到SQL * Plus並執行使用命令@ myscript.sql
0

有很少需要在服務器上運行這些類型的腳本。批量命令的一些簡單更改可以顯着提高性能。以下所有更改將多條語句組合在一起,從而減少網絡往返次數。其中一些還會縮短解析時間,即使腳本在服務器上運行,也會顯着提高性能。像這樣與combind插入

insert into some_table values(1); 
insert into some_table values(2); 
... 

合併插入到一個單獨的語句

更換單個刀片

insert into some_table 
select 1 from dual union all 
select 2 from dual union all 
... 

使用PL/SQL塊

更換個別DDL:

create sequence sequence1; 
create sequence sequence2; 

用PL/SQL塊:

begin 
    execute immediate 'create sequence sequence1'; 
    execute immediate 'create sequence sequence2'; 
end; 
/

使用內嵌的約束

結合DDL儘可能。例如,使用以下語句:

create table some_table(a number not null); 

取而代之的是:

create table some_table(a number); 
alter table some_table modify a not null;