小编Lei*_*fel的帖子

实现数据库时需要做出的前 5 个设计决策是什么?

我正在实施一个 Oracle 系统来存储来自应用程序的事件警报,所以我猜所有模式、数据库设计都将由应用程序通过 sript 处理。

我是数据库设计的新手,在实现数据库时需要做出的前 5 个设计决策是什么?

oracle

6
推荐指数
2
解决办法
1448
查看次数

“程序:XXXX 有一个未解析的对象 XXXX 引用”错误

在使用MS SQL Server Management Studio创建和编辑数据库一段时间后,我尝试为此使用Visual Studio 2010 “SQL Server 2008 数据库项目

我使用SQL 2008 向导将现有数据库导入到VS2010。一切顺利。构建也成功了。但是,当我尝试以另一个名称将数据库部署回服务器时,我收到了很多类型为"Procedure: XXXX has an unresolved reference to object XXXX" 的错误

我很惊讶,因为所有这些存储过程实际上都运行良好,而且SQL Server Management Studio从未抱怨过它们。可能有什么问题?

sql-server stored-procedures visual-studio deployment

5
推荐指数
0
解决办法
9182
查看次数

Oracle 针对 SQL Server 数据库的查询给出不一致的结果

我们有多个 Oracle 11.2.0.2 数据库,其中 og4odbc 数据库链接到 SQL Server 2008 数据库。SQL Server 数据库中的特定表有两个 Varchar(36) 列。以下语句返回 1292 行:

select "id", "folder_id" from dbo.mediasite_presentation@ms;
Run Code Online (Sandbox Code Playgroud)

查询第一列中的特定值会返回一行:

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52';
id                                   folder_id
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 54aa9b6e-1c55-4de5-a06f-033d8b19fff0
Run Code Online (Sandbox Code Playgroud)

但是查询第二列中的特定值不返回任何行:

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "folder_id"='54aa9b6e-1c55-4de5-a06f-033d8b19fff0';
no rows selected
Run Code Online (Sandbox Code Playgroud)

使用有效的 where 子句并将每个字段包装在 to_char 中会返回以下有趣的结果:

select to_char("id"), to_char("folder_id") from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52';
TO_CHAR("ID")                        TO_CHAR("FOLDER_ID")
------------------------------------ ------------------------------------
006d815d-6e9e-4004-9104-51213a1ecd52 ??????????????????
Run Code Online (Sandbox Code Playgroud)

有趣的是,我只需添加一个 rownum 子句就可以产生相同的结果:

select "id", "folder_id" from dbo.mediasite_presentation@ms 
   where "id"='006d815d-6e9e-4004-9104-51213a1ecd52' and rownum<=1;

id                                   folder_id
------------------------------------ ------------------ …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 oracle sql-server query oracle-11g-r2

5
推荐指数
1
解决办法
2234
查看次数

在线确定索引压缩候选者

通过执行以下操作,我可以确定索引是否会受益于压缩以及压缩中应包含多少列:

ANALYZE INDEX Owner.IndexName VALIDATE STRUCTURE OFFLINE;
SELECT Opt_Cmpr_PctSave, Opt_Cmpr_Count FROM Index_Stats; 
Run Code Online (Sandbox Code Playgroud)

问题是当OFFLINE更改为ONLINEIndex_Stats 视图时不会填充。是否有一种在线方法可以确定压缩索引的好处和/或将产生最佳压缩的列数?

更新:

http://jonathanlewis.wordpress.com/index-definitions/表示如果 DBA_Indexes 中的 Distinct_Keys 比 num_rows“小很多”,那么该索引是一个很好的压缩候选者。这对某些人有帮助,但不是确定的,也无助于确定列数。他确实为此提供了一些指导方针,但没有一堆动态 SQL 就无法以编程方式确定。

index oracle oracle-11g-r2 oracle-11g

5
推荐指数
1
解决办法
3835
查看次数

在数据库中存储整数数组(为了高效选择)

我正在创建一个将存储 100.000(将来可能会更多)用户的数据库。虽然这显然发生在每个用户 1 行的表中,但每个用户都可以(并且将)存储数百个项目。在编程语言中,这意味着用户有 2 个整数数组(或一个二维数组):一列用于 itemid,一列用于金额。

我的直觉告诉我创建一个表来保存所有这些项目,行如 (userid, itemid, amount)。然而,这将导致一个巨大的表。200.000 个用户,每个用户有 250 个项目……一张表中有 5000 万个条目。这一点,再加上桌子会持续快速变化,这让我感到害怕。(有多快?我估计每秒最多可进行 100 次修改。)

通常有 100 到 2000 个用户,所有用户都添加和删除项目,并修改数量。这些操作可以并且将会在编程代码中发生。它将如下进行:

  • 用户启动会话,程序从数据库中加载所有用户项目
  • 用户修改项目列表
  • 每隔几分钟,更改就会保存到数据库中
  • 当用户结束会话时,它也被保存到数据库中

