标签: oracle11gr2

从表中选择MIN和MAX都比预期慢

我有一个MYTABLE带有日期列的表,SDATE它是表的主键,并且有一个唯一的索引.

当我运行此查询时:

SELECT MIN(SDATE) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

它会立即给出答案.同样的情况发生在:

SELECT MAX(SDATE) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

但是,如果我一起查询:

SELECT MIN(SDATE), MAX(SDATE) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

它需要更多的时间来执行.我分析了计划并发现当查询最小值或最大值时,它使用INDEX FULL SCAN(MIN/MAX),但是当两者同时被查询时,它会进行全表扫描.

为什么?

测试数据:

11g

create table MYTABLE
(
  SDATE  DATE not null,
  CELL   VARCHAR2(10),
  data NUMBER
)
tablespace CHIPS
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

alter table MYTABLE
  add constraint PK_SDATE primary key (SDATE)
  using index 
  tablespace SYSTEM
  pctfree 10
  initrans 2
  maxtrans 255
  storage …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g oracle11gr2

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

如何消除子类型依赖?

在下面的例子中,我为每个子类型编写了一个to_str()函数和一个set()过程pls_integer.除类型外,功能和程序几乎相同.

如何在不放弃子类型提供的约束的情况下消除编写另一个to_str()set()新子类型的需要?

回落varchar2喜欢

procedure set(list in varchar2, prefix in varchar2)
Run Code Online (Sandbox Code Playgroud)

然后将其称为

set(to_str(list), 'foos:')
Run Code Online (Sandbox Code Playgroud)

这听起来不太好,我仍然需要to_str()为每个子类型提供.

我对所有不同的提案都持开放态度,因为我是甲骨文的新手,几乎每天都有新的Oracle功能让我感到惊讶.

我正在运行11.2.0.1.0.

create table so1table (
  id number,
  data varchar(20)
);

create or replace package so1 as
  subtype foo_t is pls_integer range 0 .. 4 not null;
  type foolist is table of foo_t;
  procedure set(id_ in number, list in foolist default foolist(1));

  subtype bar_t is pls_integer range 5 .. 10 not null; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g subtype oracle11gr2

20
推荐指数
1
解决办法
993
查看次数

将列添加到Oracle中的现有索引

我有一个相对较大的表(81M行)和一个索引.

我想在现有索引中添加一列.

我在Google上搜索过它,但我找不到方法.

我在某处读过,向索引添加列的唯一方法是删除并重新创建它.

但是,这里说它通常会在现有索引中添加列.(虽然作者不推荐它.)

那么,是否可以在现有索引中添加列,如果可能,这是一个好习惯吗?

oracle indexing oracle11g oracle11gr2

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

使用Oracle数据库配置ASP.NET MVC 4应用程序

我目前正在使用Oracle数据库处理ASP.NET MVC 4项目.我已成功在我的Web.config文件中添加连接字符串,如下所示:

<add name="OracleDBConnString" connectionString="Provider=MSDAORA;Data Source=ISDQA;User ID=isd;Password=isdqa;" providerName="System.Data.OleDB" />
Run Code Online (Sandbox Code Playgroud)

但是当我创建一个新项目时,它已经有了一个内置的身份验证类.如何一劳永逸地修改这些类?我想更改默认值ConnString.

这是我的模特:

public class UsersContext : DbContext
{
    public UsersContext()
        : base("OracleDBConnString")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
}

public class LoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的用户控制器:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public …
Run Code Online (Sandbox Code Playgroud)

c# oracle11gr2 asp.net-mvc-4

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

计算其父项拥有的根的百分比

简单来说,我正在尝试计算其父项所拥有的树的根的百分比,进一步在树上.我怎么能单独用SQL做这个?

这是我的(样本)架构.请注意,虽然层次结构本身很简单,但还有一个额外的holding_id,这意味着单个父母可以"拥有"他们孩子的不同部分.

create table hierarchy_test ( 
       id number -- "root" ID
     , parent_id number -- Parent of ID
     , holding_id number -- The ID can be split into multiple parts
     , percent_owned number (3, 2)
     , primary key (id, parent_id, holding_id) 
        );
Run Code Online (Sandbox Code Playgroud)

还有一些样本数据:

insert all 
 into hierarchy_test values (1, 2, 1, 1) 
 into hierarchy_test values (2, 3, 1, 0.25)
 into hierarchy_test values (2, 4, 1, 0.25)
 into hierarchy_test values (2, 5, 1, 0.1)
 into hierarchy_test values (2, 4, …
Run Code Online (Sandbox Code Playgroud)

sql oracle connect-by hierarchy oracle11gr2

13
推荐指数
2
解决办法
893
查看次数

这是一个PL/SQL错误吗?

以下是一些PL/SQL代码的摘录,我相信这些代码演示了PL/SQL错误:

if guid_ is null then
   dbms_output.put_line('guid_ is null: ' || guid_);
end if;
Run Code Online (Sandbox Code Playgroud)

执行这些行时,将打印

guid_ is null: 07D242FCC55000FCE0530A30D4928A21
Run Code Online (Sandbox Code Playgroud)

我在Oracle 11R2上

select * from v$version;

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
Run Code Online (Sandbox Code Playgroud)

我可以使用以下类型和匿名块重现这一点.对不起,但我相信我不能再缩短它了:

create type tq84_t as table of varchar2(32);
/

create type tq84_o as object (
  dummy number(1),

  not final member procedure clear

) …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11gr2

12
推荐指数
1
解决办法
321
查看次数

寻找最长的连胜纪录

我有以下格式的数据.

match_id   team_id   won_ind
----------------------------
37          Team1    N
67          Team1    Y
98          Team1    N
109         Team1    N
158         Team1    Y
162         Team1    Y
177         Team1    Y
188         Team1    Y
198         Team1    N
207         Team1    Y
217         Team1    Y
10          Team2    N
13          Team2    N
24          Team2    N
39          Team2    Y
40          Team2    Y
51          Team2    Y
64          Team2    N
79          Team2    N
86          Team2    N
91          Team2    Y
101         Team2    N
Run Code Online (Sandbox Code Playgroud)

这里match_id按时间顺序排列,37是第一个,217是team1最后一场比赛.won_ind表明球队是否赢了比赛.

所以,从上面的数据来看,team1已经输掉了第一场比赛,然后赢了一场比赛,然后输掉了2场比赛,然后赢了4场比赛,依此类推.现在我有兴趣为每支球队找到最长的连胜纪录.

Team_id   longest_streak
------------------------ …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11gr2

11
推荐指数
3
解决办法
4483
查看次数

将Oracle XMLType存储为BINARY XML时有多大

Oracle文档声称它将XMLType存储为BINARY XML而不是CLOB.但是如何找出二进制xml占用了多少空间?

CREATE TABLE t (x XMLTYPE) XMLTYPE x STORE AS BINARY XML;

SELECT vsize(x), dbms_lob.getlength(XMLTYPE.getclobval(x)) FROM t;

94 135254
94  63848
94  60188
Run Code Online (Sandbox Code Playgroud)

因此,vsize似乎是某种指针或LOB定位器的大小,并将getclobval二进制XML解包为文本.但是二进制XML本身的存储大小呢?

请帮忙,表大小为340GB,所以值得研究存储选项......

xml sql oracle oracle11gr2

11
推荐指数
1
解决办法
6616
查看次数

Oracle 11GR2 TKPROF - 如何捕获递归调用树

目的

找出一种在TKPROF输出中可视化捕获递归调用树的方法(指定SYS = YES).

环境

Oracle Database 11g企业版11.2.0.1.0版 - 64位生产
Windows 7 64位DELL Latitude核心i7 2.8GHz 8G内存和SSD硬盘

背景

我正在尝试理解索引和性能指示的影响,如问题Oacle 11G - 插入时索引的性能影响.

要进一步了解场景背后发生的索引,请在create index语句上运行SQL跟踪.

执行

在索引创建上运行跟踪(SQL到底部)并使用"sys = yes"选项运行tkprof.

SQL> ALTER TABLE TBL2 ADD CONSTRAINT PK_TBL2_COL1 PRIMARY KEY(COL1) ;
Table altered.
Elapsed: 00:00:01.75

> trcsess clientid="CREATE_INDEX" output="report_createindex.trc" *.trc
> tkprof createindex.trc output=createindex.txt sys=yes
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以使用tkprof或其他工具从trace(.trc)文件中捕获调用层次结构,如解释计划.

生成的报告包括递归调用,例如"ALTER TABLE TBL2 ADD",导致"INDEX BUILD UNIQUE",并且可能还有进一步的sys递归调用.我想输出不会反映出调用层次结构(父亲优先,紧随其后的子节点).

TKPROF输出

SQL ID: 2w9c2khpsfj4m
Plan Hash: 3219312727
CREATE UNIQUE INDEX "TRY"."PK_TBL2_COL1" on "TRY"."TBL2"("COL1") NOPARALLEL


call     count       cpu    elapsed       disk …
Run Code Online (Sandbox Code Playgroud)

oracle recursion trace oracle11g oracle11gr2

11
推荐指数
1
解决办法
1230
查看次数

DBMS_DATA_MINING.CREATE_MODEL导致 "ORA-40103:无效的情况下,ID列:TID" 的11.2.0.1.0 64B,但万兆OK

我在版本11.2上遇到DBMS_DATA_MINING.CREATE_MODEL问题.在10g这个代码下面的代码运行正常,我很确定在11.1上它也有效.

CREATE OR REPLACE VIEW "SH"."ITEMS" AS SELECT PROD_ID AS item FROM SALES GROUP BY PROD_ID;
CREATE OR REPLACE VIEW "SH"."TRANSACTIONS" AS SELECT "SH"."SALES"."PROD_ID" AS item , "SH"."SALES"."CUST_ID" tid FROM "SH"."SALES" where cust_id between 100001 AND 104500 GROUP BY cust_id, prod_id;
CREATE TABLE "SH"."AR_SETTINGS" ( "SETTING_NAME" VARCHAR2(30 BYTE), "SETTING_VALUE" VARCHAR2(128 BYTE) );
INSERT INTO SH.AR_SETTINGS (SETTING_NAME, SETTING_VALUE) VALUES ('ASSO_MAX_RULE_LENGTH', '6' );
INSERT INTO SH.AR_SETTINGS (SETTING_NAME, SETTING_VALUE) VALUES( 'ASSO_MIN_CONFIDENCE', TO_CHAR(0.7));
INSERT INTO SH.AR_SETTINGS (SETTING_NAME, SETTING_VALUE) VALUES( 'ASSO_MIN_SUPPORT', TO_CHAR(0.1));

BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name …
Run Code Online (Sandbox Code Playgroud)

oracle data-mining oracle11g oracle11gr2

10
推荐指数
1
解决办法
1078
查看次数