プログラマ38の日記

主にプログラムメモです。

Salesforce: データローダの起動についてのメモ(メモリ不足の対応)

Salesforceのデータをまとめて編集をする時に、データローダを使います。

環境的な制約でうまく動作しなかった時のメモになります。

※データローダのバージョンは40を前提としています。

 

環境的な問題

  1. Javaのインストールが許可されていない
  2. メモリ不足のエラー(heap size error)が出る

 

解決策

1. Javaのインストールが許可されていない

データローダは32bit、Java8以上のJavaがインストールされている前提となっています。そのため、Javaのインストールが許可されていない場合は「dataloader-40.0.0.exe」からは起動できません。

 

というのは「dataloader-40.0.0.exe」はlaunch4jで作成されていて、インストールされている32bit、Java8以上をレジストリから探すようになっているからです。例え、環境変数「Path」にjavaw.exeへのパスを通していても、「JAVA_HOME」の環境変数を設定していても起動ができないということになります。

 

そこで、まずJavaをインストールをしないで、モジュール一式をファイルとして配置します。(一旦インストールできる環境でインストールをしてからjavaファイル自体をコピーすることになります。)

f:id:crmprogrammer38:20171010091533p:plain

上のjavaモジュール一式をフォルダにつめて持って行きます。

 

次に、起動用のショートカットを作成します。

f:id:crmprogrammer38:20171010091836p:plain

上のデータローダの中身から、「dataloader-40.0.0-uber.jar」のショートカットを作成します。

作成したショートカットのプロパティから、リンク先を次のように修正します。

"~javaw.exe"  -Dappdata.dir="C:ProgramData"  -jar "~dataloader-40.0.0-uber.jar"

上の「~javaw.exe」 は、最初に配置したjavaモジュール一式の中のjavaw.exeへのフルパスになり、「~dataloader-40.0.0-uber.jar」は、ショートカットを作成した「dataloader-40.0.0-uber.jar」へのフルパスになります。

 

これで、Javaをインストールすることなくデータローダが使えます。

※さらにデータローダのインストールも許可されていない場合は、データローダのモジュール一式をファイルとして配置した後に、上記を行うことで起動することができます。

 

2. メモリ不足のエラー(heap size error)が出る

通常の「dataloader-40.0.0.exe」から起動したデータローダでメモリ不足のエラーがでる場合、データローダのフォルダ内になる「dataloader-40.0.0.l4j.ini」を修正することで対応します。

[変更前 dataloader-40.0.0.l4j.ini]
-Dappdata.dir="C:ProgramData"
-jar "D:programfilessf_dataloaderdataloader40dataloader-40.0.0-uber.jar"
[変更後 dataloader-40.0.0.l4j.ini]
-Xmx1G
-Dappdata.dir="C:ProgramData"
-jar "D:programfilessf_dataloaderdataloader40dataloader-40.0.0-uber.jar"

 上記のようにjavaコマンドのメモリサイズ指定を追加します。

 

「1. Javaのインストールが許可されていない」で、ショートカットから起動するようにした場合は、

[変更前 ショートカット]
"~javaw.exe"  -Dappdata.dir="C:ProgramData"  -jar "~dataloader-40.0.0-uber.jar"
[変更後 ショートカット]
"~javaw.exe" -Xmx1G -Dappdata.dir="C:ProgramData"  -jar "~dataloader-40.0.0-uber.jar"

 上記のようにjavaコマンドのメモリサイズ指定を追加します。

 

 

最後に

ロングテキストエリアの10万文字とか、大きい添付ファイルやコンテンツなどを扱うとメモリ不足のエラーが出る時があるので、メモリサイズの指定を行う機会はあると思います。

 

以前はデータローダはjavaが同梱されていたのですが、最近はjavaのインストールは別に行うようになっています。javaのサイズが大きくなったことも原因の1つなんじゃないかなーと勝手に考えています。