数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

4
登录不会在可用性组之间同步
AlwaysOn组中有2台服务器。 每个同步数据库中的用户帐户都位于两台服务器上,而数据库实例级别的登录仅存在于其中一台服务器上。即一台服务器上缺少DBINSTANCE-> Security-> Logins。 因此,当发生故障转移时,我在第二台服务器上遇到登录失败(该服务器没有相应的实例级别登录名)。 我该如何克服这个问题?我是否应该以特殊方式设置用户帐户?

4
CREATE FILE遇到操作系统错误5(访问被拒绝。)
我正在尝试在SQL Server Management Studio中执行以下脚本: USE [master] GO CREATE DATABASE [test1] ON PRIMARY ( NAME = N'test1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf', SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) LOG ON ( NAME = N'test1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf', SIZE = 164672KB , MAXSIZE = …

2
在选择上获得固定值
我需要执行SELECT查询,以获取字段“ money”的值。该字段实际上在数据库中不存在。我只需要查询返回具有固定值的该字段;在这种情况下,以美元为单位。 如何在SELECT语句中返回常量值?
13 mysql 

2
SQL Agent如何以及何时更新next_run_date / next_run_time值?
我一直在研究T-SQL中的代码,以便使用msdb数据库中的sp_add_jobschedule proc将新日程表添加到SQL Agent作业中。当我添加新计划(通常在特定日期/时间运行一次)并立即查看sysjobschedules和sysschedules中的值时,我可以看到已添加新计划并将其绑定到SQL Agent的job_id工作。但是,next_run_date和next_run_time的值中有0。当我回来在2或3分钟内再次查看它们时,它们中仍然显示0。但是,当我在5或10分钟后再回来时,它现在可以正确显示与下一次计划运行相对应的日期和时间值。 所以我的问题是: 这些值多久更新一次? 更新这些值的过程是什么? 如果我要添加一个计划,例如未来1分钟,那么这是否意味着作业尚未运行,因为next_run_date / time还没有更新? 我用于添加新时间表的代码示例: exec msdb.dbo.sp_add_jobschedule @job_id = @jobID , @name = @JobName , @enabled = 1 , @freq_type = 1 , @freq_interval = 0 , @freq_subday_type = 0 , @freq_subday_interval = 0 , @freq_relative_interval = 0 , @freq_recurrence_factor = 0 , @active_start_date …


4
无法将MySQL数据输出到文件
我正在尝试将数据从MySQL表输出到文件,但出现权限错误: $ pwd /home/dotancohen $ mkdir in $ chmod 777 in/ $ mysql -ugs -p mysql> USE someDatabase; mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv'; ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES) mysql> 如果有问题的目录更改为777,那么MySQL用户为什么不能写该文件?有趣的是,我也无法写到/ tmp /。 编辑: 看起来数据库用户具有适当的MySQL权限: mysql> show grants; +----------------------------------------------------------------------------------+ | Grants for …

2
MySQL CAST与转换
假设我有一个VARCHAR(其中包含数字数据),我想将其用于简单的计算(向其中添加10)。根据有关CAST函数的MySQL文档,我可以使用CAST或CONVERT完成此操作: SELECT (CAST(field1 AS SIGNED)) + 10 FROM myTable; 要么: SELECT (CONVERT(field1,SIGNED)) + 10 FROM myTable; 从这个意义上说,CAST和CONVERT有什么区别?他们俩真的都在完成同一件事吗?
13 mysql 


1
MySQL分片与MySQL集群
仅考虑性能,MySQL集群能否击败自定义数据分片MySQL解决方案?分片=水平分区 当我提到分片时,我考虑的是在应用程序层中进行的分片,例如,在独立的MySQL实例之间平均分配记录。对于两个服务器,可能是(密钥mod 2)。
13 mysql  ndbcluster 


2
SQL Agent Powershell上下文参考
在我的新工作中,每个服务器上都有多个命名实例。例如 Server1 \ Dev Server1 \ DevIntegrated 服务器1 \质量检查 我的作品中有一个SQL PowerShell脚本,可以调用OS,调用它,Foo.exe但需要传递命令行参数(连接字符串)。每个实例上都将存在一个SQL Agent作业,其步骤为PowerShell类型,该步骤需要知道当前上下文是什么。即此执行从DevIntegrated开始。 我不希望每个脚本都以...开头 $thisInstance = "Dev" ...特别是因为在接下来的几个月中,当我们迁移到环境(新服务器和命名实例)时,我必须对其进行编辑。 如果启动SQLPS,则可以通过将Get-Location的结果切片和切块或运行来确定实例 (Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName 当SQL Agent启动PowerShell类型的作业时,它将在C:\ windows \ system32中启动,并且该Get-Location路由不起作用,因为它不在SQLSERVER上下文中。我可以更改为该上下文,但是我将位于SQL Server的“根目录”,并且不知道我应该在哪个实例中使用。Invoke-Sqlcmd由于相同的原因,使用路由也不起作用(从技术上讲,它在那里超时了)不是默认实例) 据我所知,我已经列举了所有可以进入工作日志的基本“内容”,但似乎没有任何显示 SQLSERVER:\SQL\Server1\DevIntegrated Get-ChildItem Get-Host Get-Location Get-Process Get-PSDrive Get-PSProvider Get-Service Get-TraceSource Get-Variable Get-Process似乎我可以使用它以及通过敲击实例和匹配spid来拼凑事物的一些巫术,但这听起来像是来自地狱的血腥骇客。我必须缺少一些基本的东西,有人可以阐明吗? 研究了PowerShell的替代方法 我调查了其他工作类型,但没有得到满意的解决方案。研究表明,SQL代理下列出的PowerShell为SQLPS,并通过右键单击该代理来启动它的实例,从而自动将我放到正确的位置。如前所述,只有当我将交互式代码粘贴到工作步骤中时,我才知道其中的区别。 作业类型的OS使我进入了相同的状态,因为我无法找到确定哪个实例将我放入命令外壳的方法。当然,我可以sqlcmd并获取的值,@@servername但是如果我知道启动sqlcmd的连接,则无需查询数据库;) 如果启用了TSQL,TSQL可能会起作用,xp_cmdshell但是我不确定它们是否已启用---政府工具,并且在使用非默认设置时可能会感到困惑。即便如此,我仍然沉迷于动态SQL,并失去了PowerShell提供的许多表达能力。 虽然有点麻烦,但我认为第一步要定义一个变量,然后将其传递给后续步骤,但是研究发现这篇文章处理多个作业步骤(BOL) 作业步骤必须是独立的。也就是说,作业无法在作业步骤之间传递布尔值,数据或数字值。但是,您可以使用永久表或全局临时表将值从一个Transact-SQL作业步骤传递到另一步骤。您可以使用文件将运行可执行程序的作业步骤中的值从一个作业步骤传递到另一作业步骤。 我不能使用常见的技巧,例如Foo.exe寻找众所周知的文件/环境变量/注册表设置,因为那样会阻止跨实例的并发执行。 …

5
在Oracle中,如何将sequence.nextval保存在变量中以在多个插入中重用?
我正在编写一个脚本,以用测试数据填充一些表。 我想写类似下面的内容,但我不知道该怎么做(我是Oracle 11g) SET ENABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE SET DISABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE INSERT INTO USERS (ID, USR_NAME) VALUES (:ENABLED_USER_ID, 'ANDREW'); INSERT INTO CAR (CAR_ID, CAR_NAME, USR_ID) VALUES (CARSEQ.NEXTVAL, 'FORD', :ENABLED_USER_ID); INSERT INTO USERS (ID, USR_NAME) VALUES (:DISABLED_USER_ID, 'ANDREW'); INSERT INTO CAR (CAR_ID, CAR_NAME, USR_ID) VALUES (CARSEQ.NEXTVAL, 'FORD', …


2
约束-一个布尔行为true,所有其他行为false
我有一列: standard BOOLEAN NOT NULL 我想强制执行True,其余所有都设置为False。根据此约束,没有FK或其他任何内容。我知道我可以用plpgsql完成它,但这似乎像是一把大锤。我更喜欢a CHECK或UNIQUE约束。越简单越好。 一行必须为True,不能全部为False(因此,插入的第一行必须为True)。 该行将需要更新,这意味着我必须等待检查约束,直到更新完成,因为所有行都可能先设置为False,然后再设置为True。 products.tax_rate_id和之间有一个FK tax_rate.id,但与默认税率或标准税率无关,用户可以选择默认税率或标准税率来轻松创建新产品。 PostgreSQL 9.5(如果重要)。 背景 该表是税率。税率之一是默认税率(standard因为默认税率是Postgres命令)。添加新产品时,将对产品应用标准税率。如果没有standard,则数据库必须进行猜测或进行各种不必要的检查。我认为,简单的解决方案是确保存在standard。 上面的“默认”是指表示层(UI)。有一个用于更改默认税率的用户选项。我或者需要添加额外的检查以确保GUI /用户不会尝试将tax_rate_id设置为NULL,或者只是设置默认税率。

1
SQL Server / T-SQL是否支持行连续以拆分长字符串?
有时我的SQL脚本包含一个或多个超长(有时甚至是愚蠢的长)字符串。通常,这些是VARBINARY表示文件/程序集的文字/常量,但有时它们是文本。 字符串很长的主要问题是某些文本编辑器不能很好地处理它们。例如,我有一个VARBINARY我在CREATE ASSEMBLY [AssemblyName] FROM 0x....语句中使用的文字,而程序集本身的大小刚好超过1 MB,相当于文本文件中的刚好超过200万个字符,因为每个字节都需要用十六进制表示法表示两个字符(例如0x1F= a 1和an F)。SQL Server Management Studio(SSMS)不能很好地处理此问题,并且在我尝试滚动浏览该行时挂起了几秒钟。实际上,某些版本(不确定是否还会发生这种情况)甚至在打开脚本时会显示关于长行的警告,该脚本的长度至少有一行。 第二个问题是,在没有启用自动换行功能的编辑器中使用或在线发布时,会使格式复杂化。这里的问题是,水平滚动条的滑块非常狭窄,即使将其稍微移动通常也会使非超长文本滚动到视线之外。 现在,T-SQL不再使用换行符甚至分号来终止命令(尽管从SQL Server 2005开始,分号是首选/推荐的分号)。因此,由于SQL Server知道如何解析每个语句以使其知道何时结束,因此似乎将长行拆分为仅由newline/ carriage-return+ 分隔的多行line-feed似乎不是不合理的。但这两种情况都不起作用。 PRINT 'Line1 Line2'; 返回(在“消息”标签中): Line1 Line2 这很有意义,因为换行符位于文字/常量内。但是,对于a执行此操作VARBINARY也不起作用。 PRINT 0x1234 5678; 给我一个错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.