值得注意的是,用户可以存储的项目数量是有上限的。

除了使用单独的表格,还有其他选择吗?也许将值保存在格式化的文本字符串中?或者这是使用 MySQL 数据库实际上是一个坏主意™的实例之一?

感谢您的时间和见解。

mysql normalization

5
推荐指数
2
解决办法
2万
查看次数

SQL 中的 EXISTS 子句

我有以下要求:main_set表包含所有 ID,user_input表包含所有用户输入的 ID。

我想要 user_input 表中存在的 id 的结果。如果 user_input 表中没有任何内容,那么我想要 main_input 表中的所有 id。

这是我到目前为止所拥有的:

create table main_set as
select 1 id from dual
union all
select 2 from dual
union all
select 3 from dual

create table user_input as
select 1 id from dual
union all
select 2 from dual

select *
  from main_set ms
  where exists (select null
                        from user_input ui
                       where ui.id = ms.id)
Run Code Online (Sandbox Code Playgroud)

oracle

5
推荐指数
1
解决办法
847
查看次数

如何将计数分组?

我有一个按顺序排列的位字段的记录,我如何将它们分组为 3 组。例如,如果我的前三行有位字段 0,1,0 我希望它们在组 0 中,接下来的 3 是 1, 0,0 我希望它们在第 1 组中。接下来的三个是 0,0,1,我希望它们在第 2 组中。

顺序很重要,因为我正在匹配模式表以获得二进制模式的总体计数。

我可以看到 Row 会有所帮助,但我不知道如何按 3ss 计算行数。

谢谢你。

sql-server t-sql

5
推荐指数
1
解决办法
1997
查看次数

Oracle 钱包设置 ORA-12578

我在连接到新数据库的新机器上设置 Oracle Wallet 时遇到问题。我已将以下几行添加到 SQLNET.ORA 中:

SQLNET.WALLET_OVERRIDE = TRUE
WALLET_LOCATION = (SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=c:\oracle\Wallet))
Run Code Online (Sandbox Code Playgroud)

创建钱包时没有错误,添加了凭据,并且我可以毫无问题地从钱包中列出凭据,但是当我去使用它们时,我得到一个 ORA-12578,如下所示:

C:\oracle\Wallet>sqlplus /@MYDB

SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 31 16:57:53 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-12578: TNS:wallet open failed
Run Code Online (Sandbox Code Playgroud)

我在 64 位机器上使用 32 位 11.2 客户端连接到 64 位 11.2 数据库。无需钱包即可登录。该错误消息表明我应该打开跟踪。我已经这样做了,但没有看到任何明显的东西。在我联系 Oracle 支持之前,有人有建议吗?

oracle wallet oracle-11g-r2 oracle-11g oracle-se

5
推荐指数
1
解决办法
2万
查看次数

Oracle 如何填充添加到表空间的数据文件?

我有一个包含 50% 使用的数据文件的表空间。如果我向表空间添加一个新的数据文件 -

  1. 第一个数据文件是否会继续使用直到达到满容量,然后才开始使用第二个数据文件
  2. 当数据更改写入新数据文件时,第一个数据文件将永远只使用 50%
  3. 还有什么我没有想到的事情发生了吗?

我需要此信息来规划处理增加表空间大小而不浪费物理空间的策略。

oracle

5
推荐指数
1
解决办法
2231
查看次数

将 OEM 作业转换为 DBMS_Scheduler 作业的数据库链接问题

我们有一个 OEM 作业,它将使用特定的数据库用户凭据运行 PL/SQL 块。两个不同数据库的凭据相同,因此块使用没有凭据的私有数据库链接将数据从第二个数据库拉入第一个数据库没有问题。

我们将作业迁移到 DBMS_SCHEDULER,但作业失败并显示以下错误:

ORA-04052: error occurred when looking up remote object PATIENT.PTTRANS@BILL10G 
ORA-00604: error occurred at recursive SQL level 2 ORA-01017: invalid username/password; logon denied 
ORA-02063: preceding line from BILL10G 
Run Code Online (Sandbox Code Playgroud)

我还没有找到确切的信息,但我读过的东西似乎表明,由于调度程序作业没有登录名,因此它们不能使用使用传递凭据的数据库链接。这是有道理的,因为无论作业是由 SYSTEM 拥有还是由通常运行该块的用户拥有(并且在登录时仍然可以),我都会收到相同的错误。

任何人都可以提供这种情况的进一步解释或更重要的是解释解决此问题的方法吗?我可以想到几个,但我不确定我喜欢其中的任何一个。

oracle oracle-11g-r2 oracle-10g jobs

5
推荐指数
1
解决办法
957
查看次数