我是使用 MSSQL 的新手,目前有 2012 版本。我要做的是为包含的数据库创建一个用户,并仅授予该用户访问该数据库的权限。
我将使用准备好的语句从 JAVA 调用此 SQL。
有什么地方可以查找 SQL Server 2012 中的失败事务吗?
我正在使用扩展事件来跟踪我们的应用程序使用的语句。我创建了一个会话来收集我想要的信息,除了我还想知道所使用参数的实际值。
我在非生产环境中执行此跟踪,跟踪影响的任何性能都是可以接受的。
所有查询都源自 Hibernate,并以以下形式参数化:
SELECT a, b, c From Customer where CustomerId = @P0
Run Code Online (Sandbox Code Playgroud)
这是我的会话设置。
CREATE EVENT SESSION [TracingForStatements] ON SERVER
ADD EVENT sqlserver.sp_statement_completed (
ACTION (
sqlserver.session_id,
package0.collect_system_time,
sqlserver.transaction_id,
package0.event_sequence
)
WHERE (
sqlserver.database_id=555
)
)
ADD TARGET package0.ring_buffer(SET max_memory= 128000)
WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 1 SECONDS)
Run Code Online (Sandbox Code Playgroud)
如何捕获捕获语句中使用的参数的实际值?是否可以?
--编辑(解决方法):将事件更改为 rpc_completed 为我提供了从 Hibernate 调用的完整 sql 命令(包括所有参数值)。对于其他情况,如果可能,知道如何捕获参数值仍然很好。
SQL 管理工作室允许为所有 db 对象创建脚本,但是到目前为止我找不到正确编写模式或用户脚本的方法。用户对架构的权限不包含在创建的脚本中。我做错了什么还是微软她有点马虎?
Google 搜索在如何查找没有聚集索引的表上产生了数百万次点击,PK 通常是表的聚集索引。然而,一个表很容易有一个自然键作为聚集索引,和一个非聚集代理索引,如标识列。
如何在没有定义主键的情况下查找数据库中的所有表?我在这个数据库中有 245 个表:手动检查效率非常低。
我有一个在托管服务帐户下运行的 SQL Server 2012 实例。我已经用一个帐户配置了数据库邮件,并试图发送一封测试电子邮件,但我在服务器的事件日志中收到了一些错误:
数据库引擎实例=MYINSTANCE;邮件PID=2132;错误消息:数据库更新失败。原因:对象“sysmail_logmailevent_sp”、数据库“msdb”、架构“dbo”上的 EXECUTE 权限被拒绝。
数据库引擎实例=MYINSTANCE;邮件PID=2212;异常类型:Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException 消息:数据库读取失败。原因:对象“sp_readrequest”、数据库“msdb”、架构“dbo”上的 EXECUTE 权限被拒绝。数据:System.Collections.ListDictionaryInternal TargetSite:Microsoft.SqlServer.Management.SqlIMail.Server.Objects.QueueItem GetQueueItemFromCommand(System.Data.SqlClient.SqlCommand) HelpLink:NULL 来源:DatabaseMailEngine
如果我将运行 SQL Server 进程的帐户设置为系统管理员,则此错误将消失,并且邮件发送成功。但是,我所做的所有研究都表明,赋予此帐户DatabaseMailUserRole在msdb数据库中的角色就足够了。我已经这样做了,但仍然收到相同的错误。
我查看了 BOL,但找不到任何东西。
我管理的几台服务器在 system_health XE 会话中记录了很多事件。
error_code 5023 应该是(系统错误代码):
ERROR_INVALID_STATE 5023 (0x139F)
The group or resource is not in the correct state to perform the requested operation.
Run Code Online (Sandbox Code Playgroud)
我在事件安全日志和 SQL Server 日志中都没有登录失败事件。
在玩 AG 设置时,我启动了 WSFC,并在一个名为 DevClusterOnline 的可用性组中配置了两个节点。两个节点(DEV-AWEB5 主节点,DEV-AWEB6 辅助节点)都运行 Windows Server 2008 R2。
如果我检查我的 AG 的健康状况,我会得到:

运行下面的查询将返回此结果集:

