Questions tagged «oracle»

所有版本的Oracle数据库。如果该上下文在问题中很重要,请添加特定于版本的标记,例如oracle-11g-r2。请勿用于Oracle产品(例如应用程序或中间件)或Oracle拥有的其他数据库产品(例如MySQL或BerkeleyDB)。

3
以自动化方式编写Oracle DDL脚本
Oracle SQL Developer能够通过Tools -> Database Export...此方式导出DDL,效果很好,但是需要手动干预。 我知道DBMS_METADATA.get_ddl(),但是发现导出并不完美。我遇到的问题是,导出的DBMS_METADATADDL如果不首先解决诸如关键字中间的中断以及更糟糕的问题之类的问题就无法使用。但是,如果任何人都知道DMBS_METADATA可以通过导出导出DDL的方法而无需手动修复,那也将是一个很好的解决方案。 基本上,我正在寻找一种自动/可脚本化的方式来导出DDL ,该方式与通过手动方式导出的方式相同。 我怎样才能做到这一点?

2
OracleBulkCopy专门做什么,如何优化其性能?
总结细节:我们需要将大约500万行转移到供应商(Oracle)数据库中。使用OracleBulkCopy(ODP.NET)批量处理50万行时一切都很好,但是当我们尝试扩展到5M时,一旦达到1M标记,性能就会开始缓慢爬行,随着更多行的加载,性能会逐渐变慢,最终3小时左右后超时。 我怀疑这是涉及到对表的主键,但我一直在用拖网捕信息的甲骨文论坛和堆栈溢出,很多东西我读的是相矛盾(也很多帖子似乎与对方) 。我希望有人能就与该流程密切相关的一些问题直接记录下来: 请问OracleBulkCopy类使用常规或直接路径加载?有什么方法可以确认这一点吗? 假设它确实使用直接路径加载:Oracle是否在加载期间自动将所有索引设置为不可用,然后将它们重新设置为联机,这是真的吗?我已经阅读了几篇有关此问题的声明,但同样无法确认。 如果#2是true,那么在启动批量复制操作之前,表上的索引应该有什么区别吗?如果是这样,为什么? 与#3相关,通常,在具有无法使用的索引的批量加载与在加载之前实际删除索引并在之后重新创建索引之间,是否有实际的区别? 如果#2 不正确,或者有一些我不了解的警告,那么在大容量加载之前显式使索引不可用,然后在之后显式重建索引 是否有任何区别? 除了索引构建以外,还有其他什么可能会导致随着添加越来越多的记录,批量复制操作的速度逐渐变慢?(也许与日志记录有关,尽管我希望不记录批量操作?) 如果除了先删除PK /索引外,实际上没有其他方法可以使性能降低,我可以采取哪些步骤来确保索引不会完全消失,即,如果与数据库的连接丢失了,过程的中间?
14 oracle  bulk 

1
为什么SQL * PLUS在CREATE TYPE之后需要一个斜杠?
我只是遇到了一个问题,我定义了一个Type并在TOAD中对其进行了测试,一切正常。但是在SQL * PLUS下运行会引发错误。 例: CREATE OR REPLACE TYPE MyType AS OBJECT ( Item1 NUMBER, Item2 NUMBER ); 由于某种原因,我必须在此处添加斜杠 CREATE OR REPLACE TYPE MyType AS OBJECT ( Item1 NUMBER, Item2 NUMBER ); / 对我来说,它看起来类似于Create Table语句,不需要斜线。我觉得这很混乱。我知道它是如何工作的,但是谁能解释为什么做出这个设计决定?

1
使用LDAP通过Oracle Instant Client查找名称
完全由于Oracle客户端的完整安装版本冲突或版本不完整,部分原因是我的开发团队(我是其成员)一直在使用Oracle Instant Client,并避免在大多数情况下在我们的开发计算机上安装新项目。效果非常好,甚至达到我们通过此设置部署到生产的程度。由于我们主要是.NET商店,因此我们使用的是本机客户端(带有.NET包装器),而不是Java。 现在,客户要求我们在LDAP服务器上注册数据库服务,并使用LDAP服务器进行名称查找。他们提供的文件sqlnet.ora和ldap.ora文件(以及随附的加密配置文件)看起来是正确的。特别是,该sqlnet.ora文件确实将LDAP指定为查找网络服务名称的可能来源: names.directory_path=(tnsnames,ldap) 我确信我正在使用的计算机可以使用LDAP访问服务,因为我可以使用SQL Developer(这使我可以直接输入LDAP信息)进行访问。假设它们是正确的,我如何才能使Instant Client识别此配置并使用LDAP进行名称查找? 到目前为止我尝试过的 我尝试将TNS_ADMIN环境变量设置为包含提供的文件的目录,尽管此方法对于使Instant Client识别tnsnames.ora文件效果很好,但似乎不足以让它开始查看LDAP。结果如下(更改了路径,用户名和密码): (以下命令碰巧是Windows命令提示符,但我想在Linux上也可以执行类似的操作。sqlplus这里也显示了Instant版本,并且在同一目录中附带有Instant Client二进制文件。) C:\TEMP>SET TNS_ADMIN=C:\path\to\sqlnet\ldap\and\tnsnames\ora\files C:\TEMP>echo %TNS_ADMIN% C:\path\to\sqlnet\ldap\and\tnsnames\ora\files C:\TEMP>sqlplus.exe USERNAME/PASSWORD@LOCALTNSNAME SQL*Plus: Release 11.2.0.2.0 Production on Mon Jul 7 10:22:25 2014 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production …
14 oracle 

