スクリプトを使用してSQL Serverレプリケーションを作成しています。実行しようとすると
The job failed. Unable to determine if the owner (STAR\moorer7) of job L3BPT2M-Atlas-14 has server access (reason: Could not obtain information about Windows NT group/user 'STAR\moorer7', error code 0x5. [SQLSTATE 42000] (Error 15404)).
これは、レプリケーションを定義するスクリプトによって作成されたジョブです。
これをデバッグするにはどうすればよいですか?
Active Directoryは、SQLエージェントへのアクセスを拒否しています。エージェントは、STARドメインコントローラーによって認識されるアカウントで実行する必要があります。
私にとって、ジョブはDOMAIN\Administratorの下で実行され、エラーメッセージ"The job failed. Unable to determine if the owner (DOMAIN\administrator) of job Agent history clean up: distribution has server access (reason: Could not obtain information about Windows NT group/user 'DOMAIN\administrator', error code 0x5. [SQLSTATE 42000] (Error 15404)).
で失敗しました。これを修正するには、失敗した各ジョブの所有者をsa
に変更しました =その後、問題なく動作しました。ジョブはレプリケーションクリーンアップに関連していましたが、手動で追加されたのか、レプリケーションセットアップの一部として追加されたのかわかりません-関与していなかったので、わかりません。
仮想マシンのテスト環境で同様のエラーが発生しました。 VMテンプレートからの複製によりマシン名が変更された場合、このエラーが発生する可能性があります。
コンピューター名がOLDからNEWに変更された場合。
ジョブは次のストアドプロシージャを使用します。
msdb.dbo.sp_sqlagent_has_server_access @login_name = 'OLD\Administrator'
これはこれを使用します:
EXECUTE master.dbo.xp_logininfo 'OLD\Administrator'
このSQLエラー15404が発生します
select text from sys.messages where message_id = 15404;
Could not obtain information about Windows NT group/user '%ls', error code %#lx.
状況下では正しいと思います。 SQLログインを再作成するスクリプトをVM clone/deploymentプロセスに追加しました。
私の場合、SQL Server 2008 R2でIS_ROLEMEMBER()
関数を使用しようとすると、このエラーが発生していました。この関数は、SQL Server 2012より前では無効です。
この関数の代わりに私は
select 1
from sys.database_principals u
inner join sys.database_role_members ur
on u.principal_id = ur.member_principal_id
inner join sys.database_principals r
on ur.role_principal_id = r.principal_id
where r.name = @role_name
and u.name = @username
かなり冗長ですが、仕事は完了です。
この問題を解決しました。私の場合、両方のDNSサーバーがGoogle DNSであったため、ドメインコントローラーにアクセスできませんでした。
この問題のチェックリストに追加するだけです。
公開スクリプトを正常にDBに展開するには、VPNに接続する必要がありました。
私は同じ問題を抱えていました。これは、ADでロックアウトされているSQLサービスを実行するドメインログインが原因であることが判明しました。ロックアウトは、間違ったパスワードを使用した別の目的でのサービスアカウントの無関係な使用が原因で発生しました。
SQL Agentログから受信したエラーには、サービスアカウントの名前は記載されておらず、認証できないユーザー(ジョブ所有者)の名前のみが記載されていました(サービスアカウントを使用してADを確認するため)。
この場合、SQL ServerとSQL Agentが実行されていたWindowsサービスアカウントは、Active Directoryでロックアウトされていました。