数据库管理员

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

9
使用连接字符串从命令行连接到SQL Plus
假设我有一个Oracle数据库。我的用户名= x,密码= y,数据库= z。我也知道端口= a,SID = b,主机名= c。 那么,我该如何正确连接?我使用了很多选项,例如: sqlplus x/y@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=c)(PORT=a))(CONNECT_DATA=(SID=z)(SERVER=DEDICATED)))' sqlplus (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=c)(PORT=a))(CONNECT_DATA=(SID=b))) 提交这些命令行通常会给我返回错误消息,例如: ORA-12560:TNS:协议适配器错误 ORA-12514:TNS:侦听器当前不知道服务 提前谢谢了!!
41 oracle  sqlplus  string 

3
重建并重新索引所有内容后,为什么我的数据库仍然碎片化?
我有一个数据库,我试图通过运行以下T-SQL对所有表进行碎片整理: SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables 然后将输出复制并粘贴到新的查询窗口中并运行它。我没有任何错误,但是仍然有碎片。我也尝试单独运行两个命令,但仍然有碎片。注意:REORGANIZE Aaron 已使我意识到这是不必要的,并且我知道可以使用动态sql来自动执行此操作。 我运行此命令以确定我仍然有碎片: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE avg_fragmentation_in_percent > 0 我得到: database_id object_id index_id partition_number …

10
如何使用SELECT INTO复制表但忽略IDENTITY属性?
我有一个带有标识列的表说: create table with_id ( id int identity(1,1), val varchar(30) ); 众所周知, select * into copy_from_with_id_1 from with_id; 也会导致copy_from_with_id_1的身份也为id。 以下堆栈溢出问题提到显式列出所有列。 我们试试吧 select id, val into copy_from_with_id_2 from with_id; 糟糕,即使在这种情况下,id也是一个标识列。 我想要的是一张桌子 create table without_id ( id int, val varchar(30) );

2
为什么更改声明的连接列顺序会引入排序?
我有两个表,它们具有相同的命名,类型和索引键列。其中一个具有唯一的聚集索引,另一个具有非唯一索引。 测试设置 设置脚本,包括一些实际的统计信息: DROP TABLE IF EXISTS #left; DROP TABLE IF EXISTS #right; CREATE TABLE #left ( a char(4) NOT NULL, b char(2) NOT NULL, c varchar(13) NOT NULL, d bit NOT NULL, e char(4) NOT NULL, f char(25) NULL, g char(25) NOT NULL, h char(25) NULL --- and a …


6
我的教授告诉我,“ COUNT”不算重复项
在大学里,我的教授今年教我这个SQL语句: SELECT COUNT(length) FROM product 将返回2以下数据集: | product | |id | length | code | |-------------------| | 1 | 11 | X00 | | 2 | 11 | C02 | | 3 | 40 | A31 | 她说COUNT不算重复,以此为证。 我告诉我的教授,我认为她做错了。她回答我,某些DBMS可能会或可能不会计算重复项。 在尝试了许多DBMS之后,我再也没有找到具有这种行为的数据库管理系统。 该DBMS是否存在? 教授有什么理由教这种行为吗?甚至不提其他DBMS的行为可能有所不同? 仅供参考,此处提供课程支持(法语)。有关的幻灯片在第10页的左下角。
40 dbms 

3
如何授予单个存储过程的执行权限?
通常,当我创建存储过程时,我将以下内容用作排序模板 Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end 有没有一种方法可以在我使用该存储过程时仅授予该存储过程执行权限? 例如... Grant execute [User_Execute] ...但是仅用于此存储过程? 我见过其他一些类似的问题,但它们似乎都涉及所有存储过程,而不仅仅是一个,也没有见过可以在create procedure脚本中指定权限的问题。即使是有关如何在不使用GUI的情况下为特定存储过程设置权限的答案,也将受到欢迎。 编辑 最佳答案肯定会指出正确的方向,这本质上就是我要寻找的东西,我没想到要对命令进行批处理,而这正是我最终要做的,将命令与存储过程一起进行。无论如何,我认为它非常漂亮。 Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
40 sql-server 

3
参数嗅探vs变量vs重新编译vs优化未知
因此,我们有一个长时间运行的进程,导致今天早晨出现问题(30秒+运行时间)。我们决定检查是否应该归因于参数嗅探。因此,我们重写了proc并将输入的参数设置为变量,以消除参数嗅探。一种尝试/正确的方法。Bam,查询时间得到改善(不到1秒)。在查看查询计划时,在原始索引未使用的索引中发现了改进。 只是为了验证我们没有得到误报,我们对原始proc进行了dbcc freeproccache,然后重新运行以查看改进的结果是否相同。但是,令我们惊讶的是,原始过程仍然运行缓慢。我们再次使用WITH RECOMPILE进行了尝试,但仍然很慢(我们在对proc的调用以及在proc自身内部尝试了重新编译)。我们甚至重新启动了服务器(显然是dev框)。 所以,我的问题是...当我们在空的计划缓存上收到相同的慢查询时,怎么应该怪参数嗅探呢?snif应该没有任何参数? 我们是否会受到与计划缓存无关的表统计信息的影响?如果是这样,为什么将传入参数设置为变量会有所帮助呢? 在进一步的测试中,我们还发现在proc DID的内部插入OPTION(优化未知)会获得预期的改进计划。 因此,你们中有些人比我聪明,您能否提供一些线索,以了解产生这种类型结果的幕后情况? 另一个要注意的是,慢速计划也有理由提前中止,GoodEnoughPlanFound而快速计划在实际计划中没有早期中止原因。 综上所述 从传入参数中创建变量(1秒) 重新编译(30秒以上) dbcc freeproccache(30+秒) 选项(为不知道而优化)(1秒) 更新: 请在此处查看慢速执行计划:https: //www.dropbox.com/s/cmx2lrsea8q8mr6/plan_slow.xml 在此处查看快速执行计划:https : //www.dropbox.com/s/b28x6a01w7dxsed/plan_fast.xml 注意:出于安全原因,表,架构,对象名称已更改。

1
间歇性MySQL崩溃,错误为“致命错误:无法为缓冲池分配内存”
在编辑中添加,2013-05-29:因为这是一个很长的问题和讨论,所以这里是问题和解决方案的简短摘要。我在小型Linux服务器(1 GB内存)上运行MySQL和Apache时遇到问题。Apache一直要求更多的内存,因此,操作系统总是杀死MySQL来重新获得其内存。 解决方案是用Lighttpd替换Apache。完成此操作后,服务器上的内存使用情况已经完全稳定了几个月,而且还没有发生任何类型的崩溃。编辑结束 我是小型虚拟服务器的初学者系统管理员。服务器的主要功能是运行用PHP编写的开源Moodle课程管理系统软件。它依赖于数据库(在本例中为MySQL)和Web服务器(在本例中为Apache)。 该服务器正在运行64位CentOS 5.8版(最终版),具有1 GB内存和200 GB磁盘,内核版本为2.6.18-308.8.2.el5xen。MySQL版本是版本14.14 Distrib 5.5.25,适用于使用readline 5.1的Linux(x86_64)。 我不认为Moodle软件是MySQL的重度用户。当前,只有大约十个教师可以访问它,并且当我使用bzip2转储并压缩整个数据库时,生成的转储大小小于1 MB。 我几个月前就建立了系统。Apache服务器一直保持稳定,但是MySQL崩溃了好几次。我尝试从Web上了解最佳配置,而上次更改/etc/my.cnf文件时,我/usr/share/doc/mysql55-server-5.5.25/my-large.cnf以MySQL随附的文件为例。该文件说这是针对具有512 MB内存的系统的,所以我认为使用与内存相关的配置参数对该系统来说是安全的。(我之前用较小的数字配置了MySQL的与内存相关的参数,我认为这可能导致崩溃。尽管仍然发生崩溃,但现在系统至少要快一些。)这些是当前的内容/etc/my.cnf: # /etc/my.cfg # The main and only MySQL configuration file on [WEBSITE ADDRESS REDACTED]. # Last updated 2012-09-23 by Teemu Leisti. # Most of the memory settings are set to be the same as the …

2
DBA对SSAS有什么了解?
我已经看过很多有关SSAS业务方面的材料,但是关于管理和管理的重要方面却不是很多。 从管理SQL Server Analysis Services实例的角度来看,工作中的DBA必须了解什么才能正确有效地管理SSAS?
40 sql-server  ssas 


3
使用WHERE IN进行删除操作期间发生意外扫描
我有一个类似以下的查询: DELETE FROM tblFEStatsBrowsers WHERE BrowserID NOT IN ( SELECT DISTINCT BrowserID FROM tblFEStatsPaperHits WITH (NOLOCK) WHERE BrowserID IS NOT NULL ) tblFEStatsBrowsers有553行。 tblFEStatsPaperHits已获得47.974.301行。 tblFEStatsBrowsers: CREATE TABLE [dbo].[tblFEStatsBrowsers]( [BrowserID] [smallint] IDENTITY(1,1) NOT NULL, [Browser] [varchar](50) NOT NULL, [Name] [varchar](40) NOT NULL, [Version] [varchar](10) NOT NULL, CONSTRAINT [PK_tblFEStatsBrowsers] PRIMARY KEY CLUSTERED …

4
如何在SQL Server 2008中分配整个Active Directory组安全访问权限?
我想在我的内部应用程序中使用集成安全性,这些应用程序都在一个域中。不幸的是,我从来没有能够使它正常工作。我想在SQL Server中为整个Exchange(活动目录)组分配一个角色,以对某些表进行读/写访问。这样,我就不必在雇用某人时就创建一个运算符,也不必在被解雇时就删除一个运算符。这可能吗?我要采取什么步骤?


5
使用TIMESTAMP WITHTIME TIME ZONE的有效用例是什么?
关于两者之间的区别,有一个很长很清楚的答案 TIMESTAMP WITH TIME ZONE -vs- TIMESTAMP WITHOUT TIME ZONE 在此SO帖子中可用。我想知道的是:是否存在任何实际使用的有效用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式。
40 postgresql 

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.