数据库管理员

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

2
自定义涉及数组的jsonb键排序顺序
我在PostgreSQL中有一张表,里面有一些数据: create table t2 ( key jsonb, value jsonb ); INSERT INTO t2(key, value) VALUES ('1', '"test 1"') ,('2', '"test 2"') ,('3', '"test 3"') ,('[]', '"test 4"') ,('[1]', '"test 5"') ,('[2]', '"test 6"') ,('[3]', '"test 7"') ,('[1, 2]', '"test 8"') ,('[1, 2, 3]', '"test 9"') ,('[1, 3]', '"test 10"') ,('[1,2,4]', …


2
SSIS数据流数据访问模式-“表或视图”与快速加载的意义何在?
使用SQL Server商业智能开发工作室,我做了很多平面文件到OLE DB目标数据流,以将数据导入到我的SQL Server表中。在OLE DB目标编辑器中的“数据访问模式”下,它默认为“表或视图”,而不是“表或视图-快速加载”。有什么区别; 我唯一可以看出的区别是,快速负载可以更快地传输数据。
9 ssis 

1
按计划备份和截断事务日志的最佳方法
我不是DBA,但是无论如何,我必须戴上DBA的帽子,并在SQL Server实例上设置维护计划。 因此,一段时间以来,我一直在SSIS过夜过程中运行“ 执行SQL任务”以执行备份-基本上运行master.dbo.xp_create_subdir以确保目标文件夹存在,然后运行BACKUP DATABASE [DbName] TO DISK = 'G:\Backups\DbName\DbName.bak' WITH INIT。 每当该任务失败时,其余过程都会中止,并且我会收到通知,并于第二天早上来通知事务日志的驱动器已满,因此我将手动截断它们并继续前进。 ..直到故事重演,并且事务日志再次超出了可用磁盘空间。 “手动截断”脚本如下所示: use Staging; alter database Staging set recovery simple alter database Staging set recovery full dbcc shrinkfile ('Staging_log', 0, truncateonly); go 因此,我对此感到厌倦,因此决定尝试正确地做事,并按照此处的步骤创建一个实际的维护计划: 问题是,我之前从未做过此事,所以我有几个问题: 像这样备份事务日志会自动截断它们,还是我需要做其他事情? 可以同时运行数据和事务日志备份吗?如果没有,那么执行此操作的正确方法是什么? 备份文件将在一夜之间被另一个过程获取,该过程将捕获服务器上的所有文件并将它们存储在其他位置-2天后使备份集过期是个好主意吗?我是否需要使它们全部过期? 清理任务分别删除的子文件夹下的“旧” .bak和.trn文件G:\Backups。那有意义吗? 最好在SSIS中执行此操作,以便在备份失败时/我可以在ETL中失败吗?还是我的ETL流程应该在乎? 抱歉,如果一个帖子中有太多问题,如果需要,我将编辑并询问多个问题-我认为它们都是紧密相关的。

3
我是否应该仅出于PK目的将自动递增/ IDENTITY字段添加到交叉引用表中?
我将以下交叉引用表添加到我的SQL Server托管的数据库中: company_id bigint not null (FK) org_path nvarchar (2048) not null 该company_id字段引用id另一个表(其中是主键)中的字段。 假设还可以有多个具有相同记录的记录,则company_id任何主键都必须使用两个字段。但是,由于org_pathSQL Server太长,因此无法使用这两个字段创建密钥。 至于org_path,这是它存在的唯一表。对该表的查询极有可能会询问所有条目或的所有org_path条目company_id。或者换种说法,该表是否会被查询似乎令人怀疑org_path。此外,它不太可能org_path会被更新,更不可能被插入并且可能很少被删除。 我希望总行数可以低到几千。 另外,这nvarchar (2048)是因为该值必须模仿第三方数据库中的值。一个典型的例子是 \Translation Providers\[customer name]\[order name]\ 并可能包含变音符号。 所以我的问题是这样的:添加自动递增id字段并将其与company_id主键结合使用会更有效,还是会增加不必要的开销-并且company_id作为另一个表中主键的事实是否具有任何意义?效果在这里?

1
我们是否仍应使用QUOTENAME防止注入攻击?
我今天正在看一个旧的存储过程,发现它quotename在输入参数上使用了。经过一番挖掘以找出确切的功能后,我遇到了这个站点。我现在了解它的作用以及如何使用它,但是该网站称它被用作SQL注入攻击的缓解措施。当我过去使用asp.net开发直接查询数据库的应用程序时,我会使用ADO.Net参数将用户输入作为文字值传递,而从不真正担心在存储过程中对其进行保护。 我现在正在编写一个存储过程,该存储过程将由我不编写的应用程序使用,因此我需要在过程级别尝试防止注入攻击,这是quotename最好的方法,或者是否有更新的功能/更好的方法方法? 使我了解这种思维模式的代码(@parm1是用户输入参数): 'SELECT project [Project], project_desc [Description], customer [Customer], cpnyid [Company] FROM PJPROJ (nolock) where project like ' + quotename(@parm1,'''') + '

4
字母数字与字母数字字符串分开
我有一个字母数字字符串作为输入,我想从中得到两个结果: 删除所有数字的字符串 和 一个整数,它是输入字符串中所有数字的总和。 例如,对于此输入: GR35hc7vdH35 我想要以下输出: | Col1. | Col2 | ---------------------------------- | GRhcvdH | 23 | 怎么办

2
层次结构CLR是开源的吗?
内置的architectureid是CLR,它以有效的二进制形式存储路径,并提供其他有用的功能。 不幸的是,表示路径的深度是有限的,对于一棵二叉树来说大约是1427。我想为必然要达到此限制的复杂的现有应用程序增加该限制。我不想更改类型的界面。我不相信我可以开始更改类型的接口,而不会在所有必须更改的代码中引入细微的错误。 从理论上讲,我可以创建一个“ binhierarchyid” CLR UDT,它实现与hierarchicalid相同的接口,但仅支持二进制树。那应该使我的深度达到〜7000,同时仍保持在900字节的限制之内。不确定这项工作有多大。 是否可以在任何地方找到该architearchid CLR的来源,以便我可以基于它创建更深层次的结构呢?

3
执行计划未使用INDEX,而是使用表扫描
我知道使用索引或表扫描时,SQL Server使用统计信息来查看哪个更好。 我有一个2000万行的表。我在(SnapshotKey,Measure)上有一个索引,并且此查询: select Measure, SnapshotKey, MeasureBand from t1 where Measure = 'FinanceFICOScore' group by Measure, SnapshotKey, MeasureBand 查询返回500k行。因此,查询仅选择表的2.5%的行。 问题是为什么SQL Server不使用我拥有的非聚集索引,而是使用表扫描? 统计信息已更新。 值得一提的是查询性能还是不错的。 表扫描 强制索引 表/索引结构 CREATE TABLE [t1]( [SnapshotKey] [int] NOT NULL, [SnapshotDt] [date] NOT NULL, [Measure] [nvarchar](30) NOT NULL, [MeasureBand] [nvarchar](30) NOT NULL, -- and many more fields …

1
关于tempdb版本存储的问题
我们今天遇到了一个错误: 错误:3967,严重性:17 从我可以看出,它基本上是“完整版商店”。这引起了一些我很难回答的问题,因为在我的商店里,我们从未遇到过此错误: 如果有预设的最大大小(基于总的tempdb大小或其他),它是动态的吗? 有没有可以使它动态化的设置? 我们可以基于此设置警报吗?(即用于跟踪大小的DMV等)

1
为什么MSDB数据库值得信赖?
TRUSTWORTHY如果您不小心,该设置可能会非常危险,除特殊情况外,建议保持关闭状态。但是默认情况下,MSDB数据库TRUSTWORHTY设置ON默认。我很好奇为什么? 我已经在BOL中阅读了此条目 注意默认情况下,MSDB数据库的TRUSTWORTHY设置设置为ON。使用默认值更改此设置可能会导致使用MSDB数据库的SQL Server组件出现意外行为。 但是我对细节感到好奇。为什么MSDB需要专门TRUSTWORTHY打开电源?它使用什么功能?

1
设计一个友谊数据库结构:我应该使用多值列吗?
假设我有一个名为的表User_FriendList,它具有以下特征: CREATE TABLE User_FriendList ( ID ..., User_ID..., FriendList_IDs..., CONSTRAINT User_Friendlist_PK PRIMARY KEY (ID) ); 让我们假设该表包含以下数据: + ---- + --------- + --------------------------- + | ID | 用户名 | Friendlist_IDs | + ---- + --------- + --------------------------- + | 1 | 102 | 2:15:66:35:26:17:| + ---- + --------- + --------------------------- + …

4
SQL备份与IT常规夜间服务器备份有何不同?
我们的IT部门每晚都会备份整个服务器(此服务器上安装了一个SQL Server实例),如果出现问题,该服务器应该备份该服务器以及整个网络。 因此,经理问我的完整,差异和日志SQL备份与IT部门备份的备份相比有什么重要意义?为了节省我们服务器上的更多空间,而不是将这些文件保留几个星期并删除它们,她认为IT会提供它们! 我知道这是不对的,因为我可以使用日志备份恢复到最近30分钟,IT会在第二天恢复它,但这是唯一的区别吗? 由于我将数据库备份文件保存/发送到同一服务器上,因此IT部门将还原它们,但是如果我的维护计划中没有这些备份作业,则IT部门可以还原SQL实例而无需任何表,事务...等。我说对了吗? 任何建议将不胜感激。

1
SQL Server-导出没有主键的大表
我需要在SQL Server和MySQL之间没有主键的情况下同步约5亿行的大型表。该表仅具有聚集的复合非唯一索引。 我确实在服务器之间建立了ODBC连接,但是约800万行的导入需要大约45分钟的时间,因此,我认为较大的单次导入将是不合理的,因为在任何时候都可能发生中断。我无法更改现有的表结构,可以添加其他表。进一步阅读后,对于大表,则不可以选择offset / fetch。由于我没有唯一键,因此“选择...在...和...之间的x”不是一个选项。 如何批量导出保证包含所有行的表?我的问题是,由于集群键不是唯一的,因此其排序后的顺序不能保证物理行在连续查询之间具有相同的顺序,而在所有列之后的排序将花费很长时间。以及您如何建议通过ODBC或CSV文件迁移批次?

2
数据仓库:如何查询每日快照?
我有一些不是时间序列的数据库快照。例如: 快照第一天: +----+---------------+------------+------------+ | ID | Title | Category | Date | +----+---------------+------------+------------+ | 1 | My First Post | helloworld | 2015-01-01 | +----+---------------+------------+------------+ 快照第2天(今天添加了新帖子): +----+----------------+------------+------------+ | ID | Title | Category | Date | +----+----------------+------------+------------+ | 1 | My first post | helloworld | 2015-01-01 | | 2 …

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.