数据库管理员

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

4
Windows 7中的Oracle 12c安装错误INS-30131
我试图在Windows 7 x64计算机上安装Oracle 12c,一段时间后出现此错误: SEVERE: [FATAL] [INS-30131] Initial setup required for the execution of installer validations failed. CAUSE: Failed to access the temporary location. ACTION: Ensure that the current user has required permissions to access the temporary location. *ADDITIONAL INFORMATION:* - Framework setup check failed on all the nodes - …

3
如何将MySQL链接服务器添加到SQL Server?
我正在尝试将SQL Server上的链接服务器添加到MySQL Server。 请注意,SQL Server安装在具有不同域名的单独计算机上。 SQL Server 10.0.1.1在old_domain.com上。 MySQL服务器10.0.1.2位于new_domain.com上。 我在服务器上添加了ODBC数据源,10.0.1.1并测试了连接,未报告任何问题。 然后,我打开Microsoft SQL Server Management Studio并导航到SQL SERVER > Server Object > Linked Servers。 我进入向导以添加链接服务器,并按如下方式进行配置: 链接服务器:“ MySQLNewServer” 我选择了“其他数据源”提供程序“用于ODBC的Microsoft OLE DB提供程序”产品名称“与MySQL的连接”数据源“ MySQL”与第一步中添加的数据源名称相同。 在“安全性”选项卡上,选择“使用此安全性上下文进行访问”,然后输入SQL Server用户名和SQL Server密码。 我打“确定” 注意:我遵循此链接上的说明http://dbperf.wordpress.com/2010/07/22/link-mysql-to-ms-sql-server2008/ 但是,我收到此错误: 链接服务器“ MySQLNewServer”的OLE DB Providor“ MSDASQL”返回消息“ [MySQL] [ODBC 5.2(w)驱动程序]无法连接到10.0.1.1(10055)上的MySQL服务器Microsoft SQL Server错误:7303。 有人可以告诉我我在做什么错吗?我怎样才能使这两个服务器进行通信?

3
一种在多插入事务中引用ID的方法?(postgres)
假设表“ entity.eid”是自动递增的,我希望能够引用稍后在同一事务中分配的自动递增值。我这样做的方式是进行多次交易,我认为这不是最佳选择。 START TRANSACTION; INSERT INTO entity ...; INSERT INTO t2 (eid, ...) VALUES (?NEW EID REF HERE?, ...), (...), (...); COMMIT;

1
pgadmin3中的pg_restore错误-Postgresql
我已经使用pgadmin3工具从system1备份了一个PostgreSQL数据库。创建的备份文件的扩展名为“ .backup” 我正在尝试在安装了postgresql 9.0和pgadmin3 1.8的另一个system2上还原它,但是iam收到了错误 无法执行查询:错误:无法识别的配置参数“ lock_timeout”命令为:SET lock_timeout = 0; 两个系统的配置 system1 win7-64bit PostgreSQL 9.0.13-1-64位pgadmin 1.8 system2 win7-32​​位PostgreSQL 9.0.13-1-32位pgadmin 1.8

2
MySQL-如果删除了最后一行,则自动递增不会自动递增
我有一个表,其中包含一个自动递增的主键ID。如果我删除最后一行(最高ID,例如id = 6)并插入新行,则新ID从7开始。我必须更改哪个参数,使主键从6开始? CREATE TABLE animals ( id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM; INSERT INTO animals (name) VALUES ('dog'),('cat'),('penguin'), ('lax'),('whale'),('ostrich'); 结果: id名称 1狗 2猫 3企鹅 4松懈 5鲸鱼 6鸵鸟 DELETE FROM animals WHERE id = 6; INSERT INTO animals (name) VALUES ('x'); 结果: …

2
使用MAX分组,而不是MAX
我是一名程序员,正在处理一个具有以下方案的大表: UpdateTime, PK, datetime, notnull Name, PK, char(14), notnull TheData, float 上有一个聚集索引 Name, UpdateTime 我想知道什么应该更快: SELECT MAX(UpdateTime) FROM [MyTable] 要么 SELECT MAX([UpdateTime]) AS value from ( SELECT [UpdateTime] FROM [MyTable] group by [UpdateTime] ) as t 此表的插入是50,000行中具有相同日期的数据块。因此,我认为分组依据可能会简化MAX计算。 与其尝试查找最多150,000行,不如将其分组为3行,然后计算MAX会更快?我的假设是正确的还是分组依据也代价高昂?

1
MySQL在巨大的表和简单的SELECT上需要FORCE INDEX
我们有一个应用程序,它将来自不同来源的文章存储在MySQL表中,并允许用户检索按日期排序的那些文章。文章始终按来源进行过滤,因此对于客户端SELECT,我们始终有 WHERE source_id IN (...,...) ORDER BY date DESC/ASC 我们正在使用IN,因为用户有很多订阅(有些订阅有数千个)。 这是articles表的架构: CREATE TABLE `articles` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `source_id` INTEGER(11) UNSIGNED NOT NULL, `date` DOUBLE(16,6) NOT NULL, PRIMARY KEY (`id`), KEY `source_id_date` (`source_id`, `date`), KEY `date` (`date`) )ENGINE=InnoDB AUTO_INCREMENT=1 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT=''; 我们需要(date)索引,因为有时我们在此表上运行后台操作,而没有按源进行过滤。但是,用户无法执行此操作。 该表有大约10亿条记录(是的,我们正在考虑分片以便将来...)。一个典型的查询如下所示: …

2
创建具有较大初始大小的新数据库
我想用200GB的数据文件(.mdf)和50GB的日志文件(.ldf)创建一个新数据库。 但这很慢(大约15分钟,但尚未创建)。而且非常耗时。那正常吗?如果是,那需要时间吗?我可以提高其创建速度吗? 我正在使用SQL Server 2008 R2,Windows Server 2008R2、16GB RAM(在ssms中将其限制为12GB)和Core i7 Cpu

3
MySQL可能创建全局例程(存储过程和/或函数)
是否可以以某种方式定义全局可用的例程?似乎每个例程都必须在数据库范围内创建。 当我尝试从控制台创建例程(没有发出之前use dbname)时,出现错误: ERROR 1046 (3D000): No database selected 我们有大量相同的数据库(数据不同),目标是为某些表名创建一些触发器。但是我们只想运行一个例程,所以我们不必为每个数据库都创建这些例程(由于它们是相同的,因此例程对于每个数据库都将起作用)。

3
使用共享登录名时,如何知道用户对审核表执行删除操作?
背景资料: 我正在创建审核表的集合,以跟踪对我的应用程序的一组数据表的更新和删除。 审计记录是通过触发器创建的。 我的应用程序数据库中的DML通常来自服务用于进入数据库的登录名。因此,我认为SYSTEM_USER在触发器中调用时,结果始终是相同的。 我的应用程序当前不存储用户数据,尽管UserId每次执行DML时都会为其分配一个字符串(仅在存储过程中完成)。 我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,所以我不想看到所有操作都是由服务完成的,所以我想看看哪个用户做了。这不是更新的问题,因为我们有一些ModifiedBy列会通过发送更新来UserId更新。 问题是:SYSTEM_USER运行删除操作时,有没有办法将用户信息设置为或以其他方式使用户信息进入触发器? 我现在拥有的“最佳”想法(尽管我不确定这是否是一个好主意)是,在服务中,我检查是否当前UserId作为用户存在于数据库中,如果不是,则创建一个用户为他们反对。然后使用运行存储过程EXECUTE AS User = @UserId。然后,当在存储过程中完成DML并触发触发器时,SYSTEM_USER应从中返回用户EXECUTE AS。

1
SQL Server-如何确定实例的理想内存?
我们有一些虚拟机分配了X内存。此内存量有些随机。之所以将其分配给计算机,是因为这是物理计算机具有的内存量,是由于供应商的推荐,或者是因为我们对实例所需的内存进行了最佳猜测。 我知道内存越多越好,但是我也想避免在不必要的时候为VM过度分配内存。该内存可以被另一台机器更好地利用。 确定每个实例实际处于活动状态并正在使用的理想内存量的最佳方法是什么?除了页面预期寿命之外,我们还应该考虑其他指标吗?我们的实例的PLE为10k +,其他实例的PLE为100k +。 非常感谢任何见解。谢谢山姆



1
获取将多个表作为一行联接的结果
我有这两个表: table1: id | name --------- 1 | john 2 | jack table2: id | profile_id | institution ----------------------------- 1 | 1 | SFU 2 | 1 | UBC 3 | 2 | BU 4 | 2 | USC 5 | 2 | SFU 如果我想使用其用户ID获取有关用户的所有信息,则可以使用以下命令简单地加入他们: select a.id, a.name, b.institution from …
8 mysql 

2
“清除”启用了即时文件初始化的SQL Server数据库文件?
我在SQL Server上启用了即时文件初始化,因此数据库文件的“空”部分在分配之前没有清零。我的理解是,这意味着该文件可能包含“已删除”数据。 因此,现在我想向公司外部发送数据库的副本(可能是备份文件)。但是,所有潜在的敏感“已删除”数据都位于文件内部。现在,我想将文件的未使用部分归零。 那可能吗?我想我可以创建一个新数据库并复制所有内容,或者在不启用即时文件初始化的情况下将数据库的副本还原到另一台服务器,然后使用ShrinkFile命令主动删除数据库文件的大部分或全部未使用部分,但是有没有那么耗时的手动方法?理想情况下,该命令告诉SQL将文件归零,就像未启用即时文件初始化的情况一样。

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.