2016-03-23 12 views
0

私は1つ以上のスクリプトを実行できるPerlまたはBashのスクリプトを書こうとしていますを選択してリモートサーバ上のデータベースから情報を取得します。BashまたはPerlスクリプトからSQL文を実行していますか?

現在、RazorSQLやDbVisualizerなどのGUIツールを使用して、データベースに接続してテーブルを表示し、SQLコマンドを実行することができます...しかし、スクリプトからSQLコマンドを実行して、 Bash/Perlスクリプトのcmdsの結果です。

データベースを実行しているサーバーは、次の詳細があります。

  • オペレーティングシステム:のMicrosoft Windows Server 2003のRSのStandard Edition SP2
  • データベース:のMicrosoft SQL Server 2005の

Windows PC上でRazorSQLを使用してデータベースに接続するとき、私の接続はドライバ"net.sourceforge.jt ds.jdbc.Driver "
私のLinuxのボックスでDbVisualizerを使用する場合は、JDBCドライバ「SQL Server(jTDS)」を使用します。どちらもうまくいくようです。

だから、Perlのからこれをしようとする試みで、私は次のパッケージダウンロード:

  • をunixODBCの
  • FreeTDSの
  • SQSHのため--->*しかし、私はそれはコンパイルすることができませんでしたSybaseの...
  • Perlモジュール:DBD :: ODBC、DBD :: JDBC、DBI

、テストとセットアップのunixODBCをインストールするには、私はこのサイトを使用:http://www.easysoft.com/developer/languages/perl/dbd_odbc_tutorial_part_1.html
をこのサイトで使用:DSNを追加するには、http://www.unixodbc.org/doc/UserManual/を...

今、私はここにこれらの指示を使用しようとしました:http://www.freetds.org/userguide/perl.htmを、Perlのからデータベースに接続するにはしかし、私はそれを接続するいくつかの問題を抱えています。

私は正しいパスかどうか、またはconnect()の文字列はどのように見えるのでしょうか? RazorSQLでJDBC「URL」は次のようになります。

jdbc:jtds:sqlserver://192.168.2.200:1433/ActiveDB;appName=RazorSQL;useCursors=true 

そして私は、私はPerlのスクリプト内からGUIコマンドODBCConfigにで作成したDSNを使用する方法として困惑している...私はよPerlでMS SQL Serverに接続するための実際の例を見つけるのが難しい。

ドライバをリストファイルは次のようになります。このリストの最後のものはRazorSQLで使用したのと同じドライバーであるが、それはjarファイルなので、私はそれを推測* ODBCINST.INI

[MySQL ODBC 3.51.27r695 Driver] 
Driver  = /usr/lib/unixODBC/libmyodbc3.so 
Setup  = /usr/lib/unixODBC/libmyodbc3S.so 
UsageCount = 1 

[JDBC/ODBC bridge driver for java-1_6_0-sun] 
Driver  = /usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/libJdbcOdbc.so 
Setup  = /usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/libJdbcOdbc.so 
UsageCount = 1 

[TDS Driver] 
Driver  = /usr/lib/unixODBC/libtdsS.so 
Setup  = /usr/lib/unixODBC/libtdsS.so 
UsageCount = 1 

[net.sourceforge.jtds.jdbc.Driver] 
Driver  = /opt/jtds-1.3.1/jtds-1.3.1.jar 
Setup  = /opt/jtds-1.3.1/jtds-1.3.1.jar 
UsageCount = 1 

Javaプログラムでのみ使用できます...

そして、これはどのように私はPerlで文字列ルック "()を接続する" 必要があり、それが使用する権利ドライバーだろう、ということを考えると〜/ .odbc.iniを

[MyDB] 
Driver  = /usr/lib/unixODBC/libtdsS.so 
Description = 
SERVER  = serverName.foo.bar.local 
PORT  = 1433 
USER  = user1 
Password = abc123 
Database = ActiveDB 

です。 ..?

私はこれをスクリプトで試してみるのは新しいですし、私の頭は現在情報で回転しています....誰かが提供できる助けがあれば、大いに感謝します!

答えて

0

DBD :: ODBCのドキュメントを少し閲覧したところ、いくつかの例が見つかりました。 This oneは次のことを行います(一部を削除しましたが、これは文字通り引用符ではありません)。

my $dsn = "DRIVER={SQL Server};SERVER=$options{DbSrcServer};DATABASE=$options{DbSrcDatabase};NETWORK=dbmssocn;UID=$options{DbSrcLoginName};PWD=$options{DbSrcPassword}"; 
my $dbh = DBI->connect("DBI:ODBC:$dsn") || die "DBI connect failed: $DBI::errstr\n"; 
$dbh->{AutoCommit} = 0;  # enable transactions, if possible 
$dbh->{RaiseError} = 0; 
$dbh->{PrintError} = 1;  # use RaiseError instead 
$dbh->{ShowErrorStatement} = 1; 

残念ながら、ドライバのドキュメントには実際の説明はありません。 DRIVER=SERVER=などがあります。それらもあなたのodbc.iniにあるので、試してみてください。

my $dsn = "DRIVER=/usr/lib/unixODBC/libtdsS.so;SERVER=serverName.foo.bar.local;PORT=1433;DATABASE=ActiveDB;UID=user1;PWD=abc123"; 

免責事項:私はこれをテストすることはできません、それが動作するかどうか私はわかりません。それは私が試してみるだけの教育的な推測です。


また、比較的簡単に聞こえるDBD :: JDBCを試すこともできます。 This part of its docs describe the dsn。しかし、いくつかの依存関係が必要です。私はあなたがすでにそれらのいくつかをカバーしていると信じています。

+0

問題が解決しない場合は、この回答を削除します。 – simbabque

+0

返信simbabqueありがとう、私は本当に助けていただきありがとうございます..!それは正確には機能しませんでした。 DBI接続ラインでエラーが発生しました: "[unixODBC] [ドライバマネージャ]データソース名が見つからず、デフォルトドライバが指定されていません(SQL-IM002)..." '$ dsn =" ... "'をDSNの名前だけで置き換えました。\ * ie "[MyDB]" ..私は 'my $ dsn =" MyDB ";を持っていました。今回はコマンドが失敗するまでに時間がかかっていましたが、今回は別のエラーが発生しました:「初期通信パケットを読み込んでMySQLサーバとの接続が切断されました。システムエラー:104」 – Matt

+0

MySQLに接続しようとするのはなぜですか?私たちはMicrosoft SQL Serverについて話していませんか? – simbabque

0

よろしくお願いします。私はこれが効いていると思います。おかげで再びsimbadqueの提案、私は非常に多くの時間を助けていただきありがとうございます!

私はこの間に混乱して回ってしまっていましたが、どちらの方法がこれ以上上がっているのかは分かりませんでした...だから私はこれまでのことすべてを無視して、再び。そして私は、誰かが私がやりたかったことを正確にやって書いた素晴らしいガイドを見つけることになりました(*ショッカー...) !! - >http://www.perlmonks.org/?node_id=392385

はDBD :: Sybaseのを使用してLinuxからMicrosoft SQL Serverにアクセス:

は私が(*私はタイトルはかなり明白である知っている) の下のリンクでPerlMonks.orgに、これらの命令を見つけました

  1. アンインストールFreeTDSの:

    は基本的には、短期では、私は次の操作を行うために必要な私は、NE - >./configure --prefix=/usr/local/freetds --with-tdsver=7.0 configureコマンドとしてこれを使用して再設定FreeTDSの:私はもともと...

  2. 再コンパイル&再インストールFreeTDSのからそれをインストール/コンパイルされたソースディレクトリにmake uninstallを行うことeded。

  3. FreeTDSを設定します。CONF(make install後*)は、設定ファイルに以下の行を追加しました: try server login = yes try domain login = no tds version = 7.0
    をこれらの行は、それはそれは情報のログイン、データベースログインcredsをを使用しないでWindowsドメインにします。そして

  4. FreeTDSの中にサーバーのエントリを作成

    ... MS SQL Server 2000のその後、新しいSQL Serverのバージョンのために何であるかのバージョンでDBに接続し、そのバージョン7を読み取るためにFreeTDSのを伝え、バージョン7をTDS。 conf次の行を追加して、MS SQL Server 2005データベースを実行するサーバーを追加しました。そのコマンドを実行した後、私はパスワードの入力を求められますし、私はそれがログに記録さを示しています「1>」、のように見える、コマンドプロンプトを取得/usr/local/freetds/bin/tsql -S mydb -U sqlUsername
    [mydb] host = jwp-eim02.paoli.jwpepper.local port = 1433 tds version = 8.0

  5. テスト「mydbという」エントリ - うまくいった!

  6. Perlで最後に、テスト:以下*私はSQLServerデータベースからデータを取得するために使用するサンプルコードです...

    #!/usr/bin/perl 
    
    use DBI; 
    
    $dsn = 'DBI:Sybase:server=mydb'; 
    
    my $dbh = DBI->connect($dsn, "sqlUsername", 'sqlUserPwd'); 
    die "unable to connect to server $DBI::errstr" unless $dbh; 
    
    $dbh->do("use DatabaseName"); 
    
    $query = "Select * from EXAMPLE_TABLENAME"; 
    $sth = $dbh->prepare ($query) or die "prepare failed\n"; 
    $sth->execute() or die "unable to execute query $query error $DBI::errstr"; 
    
    $rows = $sth->rows ; 
    print "$row rows returned by query\n"; 
    
    while (@first = $sth->fetchrow_array) { 
        foreach $field (@first) { 
         print "field: $field\n"; 
        } 
    } 
    

私は、そのPerlのスクリプトを実行し、ビオラ...!!私はSelect Statementからデータを取り戻しました!

これは、他の誰かが同じことをするのを助けてくれることを願っています...そして、私はこれをBashのようなものでやってみたいと思っています。おそらく、FreeTDSに付属のtsql、osql、など...しかし、私はそれについて肯定的ではありません。

関連する問題