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

Oracle Archives

多个列的Range分区时, 记录会到哪个分区?

    今天网友问了我一个关于多个列的Range分区的问题, 说是记录没有进入到他想要的分区, 由于在实际应用中我还没有用过这样的分区, 在理解那条记录要进入那个分区时, 还真有点难, 在一个列时, 是用小于来判断的, 那多个列时, 不是每个列都是用小于来判断的. 作为一个组合字段, 前导的字段是用小于等于来排序的, 我们可以想着"A2 < A3 < B2 < B3", 这时插入A1时, 五个值的排序是如何的呢? 按照字典的排序方法当然"A1"是最小的了, 而"A2"就进入了第二个分区.

    不知道我自已在说什么? 总之这种情况下不是两个列都是用小于来比较的.

create table t (c1 date,c2 number) partition by range(c1,c2)     
(
partition p11 values less than (to_date('20010201','yyyymmdd'),2),
partition p12 values less than (to_date('20010201','yyyymmdd'),3),
partition p21  values less than (to_date('20010301','yyyymmdd'),2),
partition p22  values less than (to_date('20010301','yyyymmdd'),3)
);

insert into t values (to_date('20010201','yyyymmdd'),1);
insert into t values (to_date('20010202','yyyymmdd'),2);

--结果第一条数据进了p11(期望是p21),第二条数据进了p21(期望是p22)

SQL> select * from t partition (p11);

C1                C2
--------- ----------
01-FEB-01          1

SQL> select * from t partition (p21);

C1                C2
--------- ----------
02-FEB-01          2

    那个网友还提议Oracle应当加入List+List的复合分区, 我想List+Hash也是有用的吧.

October 19, 2006

如何对MVIEW进行直接的DML操作来进行刷新?

    在我的机器上有一个MVIEW (MV_FACT_SALES), 直接更新肯定是不行的, 会报以下错误:

SQL> DESC MV_FACT_SALES
Name                    Null?    Type
----------------------- -------- -------------
F_MONTH                          VARCHAR2(7)
M_AMOUNT1                        NUMBER
M_AMOUNT2                        NUMBER

SQL> INSERT INTO MV_FACT_SALES VALUES ('3000-1',1500,1600);
INSERT INTO MV_FACT_SALES VALUES ('3000-1',1500,1600)
            *
ERROR at line 1:
ORA-01732: data manipulation operation not legal on this view

    但可以通过Exchange Partition的方法来更新MVIEW中的数据, 实现人为地刷新, 首先检查一下现在的MVIEW的状态:

SQL> SELECT STALENESS,STALE_SINCE FROM USER_MVIEWS;

STALENESS           STALE_SINCE
------------------- ------------
FRESH

    接下来创建一个只有一个分区的分区表, 用于实现分区交换:

阅读全文

November 4, 2006

ORA-27101: shared memory realm does not exist

    今日网友向我求教, 说是不加tnsname可以连接数据库, 而加了tnsname则出现标题中的错误, 他百思不得其解. 因为ping和tnsping都没有问题, 但用SQL*Plus去试时就是出错, 一开始我也有点不明白.

    我让他发了listener.ora, tnsnames.ora和alert_sid.log给我, 在初始化参数中发现了下面两行:

  instance_name = wds
  dispatchers   = (PROTOCOL=TCP) (SERVICE=wdsXDB)

    发现MTS设置的服务名为WDSDB, 而Listener中没有设置这个服务名, 于是我就怀疑是这个参数的问题, 检查了一下tnsnames.ora中的内容:

WDS =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ...)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = WDS)
    )
  )

    没有指定用专用(Dedicated)方式时, 默认会用共享连接, 因为MTS服务名为WDSXDB, 而Listener中并没有这个服务存在, 所以报错了, 向他建议加了"(SERVER = DEDICATED)"之后, 用SQL*Plus检查连接成功. 最后我们将DISPATCHERS参数去掉, 重启数据库, 并不出现以上问题了.

November 8, 2006

网络断了三天, Data Guard如何继续自动恢复?

    朋友问了这个问题, 其实我对Data Guard不熟, 但猜想在Oracle实现的日志传送中, 会将日志文件的信息存放在某个地方, 以便实现自动恢复. 现在遇到的问题是有部分日志只 能手工拷贝到Standby机器了, 只要将这些日志文件的信息注册进去然后应当就可以了吧. 想到这儿就查了Data Guard概念与命令手册(A96653.pdf/9i)一书, 找到了如下命令:

ALTER DATABASE REGISTER [OR REPLACE] [PHYSICAL | LOGICAL] LOGFILE filespec;

    对于每一个手工拷的日志都需要注册一下, 在这儿我们是Physical Standby, 所以命令为:

ALTER DATABASE REGISTER OR REPLACE PHYSICAL LOGFILE '文件路径';

    后面估计不需要做什么了吧, 只要再起动自动恢复进程就可以了吧. 对这些太不熟了...

December 5, 2006

连接数据库一定要配置tnsnames.ora文件吗?

    下面这个连接方式在8i/9i/10g的客户端下都可以连接:

C:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 5 17:40:22 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn anysql/anysql@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(Port=1521))(CONNECT_DATA=(SID=TEST)))
Connected.
SQL>

    Yong Huang提醒说10g中还有一种连接方式, 我就将JDBC中的写法用到这儿来了:

C:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 5 17:44:38 2006

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn anysql/anysql@localhost:1521/TEST
Connected.
SQL>

    如果你正在为客户端的配置发愁, 就试试这两种连接方式吧? OCI和Pro*C程序也可以这样连接的, 是Oracle网络层提供的这种功能.

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

当前分类: 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