AIと戦って、あなたの人生のリスク診断 >>

今日は三件目で恐縮です。

テスト環境では、正常に行えましたが、本番環境に移行すると・・・
SQLServerのジョブからバッチをキックすると、
「ホストファイルが開けません」とエラーが出るんですが、どうしたらよいのか判りません・・・どのたかご教授願います。

●先ほどの質問

本題ですが、SQLのジョブでDBサーバから他サーバーのバッチを呼んでますが、共有ファイルを参照できなくて困ってます。共有ファイルはadmini権限です。
何方かお助け下さい。

環境は、
DBサーバー:[WIN2KSEVER(admini権限/パスワード共通)]
[SQLserver2000(ローカルインストール、混合モード、ドメイン構成なし)
他サーバー:[WIN2KSERVER(admini権限/パスワード共通)]

●先ほどのお答え(takekanさんありがとうございました。)

DBサーバーにインストールしたSQLServer2000のサービスアカウントが
「ローカルアカウント」という前提で話をすすめます。

以下の手順で確認をしてみてください。
1.DBサーバーにAdministratorでログインして、共有ファイルの中身を見れるか?
 →パスワードを要求されるようであれば、Administratorのパスワードをそろえてください。そうすればパスワードを要求されることはないと思います。

2.DBサーバーにAdministratorでログインして、SQLServerのジョブで実行しているコマンドを、コマンドプロンプトから実行して、実行できるか?
 →実行できなければ、手順1を再度確認

3.ジョブを実行して実行できるか?

これで解消できるか確信は持てませんがご参考まで。

以上ですが宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

本番環境とテスト環境で異なるものはあるのでしょうか?


それが一番怪しいと思います。
サービスパックの適用状況の違いとかを中心に確認してください。

で、全く同じ環境なのであれば、ジョブ関連の以下の設定を確認してください。

1.ジョブの所有者の確認
 EnterpriseManagerでジョブを右クリックして[プロパティ]を選択
 [全般]タブの所有者欄が同じかどうか確認
 ※「sa」か、「コンピュータ名\Administrator」が所有者として設定されていれば問題ありません。

2.SQLServerエージェントのプロパティを確認
 EnerpriseManagerで[管理]-[SQLServerエージェント]とたどって、SQLServerエージェントを右クリックして[プロパティ]を選択
 [ジョブシステム]タブのsysadmin以外の「ジョブステッププロキシアカウント」チェックがONになっているか確認

これで解消できるか確信は持てませんがご参考まで。
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQLサーバーのジョブでのexeファイル実行について教えてください。

SQLサーバーのジョブでのexeファイル実行について教えてください。

FTP転送を行うバッチ(拡張子bat)を作成しexeファイルに変換してから
SQLサーバーのジョブから実行しようと思っています。
batファイルからexeファイルへの変換は
WindowsのIExpressとBat_To_Exe_Converterというツールを使用しました。

SQLサーバーにジョブを作成してバッチを実行させようとしたんですが
batファイルのままであれば実行できるのに、exeファイルで実行させようとすると
ジョブが実行中のままになり止まってしまします。

exeファイルは直接実行させると想定の処理が実行させるので
壊れていることは無いと思います。


原因の検討がつかず困っています。
些細なことでもいいので何か教えて頂ければと思います。
宜しくお願いします。

尚、exeに変換するのはバッチファイルの中身を見せないようにする為です。

Aベストアンサー

思いつくことを列挙してみました。的外れかもしれませんが、許してください

・実行権限がない(SQLサーバーのジョブはユーザーは誰で動作するのでしょうか?)
・SQLサーバーにexeの実行権限がない(スクリプトだけしか実行できないとか)
・SQLサーバーの処理機能(Shell)に偽EXE(Bat_To_Exe_Converterで作成したexe)を実行する能力がない。(VisualStudioで本物のEXEを作って実行できるか試せばわかる)
・相対パスになっていてパスがちゃんと読めない(exeの指定は絶対パスで書いてありますか?)
・実行した結果を格納する権限(大抵はファイルを書き出す権利)がない

QSQLサーバのジョブにてVisualBasicスクリプトを叩く方法

皆様
御忙しいところすみません。
とても困っているので、ご存知でしたら教えてください。

SQLサーバーのジョブからVisualBasicスクリプトで作成したファイルを叩きたいのですが、
このようなことは出来ないのでしょうか?
ジョブのコマンド内に
C:\~~~.vbs
という風に書いてみたのですが、どうやらだめみたいなので。。。
※~~~.vbsはファイル名です。

初心者丸出しの質問ですが、
よろしくお願いいたします。

以上です。

Aベストアンサー

hoge.batを作成してその中に。
C:\~~~.vbs
を記述して、hoge.batをジョブに登録。

では、だめですか?

Qストアドプロシージャでcsvファイルへデータにエクスポート

いつも勉強させていただいています。
ストアドプロシージャの勉強をし始めて間もない素人ですがよろしくお願いします。

SQL-server2005でテーブルをCSVファイルに、ストアドプロシージャを使ってそのままエクスポートする、と言うことをやっています。
以下作成したストアドプロシージャです。
*******************************************
CREATE PROCEDURE [ストプロ名]
AS
DECLARE @command VARCHAR(200)
BEGIN
SET
@command = ' bcp [データベース名].[スキーマ].[テーブル]
out C:\XXXX\aaa.txt -PXXXXXX -UXXXXXX -SXXXXXX'
EXECUTE master.dbo.xp_cmdshell @command
END
****************************************
解析ボタン、実行ボタンをクリックしてもエラーは出ません。
「ストアドプロシージャの実行」を選択して実行させても、
アラーは表示されず、ファイルも作成されません。
xp_cmdshell が有効になるように設定もしました。

残念ながら検討すらつかない状態です。ぜひご教授お願いします。

いつも勉強させていただいています。
ストアドプロシージャの勉強をし始めて間もない素人ですがよろしくお願いします。

SQL-server2005でテーブルをCSVファイルに、ストアドプロシージャを使ってそのままエクスポートする、と言うことをやっています。
以下作成したストアドプロシージャです。
*******************************************
CREATE PROCEDURE [ストプロ名]
AS
DECLARE @command VARCHAR(200)
BEGIN
SET
@command = ' bcp [データベース名].[スキーマ].[テーブル]
out C:\XXXX\aaa.tx...続きを読む

Aベストアンサー

まず、@command に入れている内容をコマンドプロンプトで実行した場合は、ちゃんと出力されていますか?

あと、、、
「C:\XXXX\aaa.txt」のファイルの有無は、SQL Servereが入ってるサーバー内を確認してますか?

私は昔、自分のローカルにできると勘違いしていた事があるもので。。。

Qxp_cmdshellについて

現在、Windows XP Pro、SQL Server2005 Developer Editionで開発を行っています。
行いたいことは、DMLトリガによって入力画面のあるプログラム(例えばメモ帳など)を実行したいと思っているのですが、下記のサイトで調べた結果、xp_cmdshellではできそうもありません。
そこで、どうにかして入力画面のあるプログラムを実行したいと思っているのですが、なかなか見つからず困っています。
(セキュリティに関しては、無問題とします。)

SQL Server 2005でこのようなプログラムを作成できますか?
また、どのようにすれば良いでしょうか?
具体的なソース、参考サイト等ありましたら、教えてください。
よろしくお願いします。

参考サイト:http://support.microsoft.com/kb/323411/ja

Aベストアンサー

本来の質問からは相当乖離しているような気がしてきましたが。。
コンソールアプリケーションはその環境であれば動くはずです。
ファイルの書き出し先をマイドキュメントにしているようですが、C:\Tempなど普通のフォルダを指定して試してみてください。

SQL Serverがxp_cmdshellを実行するとき、質問者さんのユーザIDの権限で実行すると思っていませんか?
何も考えないでインストールしたのだったら、おそらくローカルシステムアカウントで実行されます。そのフォルダにアクセスする権限がなければファイルは書き出せません。

#念のため、ちなみに書かれていたものをコピペして、フォルダを変更してコンソールアプリケーションにして実行してみたら、ファイルは書き出されました。

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

QSQLServer2005のストプロでxp_cmdshellを使いvbsファイルを実行できない

ストプロ内でxp_cmdshellを使用し、vbsファイルを実行したいのですが実行できません。
vbsファイルはxp_cmdShellでキックされたらSQLサーバのデータをSELECTし、テキストファイルにSELECTで取得した行数だけ行を追加するという内容です。
vbsファイルはコマンドプロンプトから実行すると動くので正しいと思います。

ストプロにはvbsファイル実行の前後にtableのupdate作業があり、
その2つは行われます。しかし、書き出されるはずのデータがテキストファイルに書き出されません。
vbsファイルは実行されていないようですがエラーは出ず正常終了となり、
xp_cmdshell実行後の戻り値は0で成功となっています。
xp_cmdshellオプションは有効になっており、は混合モードでSysAdminの権限を持つユーザーで処理をしています。

また、ストプロではなく、SQLServerManagementStudioから下記のようにvbsファイル実行しようとした場合、エラーなく正常終了するのですがテキストファイルにデータは追加されていません。
 EXEC @result = xp_cmdshell 'Cscript c:\AddRow.vbs'
しかし、EXEC xp_cmdshell 'dir *.exe'は実行できます。

vbsファイルをxp_cmdshell で実行するときは何か特殊な記述が必要なのでしょうか。何がいけないのかわからず困っております。お気づきのことがありましたらご指摘いただけますようお願い致します。
以下にストプロの中身をを記述します。


BEGIN

  SET NOCOUNT ON;

-- テーブルのアップデート処理
  UPDATE table1 SET Status = 1
  WHERE Status = 0

--ファイル書き出しvbsの実行
  DECLARE @result int
  SET @result = 1
  EXEC @result = xp_cmdshell 'Cscript c:\AddRow.vbs'
--ここは下記のようにCscriptを抜いても試しましたがだめでした。
--EXEC @result = exec master..xp_cmdshell 'c:\AddRow.vbs'

  IF (@result = 0)
  BEGIN
--xp_cmdshellの実行が成功したときのみこの処理に入る予定。
--実際は実行されていないようだが@result が0なのでこの処理を行っている。
    UPDATE table1 SET Status = 2
    WHERE Status = 1
  END
END

ストプロ内でxp_cmdshellを使用し、vbsファイルを実行したいのですが実行できません。
vbsファイルはxp_cmdShellでキックされたらSQLサーバのデータをSELECTし、テキストファイルにSELECTで取得した行数だけ行を追加するという内容です。
vbsファイルはコマンドプロンプトから実行すると動くので正しいと思います。

ストプロにはvbsファイル実行の前後にtableのupdate作業があり、
その2つは行われます。しかし、書き出されるはずのデータがテキストファイルに書き出されません。
vbsファイルは実行...続きを読む

Aベストアンサー

当たり前ですが、このvbsはSQL Serverのサービスが実行します。

つまりSQL Serverのサービスを動かしているプロセスがvbsを実行出来なければいけません。もちろん、書き込みを行なうテキストファイルに対する権限も必要です。

「SQL Server構成マネージャ」でサービスを動かしているユーザを確認してください。このユーザでvbsが実行できるようにしてください。

Qテーブル名を[]でくくらないとエラーになってしまう

テーブル名を[]でくくらないとエラーになってしまいます

sqlserver 2008 express edition を利用しているのですが

テーブル名 やカラム名に[]でくくってSQL文を実行しないと
エラーが出てしまいます
例えば

select * from [table]  の様にしないといけません
これを
select * from table で実行できるようにしたいのです
どうしたらいいのでしょうか

会社ではsqlserver2005を利用しているので
2008からは[]でくくる必要になったのでしょうか

それとも初期設定で何かしないといけないのでしょうか
設定方法を教えて下さい

sqlserver management studio2008もインストール済みです

Aベストアンサー

「table」はSQLの予約語です。そのため初期設定などで、「table」をそのままSQL文に使用することは出来ません。これは他のRDBも同様です。
SQL SERVERでは[]で括ることで、予約語をオブジェクト名に出来ますが、おすすめは出来ません。
なお、ANSI/ISOの標準規格では「"(ダブルクォーテーション)」で括ることで、同様にエラーを回避できます。SQL SERVERでも初期設定でANSI/ISOと同様に「"」で括るモードにすることは出来ますが、それでも予約語である以上何らかの対応は必要です。

> 会社ではsqlserver2005を利用しているので
> 2008からは[]でくくる必要になったのでしょうか

そんなことはないはずです。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

QSELECT 文 GROUP での1件目を取得

非常に初歩的な事で恐縮ですが、
以下のデータを抽出するsql文の書き方を模索しています。
環境:SQLSERVER2005

| 列1| 列2 |
+---+---+
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
| 2 | F |
| 2 | G |
| 2 | H |
| 3 | X |
| 3 | Y |
| 3 | Z |

上記のテーブルがあるとします。
列1でグループした値で、1レコード目の列2を抽出したいのです。
出力結果としては、

列1列2
+--+--+
1,A
2,F
C,X

としたいのです。
列1でGROUPしてしまうと列2の内容を集約しないといけないので困っています。
ご教授いたけないでしょうか?

Aベストアンサー

SQL Server 2005では、Oracleでいう分析関数が実装されています。

select
列名1,
列名2
from
(select
rank() over(partition by 列1 order by 列2) as rk,
列1,列2
from 表名) as x
where rk=1


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング