小编Jon*_*ler的帖子

Oracle表空间最大化"无限"并非真正无限制

我最近需要将.dmp导入我创建的新用户.我还使用以下命令为用户创建了一个新的表空间:

create tablespace my_tablespace
 datafile 'C:\My\Oracle\Install\DataFile01.dbf' size 10M
 autoextend on
 next 512K
 maxsize unlimited;
Run Code Online (Sandbox Code Playgroud)

导入正在运行时出现错误:

ORA-01652 Unable to extend my_tablespace segment by in tablespace
Run Code Online (Sandbox Code Playgroud)

当我检查dba_data_files表中的数据文件时,我观察到maxsize大约是34gb.因为我知道数据库的一般大小,所以在将多个数据文件添加到表空间后,我能够毫无问题地导入.dmp.

当我添加的第一个数据文件设置为自动增长到无限大小时,为什么我需要向表空间添加多个数据文件?为什么最大尺寸为34gb而不是无限制?是否有34gb的硬帽?

oracle oracle11g tablespace

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

Oracle 12c文档,用于SQL的更改/新功能

我刚刚发现Oracle 12c支持将几个级别的查询关联起来,这在11g和以前的版本中是不受支持的.

select
   *
from
   tab1 a
where
   not exists
         (select
                *
           from
               (select
                    *
                from
                    tab2 b
                where a.X = b.X))
Run Code Online (Sandbox Code Playgroud)

但我无法在Oracle网站上找到这个文档.是否有任何其他此类隐藏的SQL功能添加到Oracle 12c?在12c中对SQL的所有这些更改是否记录在某处?

sql oracle oracle11g oracle12c

6
推荐指数
1
解决办法
317
查看次数

oracle DB中具有纬度和经度的两点之间的距离

我需要通过 Pl SQL Query 计算两个位置之间的距离。我试过一些 Qry 但没有得到它。

为此,我们在 SQL 中使用 Query 如下

SELECT ROUND(geography::Point(cast('19.2806118' as float),cast('72.8757395' as float) , 
4326).STDistance(geography::Point(cast('19.4482006' as float),
cast('72.7912511' as float), 4326))/1000,1) DIST
Run Code Online (Sandbox Code Playgroud)

结果:20.6

为了在 ORACLE Db 中计算相同的值,我在互联网上找到了一个解决方案,如下所示

select sdo_geom.sdo_distance(sdo_geometry(2001,4326,null,sdo_elem_info_array(1, 1, 1),
sdo_ordinate_array( 19.2806118,72.8757395)),sdo_geometry(2001,4326, null,sdo_elem_info_array(1, 1, 
1),sdo_ordinate_array( 19.4482006,72.7912511)),1,'unit=KM') distance_km from dual
Run Code Online (Sandbox Code Playgroud)

结果:10.9271..

请建议在我获得 MS SQL 时会给我结果的方法

oracle geometry oracle-spatial

6
推荐指数
1
解决办法
116
查看次数

Oracle CAST 到 NVARCHAR2 的奇怪行为

我有以下查询:

\n\n
SELECT (CAST("META_SECT_ORDER" AS NVARCHAR2(3)) || \'#\' || "CODE") AS "SECTION"\nFROM "BMAN_TP2"."LOADER_TEMPLATE_SECTIONS"\n
Run Code Online (Sandbox Code Playgroud)\n\n

META_SECT_ORDER显然是整数,而CODE是字符串。

\n\n

它输出 700 行,如下所示:

\n\n
SECTION\n-------\n 0#F01\n 0#I05\n 1#I05\n 2#I05\n
Run Code Online (Sandbox Code Playgroud)\n\n

ETC...

\n\n

我知道这CAST不是必需的,但查询是由底层查询构建器组成的,该构建器也为 MsSQL Server 输出(其中CAST需要时)和 Postgres 输出。

\n\n

奇怪的事实是,如果我提高NVARCHAR2我会得到不同的结果。例如:

\n\n
    \n
  • 当值 <= 80 时,我得到正确的结果(见上文)

  • \n
  • 值为 81,我得到 700 行\xec\xa5\xb4\xe1\x9e\x8b\xe9\x86\xb4\xe0\xb0\x80\xed\x89\xb6\xe0\xb5\x90\xe5\x87\xa8\xec\x93\xa5\xe6\x98\x81\xe8\x8f\x84\xe0\xa2\x8b\xe4\x96\xbc\xe8\xad\x95\xe8\xb2\x89\xe1\x82\x8b\xe4\x96\xbc\xe8\x8e\x80\xe9\x90\x8b

  • \n
  • 值为 82,我得到 700 行\xe0\xa8\x96\xe0\xac\x86

  • \n
  • 对于奇数值,在 [83-127] 中,我得到 700 个空行

  • \n
  • 对于偶数值,在 [84-128] 中,我得到 700 行\xda\xa2

  • \n
  • 值 >= 129,我得到 …

oracle oracle10g

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

Maven找不到JDK

使用 Oracle JDK 1.7.0_51 运行 Ubuntu 12.04 amd64。

$ which javac
/usr/bin/javac
$ which java
/usr/bin/java
Run Code Online (Sandbox Code Playgroud)

当我尝试运行mvn install我的项目时,我收到这个漂亮的小错误:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.579s
[INFO] Finished at: Tue Mar 11 13:48:06 PDT 2014
[INFO] Final Memory: 18M/605M
Run Code Online (Sandbox Code Playgroud)

我相当确定我安装了编译器,但它看不到它。

JAVA_HOME被设定为/usr/lib/jvm/java-7-oracle。我需要为 JDK …

java maven

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

UNION ALL的Oracle Optimizer问题

我对Oracle优化器中的这种行为感到很困惑.这与联合CTE的所有操作有关.如果有人有任何想法我都是游戏.

 --Relevant data structures:
 --t_positionperf (index: POSITIONPERF_X1 (account_id, hist_date, security_id)
 --t_positionhist (index: POSITIONHIST_X1 (position_id, hist_date, hist_type)
 --                       PK_T_POSITIONHIST (hist_date, position_id, hist_type)
 --v_positiontype (very simple "case-when" translation of a tiny lookup table)

with q as (
select 
pp.position_id, pp.hist_date, pp.account_id, pp.income, pp.expense,
ph.position_type_id, ph.price, ph.quantity, ph.factor, ph.daily_accrual,
n.daily_accrual as new_daily_accrual, nvl(n.is_loan, v.is_loan) as new_is_loan
from
t_positionperf pp
left outer join t_positionhist ph
            on  pp.position_id = ph.position_id
            and pp.hist_date = ph.hist_date
            and ph.hist_type = 'O' --the 'O' join set from t_positionhist
     left …
Run Code Online (Sandbox Code Playgroud)

sql oracle optimization union-all

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

Java JRE (7, 8) 的 Windows tar.gz 文件是什么?

从我在上一小时所做的测试中可以看出,Oracle 最后(*)为 Windows 上的 Java JRE 包含了“xcopy 样式”包——即使是非服务器版本。

是的,我知道 gzip 压缩的 tar 文件是什么。这只是没有这些文件的完整性-与用于Windows可执行安装程序记录在案。

查看当前非服务器 JRE 的Java 78 下载页面,我看到:

  • Windows x86 Online jre-7u67-windows-i586-iftw.exe
  • Windows x86 脱机 jre-7u67-windows-i586.exe
  • 视窗 x86 jre-7u67-windows-i586.tar.gz
  • Windows x64 jre-7u67-windows-x64.exe
  • Windows x64 jre-7u67-windows-x64.tar.gz

这些压缩文件似乎没有在我可以谷歌搜索的任何文档中提到,但它们的目的似乎是不必运行任何安装程序,只需将它们复制到机器上,正确设置路径,然后运行他们。(并运行它,我测试过)。

尽管如此,根本没有提及或文档似乎很奇怪。那么有没有官方提到这些tar.gz文件适用于Windows?据我从历史下载中可以看出,它们是在J7u9中引入的- 并且对于 Java 8 显然是 8u20。


(*) “终于”是相对的... J7u9 是 2012-10-16 的,所以它真的不是最近的,但我现在才开始研究让 J6 的东西在 J7/J8 上运行,所以很高兴看到那些现在。

java windows java-7

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

是否有Java代码约定的更新版本

官方Java代码约定文档 - 我可以得到 - 是1997年,似乎Oracle没有它的更新版本.

Oracle实际上在约定页面上声明:

此页面上的信息仅适用于存档目的

此页面未被主动维护.文档中的链接可能不起作用,信息本身可能不再有效.该文件的最新修订版于1999年4月20日作出

是否有更新的官方或至少事实上的官方公约?

注意:我不要求在这里讲好或最好的约定,我问更新的标准或者如果任何事实上的标准.所以,答案不应该是基于意见的答案.

java coding-style conventions code-conversion

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

FROM子句中的嵌套括号是否有效Oracle SQL语法?

此查询是否使用正确的Oracle语法?

select * from ( ( ( dual a) ) ) where a.dummy = 'X';
Run Code Online (Sandbox Code Playgroud)

它适用于11g和12c,但它是真正有效的语法吗?或者这只是一个编译器"错误",将来可能会修复,导致代码失败?

我怀疑这是正确的语法,原因如下:

  1. 除了添加额外的括号之外,它似乎没有做任何其他事情.像((1 + 2)*3)这样的表达式显然可以从嵌套括号中受益,但是我看不出它们如何帮助FROM子句.当我查看上面的查询时,别名"a"看起来超出了范围.
  2. 我在SQL语言参考语法图中找不到此语法的有效路径.另一方面,很容易看到表达式,条件子查询如何允许嵌套括号.表达式,条件和子查询是递归的,可以包含括号,但join子句不是递归的.

我担心这一点,因为有类似的情况,无效语法在一个版本中起作用,然后在下一个版本中失败.例如:select (select count(*) from (select * from scott.emp where ename = dual.dummy)) from dual;.该查询在10.2.0.1.0中有效,但在更高版本中停止工作,因为表引用的范围仅限于一个级别.

原始查询的样式很糟糕,但除非存在真正的问题,否则不值得更改我们的生产查询.

查询无效吗?或者是否存在某种合法的语法原因,或者在语法图中是否存在一些我遗漏的路径?

oracle oracle11g oracle12c

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

dbms_aq.dequeue_array,第一条消息返回两次

介绍

使用Oracle Advanced Queuing方法时,我在Oracle SQL Server上遇到了一个非常奇怪的行为(确切地说:Oracle Database 11g企业版11.2.0.4.0版 - 64位生产版).

问题

错误是我排队X消息,但dequeue_array返回X + 1消息,第一条消息重复(如MessageId所示).

复制:

我能够编写一些简单的PoC来重现错误.本代码非常简单,入队/出队的东西是标准的Oracle AQ.代码执行以下步骤两次(测试运行):

  • 清除队列表
  • 排队X消息
  • 使用dbms_aq.dequeue_array调用使所有消息出列
  • 检查已出列的消息数

在新连接上运行POC时,第一次运行成功而没有错误,但每次后续运行都失败.之后,当使用相同的连接时,每次执行脚本时,它都会在两次测试运行中失败.

到目前为止我尝试了什么:

  • 在"新"连接上运行此脚本:仅第一次运行失败
  • 在同一连接上执行脚本的任何其他操作:所有运行失败
  • 使用/创建新队列时:只有第一次运行失败
  • 使用"delete from <queue_table>"而不是dbms_aqadm.purge_queue_table():一切都很好
  • 当使用"正常"一个一个出列时:每次都很好

结论:

我既不能解释这种行为,也不能在我的代码中找到错误.请看一下它,它应该可以在你最喜欢的sql客户端中直接执行(用PL/SQL Developer测试).

如果您需要任何进一步的信息或在让PoC工作时遇到问题,请问,我会定期检查这个帖子.我试图使PoC尽可能可读,包括关于正在发生的事情的详细输出.

码:

declare
   C_QueueName        constant varchar2(32767) := 'TEST_QUEUE';
   C_QueueTable       constant varchar2(32767) := 'TEST_Q_TABLE';
   C_MsgCount         constant pls_integer := 1;
   C_TestRuns         constant pls_integer := 2;
   C_DequeueArraySize constant pls_integer := 10;

   /*
    * Create the queue and the queue table used for theses tests …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g oracle-aq

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