select
ar.replica_server_name,
availability_group_name = ag.name,
ar.availability_mode_desc,
ar.failover_mode_desc
from sys.availability_replicas ar
inner join sys.availability_groups ag
on ar.group_id = ag.group_id
order by availability_group_name, replica_server_name;
Run Code Online (Sandbox Code Playgroud)
如果我断开 DEV-AWEB5,我无法连接到组侦听器 (DevListener),但是我可以 ping 它并且它会响应我的 ping。副本 - DEV-AWEB6 进入 RESOLVING 状态,我的数据库无法访问。但是,我可以手动进入 Management Studio 并将故障转移设置为 DEV-AWEB6,然后我再次启动并运行,DevListener 将再次接受连接。
考虑到这些事实证实故障转移确实有效,我已经同步提交并配置了自动故障转移,我不知道如果我的设置出现故障怎么办。
当我断开 DEV-AWEB5 的连接时,我希望我的副本会保持连接,因此 DevListener 也会保持连接。我希望自动故障转移将允许我透明地连接到 AG 侦听器。从最终用户的角度来看,使用 Web 系统应该不会注意到其中一台数据库服务器出现故障。
我被困在这里,有人能告诉我我做错了什么吗?
我想在同一个 SqlServer 中制作数据库的副本。所以,当我使用复制数据库向导时,它会抛出错误:(我用测试数据库做了这个步骤,它工作正常!!!)
配置:
用户
方法:“使用 SQL 管理对象方法”
为目标数据库选择新名称。
错误:
标题:复制数据库向导
作业失败。有关详细信息,请检查目标服务器上的事件日志。
- - - - - - - - - - - - - - - 纽扣:
好的
在事件日志中:
系统
- 提供者
[名称] SQLSERVERAGENT
- 事件 ID 208
[限定词] 16384 Level 3 Task 3 关键词 0x80000000000000
- 时间创建
[ SystemTime] 2014-05-07T06:23:11.000000000Z EventRecordID 123672 Channel Application Computer Server1 Security
事件数据
CDW_Server1_Server1_3 0x666DE807F406D7438C65B09171211D7B
失败 2014-05-07 10:52:50 作业失败。作业由用户 sa 调用。运行的最后一步是步骤 1 (CDW_Server1_Server1_3_Step)。
日志文件的最后几行:
OnProgress,Server1,NT Service\SQLSERVERAGENT,Server1_Server1_Transfer Objects 任务,{066BD090-26F3-45D8-AD60-B207D56D44CE},{1CF7B713-F747-45FB-8936-5522651,E0C76A,580C70A /7/2014 10:08:46 AM,0,0x,1 个数据库的数据库传输失败。OnProgress,Server1,NT Service\SQLSERVERAGENT,Server1_Server1_Transfer Objects 任务,{066BD090-26F3-45D8-AD60-B207D56D44CE},{1CF7B713-F747-45FB-8936-5522651,E0C76A,580C70A /7/2014 …
我有一个 Windows Server 2012 R2 域控制器和一个数据库服务器 (W2K12R2/SQL Server 2012)。
作为允许的用户组,我已授予组“域管理员”系统管理员权限。
但是不知何故,任何域管理员都无法连接到该 SQL Server,但是当我将域管理员用户直接添加为允许的用户时,它确实可以工作。活动目录确实有效。RDP-登录有效。我错过了什么吗?
有谁知道如何授予对整个组“域管理员”的访问权限?
错误信息是:
服务器名称:SRV-DB 错误编号:18456 施韦雷格勒:14 状态:1 代码行:65536
在事件日志中它说(翻译):
检查基于令牌的服务器访问时发生基础结构故障时出错。
状态为 "1" 。我以域管理员身份使用 RDP 登录到该数据库服务器。我必须以“以管理员身份运行”明确启动 SSMS。然后我可以访问“本地主机”。如果我不以管理员身份启动 SSMS,那么我就不能这样做。我认为加入“域管理员”组就足够了。
sql-server-2012 ×10
sql-server ×7
permissions ×2
connectivity ×1
primary-key ×1
scripting ×1
ssms ×1
transaction ×1