7
如何检查Oracle数据库是否启动?
对于我们的应用程序,我们有一个用于连接到Oracle数据库的配置文件(URL,用户名,密码)。 该应用程序需要2-5分钟才能启动。如果数据库有问题,我会在日志中看到此错误,但是我必须等待2-5分钟。这是很多时间。 因此,我想快速简单地找到一种确定数据库是否正常且在线的方法。 你知道我该怎么做吗?
14 oracle 

1
如何防止UNPIVOT转换为UNION ALL?
我有一个稍微复杂的Oracle查询,大约需要半个小时才能完成。如果我执行查询的慢速部分并单独运行它,它将在几秒钟内完成。这是隔离查询的SQL Monitor报告的屏幕截图: 作为完整查询的一部分运行时,这是相同的逻辑: 颜色与两个屏幕截图中的相同表格相对应。对于慢速查询,Oracle MERGE JOIN在的两个表中没有相等条件的表之间执行JOIN。结果,不必要地处理了大约1.5亿个中间行。 我可以通过查询提示或重写来解决此问题,但我想尽可能多地了解根本原因,以便将来避免该问题并可能向Oracle提交错误报告。每次我得到错误的计划UNPIVOT时,查询文本中的内容都会转换为UNION ALL计划中的一个。为了进一步调查,我想阻止查询转换的发生。我无法找到此转换的名称。我也无法找到阻止它的查询提示或下划线参数。我正在开发服务器上进行测试,因此一切正常。 有什么我可以做,以防止的查询转换UNPIVOT到UNION ALL?我使用的是Oracle 12.1.0.2。 由于IP原因,我无法共享查询,表名或数据。我无法提出一个简单的复制品。话虽如此,我仍不清楚为什么需要这些信息来回答这个问题。这是UNPIVOT查询以及与UNION ALL相同的查询的示例。

6
为什么不能在联接中使用空值?
我已经通过使用...解决了查询问题,row_number() over (partition by这是一个更笼统的问题,为什么我们不能在联接中使用具有空值的列。为什么不能为了联接而将null等于null?
13 oracle  join  null 

3
避免多个`或`表达式
我有以下oracle SQL及其工作原理,但与所有ors 比较难看。有更简洁的方法吗? SELECT * FROM foobar WHERE (SUBJECT ='STAT' and TERM ='111') or (SUBJECT ='STAT' and TERM ='222') or (SUBJECT ='ENGLISH' and TERM ='555') or (SUBJECT ='COMM' and TERM ='444') or (SUBJECT ='COMM' and TERM ='333') or (SUBJECT ='STAT' and TERM ='666') ...

2
将架构导入新的或不同的表空间
是否有一种简便的方法可以使用一个新的或不同于数据来源的表空间将模式导入Oracle 11gR2? 例如,我已经从OLDDB导出了BLOG_DATA,所有用户数据都存储在USERS表空间中。 在NEWDB上,我想导入BLOG_DATA模式,但是将用户对象存储在专门为此用户创建的BLOG_DATA表空间中。 我已经创建了BLOG_DATA用户,创建了BLOG_DATA表空间,并将其设置为该用户的默认表空间,并添加了适当的无限配额。 CREATE TABLESPACE blog_data DATAFILE SIZE 1G; CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data; GRANT connect,resource TO blog_data 该模式是从OLDDB导出的,类似于 exp blog_data/secretpassword@OLDDB file=blog_data.dmp 在阅读了Phil的出色回答后,我发现自己很纳闷: 由于数据除了默认表空间(用户拥有配额的唯一表空间)外别无其他地方,这是否会有效地迫使imp将所有用户对象放在该默认表空间中? imp blog_data/secretpassword@NEWDB file=blog_data.dmp 然后,这会将整个blog_data模式放在NEWDB的blog_data表空间中吗?有什么原因为什么这行不通或者我会遇到某些对象等问题? 更新: 我进行了快速测试,发现情况确实如此。Imp将对象放置在该用户的默认表空间中,前提是该对象不能将其放置在原始表空间中(例如,该表空间不存在)。完整说明:http : //www.dolicapax.org/? p= 57 不过,我认为像Phil那样使用Data Pump可能是首选。

2
将数据从Oracle迁移到SQL Server的最简单方法是什么?
我们的产品之一同时支持Oracle和SQL Server作为数据库后端。我们有一个客户希望从Oracle后端切换到Microsoft SQL Server,这对我们来说不是典型的过渡。 将所有数据从整个Oracle模式中获取到SQL Server数据库中的最简单方法是什么? 模式只包含普通的旧表,没有花哨的东西。也许有一个或两个存储过程,我们手工迁移就不会有问题。 我可以使用Oracle的SQLDeveloper将表数据导出为CREATE和INSERT语句,但是这些与SQL Server上使用的语法不匹配,而且我不希望必须手动修复语法错误。

2
定义索引时,列的某些顺序有什么好处
例如,如果我有两个索引: CREATE INDEX IDX_1 ON MY_TABLE_1 (ITEM, DATE, LOCATION) COMPUTE STATISTICS; CREATE INDEX IDX_2 ON MY_TABLE_1 (DATE, LOCATION, ITEM) COMPUTE STATISTICS; 这会变得IDX_2多余吗?如果没有,如何确定列的声明顺序? 我应该为常规查询量身定制索引吗?
13 oracle  index 


5
Oracle的哪些功能使其成为小型项目的诱人选择?
考虑到Oracle的许可处理[a](在较小程度上包括成本),我一直想知道选择PostgreSQL还是选择MySQL的决定因素是什么。 我的公司几乎总是选择Oracle(如果可能,则使用XE),即使对于只有一个简单的Windows服务器运行数据库而没有任何专门的DB管理的小型项目。(请注意,小的也并不意味着数据将总是适合的Oracle XE的相当小尺寸的限制。) 我一直对这种选择提出质疑,但是这样做的好处是,至少我们只接触一种数据库产品。 尽管如此,在给定一个新项目的情况下,您需要RDBMS,但是数据库的项目和范围很小,基于您在简单Windows服务器上运行Oracle的哪些独特功能(无需过多的专门管理),您会选择Oracle另一个RDBMS? 附加上下文:我们的许多数据库部署都以“低管理”模式在客户站点上运行。即,数据库仅建立一次。对其现场的正确行为和性能进行了一些初步测试。此后,数据库就可以继续运行了。没有进行常规管理。仅当出现故障时,技术人员(而非专门的DBA)才会检查数据库,以尝试找出问题所在。备份通常作为脱机备份完成。在某些项目中,客户甚至都不在乎是否涉及RDBMS。他们只是将自己的应用视为可以(可以不可以)的黑匣子。 [a]:在我工作的地方,数名项目经理反复花了几个月的时间才能为小型项目获得适当的许可,因为如果收入微不足道,当地的Oracle代表对销售他们的产品就不太感兴趣。

2
在Oracle中进行PL / SQL工作的应用程序开发人员的安全性
您如何处理Oracle中缺少架构级别特权的问题?Oracle的安全体系结构适用于只需要对象级特权的应用程序,并且适用于几乎不需要限制的DBA。但是,对于使用前端应用程序和多种模式的PL / SQL进行开发的程序员而言,体系结构中似乎存在很大的漏洞。这是我的一些缺点: 使每个程序员都按照自己的模式进行开发。DBA将向需要它们的程序员授予对象级别的特权。任何软件包开发都必须由DBA完成。主要缺点是程序员会像使用存储桶一样使用数据库,从而损害数据库性能。我希望程序员在数据库中进行开发,但是这种方法会大大不利于它。 为每个程序员提供他们需要进行开发的十几种模式的用户名/密码。向这些应用程序模式授予创建过程,表等的权限。这种方法的一些缺点是程序员必须维护多个登录名,并且必须很少自己登录。跨模式开发也很困难。 向程序员授予开发所需的每个模式的代理身份验证特权。这使他们可以自己登录,而不必授予他们代理权限以外的其他权限。缺点包括程序员必须为其代理的每个模式维护独立的连接,跨模式开发更加麻烦,因为连接必须不断更改,并且使用带有已通过身份验证的公共数据库链接的程序包无法在代理连接内部进行编译。 给每个程序员DBA特权。–这里的缺点是安全性。不能将任何模式程序员挡在任何模式之外,并且任何程序员都可以模仿任何其他程序员(DBA)。 似乎缺少一个选项来授予每个程序员SELECT / INSERT / CREATE / etc。他们需要在其中进行开发的模式具有特权。他们使用一个连接以自己的身份登录以完成工作。他们有权访问的架构中的新对象将立即可用。 我想念什么吗?您如何处理进行PL / SQL开发的应用程序程序员?

5
无法加载Oracle 12c Express企业管理器网页
问题总结 当浏览到Oracle 12c EM Express Web界面时,使用以下URL时页面超时: http(s)://主机名:5500 / em http(s)://hostname.domain:5500 / em 当使用包含IP地址或本地主机的url时,页面会加载,但加载速度非常慢(最多5分钟)。 http(s):// ip地址/ em http(s):// localhost / em 使用主机名时,侦听器日志显示错误(多个错误): 03-DEC-2015 11:25:33 * http * (ADDRESS=(PROTOCOL=tcps)(HOST=<ip address>%14)(PORT=52925)) * handoff * http * 12518 TNS-12518: TNS:listener could not hand off client connection TNS-12560: TNS:protocol adapter error 使用IP地址或localhost时,侦听器日志未显示任何错误: 03-DEC-2015 11:23:39 * …

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.