首页 | 摘要显示 | 上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下一页

Oracle Archives

October 1, 2006

如何杀掉Windows上Oracle的Server线程?

    有时会遇到Oracle的会话挂起并占用大量CPU的情况, 用kill session也没有用, 当然这时有可能在做一些会话级的ROLLBACK的操作, 如果遇到这种情况还是等等吧, 否则你可以强行杀掉Server进程(Windows是线程), 在Linux/Unix的进程是很容易杀的, 在Windows下则可以用Oracle提供的orakill命令, 使用语法如下:

Usage:  orakill sid thread

  where sid    = the Oracle instance to target
        thread = the thread id of the thread to kill

  The thread id should be retrieved from the spid column of a query such as:

        select spid, osuser, s.program from
        v$process p, v$session s where p.addr=s.paddr

    这个说明已经很清楚了, 我很少接触Windows上的库, 所以没有遇到.

October 3, 2006

体验一下数据仓库(OLAP)中的立方体(Cube)

    04年以前的一段时间, 我接触数据仓库系统比较多, 在空余的时间中, 用Java写了一个简单的, 功能很弱的ROLAP示例程序, 现在想想还是比较有意思的, 因为越来越写不动程序了, 所以只好回忆一下以前的程序了. 这个程序是用Oracle 9i中SH用户下的表来做演示的, 如果你的Oracle中装了这些演示用户, 你可以试试.

    首先下载My OLAP Viewer, 并解压到安装目录就可以了.

    其次请在sh用户下运行script目录下的两个SQL角本, OLAP.SQL用于创建这个程序用的一些表, 这些表用于记录OLAP中的立方体(Cube)的结构信息; CUBESALES.SQL通过在刚创建的表中插入一些记录, 来创建一个立方体.

    第三请运行myolap.exe, 在弹出的连接框中输入以下信息, 然后点击确定:

Database Type: oracle
Database Info: <host>:1521:<oracle_sid>
User ID      : sh
User Password: *****

    第四步请在左边选中Cubes下面的"销售分析"这个结点, 然后在Operation菜单中点击"Open Cube"菜单, 就可以查看这个立方体了. 在我的本本上只装了XE, 所以没有办法贴图上来, 等假日后我找个库玩玩.

    通过数据库中的表来进行立方体的查询, 这样的立方体叫做关系OLAP(ROLAP), 在Oracle中可以通过实体化视图(Materialized View)和维(Dimemsion)来优化较大数据量下查询的速度.

    Oracle的Discovery也是一个ROLAP的查看工具, 当然它的功能强多了, 不过原理相同. 我的这个工具也支持其他的数据库.

October 9, 2006

利用维对象来优化数据仓库的高级技巧

    在Oracle的数据仓库(OLAP)中, 实体化视图(MVIEW), 查询重写(Query Rewrite)和维(Dimension)是非常重要的优化手段, 对于前两者我不想在这儿重复讲了, 主要来体验一下维的作用. 要发挥维的作用, 还是需要用到前面两者, 下面是我设计的只有一个维表的最简单的例子. 数据库用户除了connect, resource外, 还要给予Query Rewrite, Create Materialized View, Create Dimension权限.

    1, 创建一个维护表.

CREATE TABLE TIME_DIM
AS
  SELECT TO_CHAR(SYSDATE+ROWNUM,'YYYY') F_YEAR,
         TO_CHAR(SYSDATE+ROWNUM,'YYYY-Q') F_QUATER,
         TO_CHAR(SYSDATE+ROWNUM,'YYYY-MM') F_MONTH,
         TRUNC(SYSDATE+ROWNUM,'DD') F_DAY
  FROM DBA_OBJECTS
  WHERE ROWNUM < 1000;
ALTER TABLE TIME_DIM MODIFY F_YEAR NOT NULL;
ALTER TABLE TIME_DIM MODIFY F_QUATER NOT NULL;
ALTER TABLE TIME_DIM MODIFY F_MONTH NOT NULL;
ALTER TABLE TIME_DIM MODIFY F_DAY NOT NULL;
ALTER TABLE TIME_DIM ADD PRIMARY KEY (F_DAY);

    2, 创建一个事实表.

