我正在实施一个 Oracle 系统来存储来自应用程序的事件警报,所以我猜所有模式、数据库设计都将由应用程序通过 sript 处理。
我是数据库设计的新手,在实现数据库时需要做出的前 5 个设计决策是什么?
在使用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从未抱怨过它们。可能有什么问题?
我们有多个 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) 通过执行以下操作,我可以确定索引是否会受益于压缩以及压缩中应包含多少列:
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 就无法以编程方式确定。
我正在创建一个将存储 100.000(将来可能会更多)用户的数据库。虽然这显然发生在每个用户 1 行的表中,但每个用户都可以(并且将)存储数百个项目。在编程语言中,这意味着用户有 2 个整数数组(或一个二维数组):一列用于 itemid,一列用于金额。
我的直觉告诉我创建一个表来保存所有这些项目,行如 (userid, itemid, amount)。然而,这将导致一个巨大的表。200.000 个用户,每个用户有 250 个项目……一张表中有 5000 万个条目。这一点,再加上桌子会持续快速变化,这让我感到害怕。(有多快?我估计每秒最多可进行 100 次修改。)
通常有 100 到 2000 个用户,所有用户都添加和删除项目,并修改数量。这些操作可以并且将会在编程代码中发生。它将如下进行:
值得注意的是,用户可以存储的项目数量是有上限的。
除了使用单独的表格,还有其他选择吗?也许将值保存在格式化的文本字符串中?或者这是使用 MySQL 数据库实际上是一个坏主意™的实例之一?
感谢您的时间和见解。
我有以下要求: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) 我有一个按顺序排列的位字段的记录,我如何将它们分组为 3 组。例如,如果我的前三行有位字段 0,1,0 我希望它们在组 0 中,接下来的 3 是 1, 0,0 我希望它们在第 1 组中。接下来的三个是 0,0,1,我希望它们在第 2 组中。
顺序很重要,因为我正在匹配模式表以获得二进制模式的总体计数。
我可以看到 Row 会有所帮助,但我不知道如何按 3ss 计算行数。
谢谢你。
我在连接到新数据库的新机器上设置 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 支持之前,有人有建议吗?
我有一个包含 50% 使用的数据文件的表空间。如果我向表空间添加一个新的数据文件 -
我需要此信息来规划处理增加表空间大小而不浪费物理空间的策略。
我们有一个 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 ×7
sql-server ×3
oracle-11g ×2
deployment ×1
index ×1
jobs ×1
mysql ×1
oracle-10g ×1
oracle-se ×1
query ×1
t-sql ×1
wallet ×1