2017-10-27 15 views
0

MSSQLがxp_commandshellを使用する方法と同様の何か? ディレクトリ情報を取得し、ログファイルを解析し、すべてを最初にバッチせずにクエリを実行できれば、はるかに簡単になります。OracleはWindowsのコマンドライン機能を実行できますか?

+1

あなたがxp_cmdshellを使用して*に対して、そこに*非常に*厳しい警告*を知っていますか - は

DBMS_SCHEDULER.CREATE_JOB(job_name => ..., job_type => 'EXECUTABLE', job_action => '...', ) 

を使用し、データベースのホスト上のスクリプトまたは実行可能ファイルを実行するには?実際には、実行するためにはかなりのセキュリティ機能を無効にする必要がありますか?あなたは間違いなくSQL Serverでそれを必要としません - ジョブを実行する場合は、SQL Serverエージェントを使用してください。 Oracleにはこれが必要ではありません。 –

+0

SQL Serverのディレクトリの分析、解析、および実行にはSSISがあります。 xp_cmdshellではありません。独自のスクリプトを作成する場合は、 –

+0

@PanagiotisKanavosというエージェントを使用してください.SMSを意味します。 –

答えて

0

はい、可能です。

SQL Developerは、SQL * Plusのほとんどの機能(すべてではありません)を実装しています。

SQL * Plusでは、SQL Developerと同様に、OSコマンドを実行するコマンドはHOSTです。私は、コードエディタで(SQL Developerを)これを入力した場合

は:限界があるだろう、明らかに

Volume in drive C is Windows 
Volume Serial Number is A28B-485D 

Directory of c:\app 

06/19/2017 01:23 PM <DIR>   . 
06/19/2017 01:23 PM <DIR>   .. 
11/10/2016 08:48 AM   10,244 .DS_Store 
11/10/2016 08:48 AM <DIR>   intro 
06/19/2017 03:29 PM <DIR>   sandbox 
       1 File(s)   10,244 bytes 
       4 Dir(s) 876,968,189,952 bytes free 

host dir c:\app 

スクリプト出力ウィンドウに表示される出力はこれです。一部のOSコマンドはSQL Developer内では実行できません。他の場合は、アクセス権をチェックする必要があります。

+0

まさに私が望む/探していたもの。 –

+1

@NoodlesPokerandSportsMedia:それはクライアント –

+0

@a_horse_with_no_nameに**サーバー上で**実行可能ファイルを実行していない**まったく**異なるその後、 'xp_cmdshell'ものです - 私のためのすべてが同じコンピュータ上で実行されますので、私はここに障害者です。クライアントとサーバーが同じネットワーク上にある場合、適切なセットアップとアクセス許可が与えられている限り、「クライアント」OSコマンドはサーバー上のファイルシステムにアクセスできます。さもなければ、私はUTL_FILEが(主に)サーバ上で動作すると信じています - それは 'xp_cmdshell 'に近いものでしょうか? – mathguy

1

あなたは言った:

を同じチェックでディレクトリがデータ

でDBを更新している必要があります必要なファイルとそのタイムスタンプが含まれている場合、一方で、特定のテーブルの情報が存在するか、正しいかどうかの例では、チェックされるだろう

ファイルを読み書きするだけの場合、UTL_FILEはファイルが存在するかどうかをチェックし、その内容にアクセスできます。外部表では、システム・ファイルにもアクセスできます。これを行うことをお勧めします。また、自動化されたシェルスクリプトが、アクセスする必要のあるデータ(タイムスタンプなど)をある種のファイルに入れていることを確認してください。

あなたのサーバー上で任意のコードを実行する必要がある場合、私がそれを行うことを知っている唯一の方法は、データベースにJavaアプリケーションを使用することです。 Here's the relevant section of the Oracle documentation on doing that

編集:@Martin Bergerが述べたように、外部DBMS_SCHEDULERジョブを忘れました。ちょっと複雑ですが、ファイルの読み込みよりも複雑な作業をしたい場合は、おそらく最も簡単な解決策です。 Here's a nice example of running 'ls' and getting the output

0

HOSTコマンドを使用することは、コマンドシェルを使用できるようになります(大きな程度)。 Windows上で実行されている場合は、cmd.exeコマンドラインであることに注意してください。 mathguyが示すように、dir C:\appを使用してディレクトリ一覧を取得できます。

Linux/UNIXで実行されている場合は、lsコマンドがディレクトリリストを生成するksh/bashなどのフレーバになります。

さらに複雑なコマンドを使用できます。私は、Oracleコマンドでファイルの存在を検出して削除する方法を理解しようとしていて、時間を無駄にしていました。 HOSTコマンドを使用すると簡単です。

HOST IF EXIST thespoolfile.txt (DEL thespoolfile.txt) 

は実は、私は、スプールの名前は、パラメータや使用などでファイルを渡すことを好む:

HOST IF EXIST &1 (DEL &1) 
SPOOL &1 
1

Oracleはインスタンスの外にジョブを実行するためにOracle Schedulerのエージェントを持っています。任意のノードでスケジューラエージェントを実行できます。スケジューラエージェントは、データベース自体のホストに限定されません。ドキュメント:Using the Oracle Scheduler Agent to Run Remote Jobsを参照してください。 DBMS_SCHEDULER

関連する問題