CREATE TABLE FACT_SALES
AS
  SELECT TRUNC(SYSDATE+ROWNUM,'DD') F_DAY,
         TRUNC(DBMS_RANDOM.VALUE * 10000,2)  M_AMOUNT1,
         TRUNC(DBMS_RANDOM.VALUE * 10000,2)  M_AMOUNT2
  FROM DBA_OBJECTS
  WHERE ROWNUM < 1000;

-- Please execute the following insert multiple times
INSERT INTO FACT_SALES
  SELECT F_DAY,
         TRUNC(DBMS_RANDOM.VALUE * 10000,2)  M_AMOUNT1,
         TRUNC(DBMS_RANDOM.VALUE * 10000,2)  M_AMOUNT2
  FROM FACT_SALES
/  

ALTER TABLE FACT_SALES MODIFY F_DAY NOT NULL;
ALTER TABLE FACT_SALES ADD FOREIGN KEY (F_DAY) REFERENCES TIME_DIM(F_DAY);

    3, 将数据按月份进行汇总生成中间表.

阅读全文

October 11, 2006

数据库优化中什么是星型转换(Star Transform)?

    在数据仓库中经常查询的SQL总带有下列特征:

  • 几个表进行关联
  • 只有一个数据量巨大的表, 称为事实表
  • 其他的都是编码表, 称为维表
  • 维表和事实表之间有主外键关系

    假设有D1(key1),D2(key2),D3(key3),D4(key)四个小的维表和一个事实表F(key1,key2,key3,key4), 那么经常进行的查询将是:

SELECT
  D1.xxx, D2.xxx, D3.xxx, D4.xxx,
  SUM(F.xxx), SUM(F.xxx)
FROM F, D1, D2, D3, D4
WHERE F.KEY1=D1.KEY1 AND F.KEY2=D2.KEY2
  AND F.KEY3=D3.KEY3 AND F.KEY4=D4.KEY4
  AND D1.xxx=? AND D2.xxx=?
  AND D3.xxx=? AND D4.xxx=?
GROUP BY D1.xxx, D2.xxx, D3.xxx, D4.xxx

    而为了提高查询速度, 根据数据特征, key1,key2,key3,key4这四个字段会比较适合每个字段上建一个位图索引(Bitmap Index), 但是上面的查询语句并不能用到位图索引, 除非是进行了星型转换, 这个转换需要将SQL转换成下面的格式:

阅读全文

October 14, 2006

Query Rewrite的一般理解之一

    Query Rewrite 在数据仓库是是一个非常有用的技术, Tom在<<Effective Oracle by Design>>一书中将实体化视图(MView)称为是数据仓库的索引, 这是再贴切不过的了, 在OLTP中当SELECT语句的所有的字段都在索引中时, Oracle可以不从表读数据, 而直接从索引中获得全部信息, 而Query Rewrite则是通过创建中间表, 让Oracle自动从创建的中间表读取数据, 而不需要从原表读取了, 这个中间表可以是预先join好的或预先计算好的中间结果. 他的使用就和一般的索引同理了, 虽然你指定的还是那个大表, 但oracle可以为你自动识别可以从那个"数据仓库索引"中读取数据. 下面我们可以来看一下最简单的例子:

SQL> CREATE TABLE DETAIL_TABLE                                    
  2  AS SELECT OWNER,OBJECT_NAME FROM sys.dba_objects; 

Table created.

SQL> DESC DETAIL_TABLE
 Name                               Null?    Type 
 ---------------------------------- -------- --------------
 OWNER                                       VARCHAR2(30)
 OBJECT_NAME                                 VARCHAR2(128)

SQL> CREATE MATERIALIZED VIEW MID_TABLE ENABLE QUERY REWRITE
  2  AS
  3  SELECT OWNER,COUNT(*) TABCNT FROM DETAIL_TABLE GROUP BY OWNER;

Materialized view created.

SQL> DESC MID_TABLE
 Name                              Null?    Type
 --------------------------------- -------- --------------
 OWNER                                      VARCHAR2(30)
 TABCNT                                     NUMBER

阅读全文

上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 下一页

当前分类: Oracle

Creative Commons License
本站版权: 共用创作 CC
署名-非商业性-相同方式分享
本站基于MT-3.36免费版
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql