oracle PK问题
我列出我全部的做法:
table a 有id1, str1, str2, str3
开始的pk是id1, str1, str2
希望改成id1, str1, str3
--问题
小弟先有如下问题:
一个表原来的PK是 id1+str1+str2 列
先修改成id1+str1+str3列
而这三列现在当前数据库的数据有重复的情况, 小弟现在用sql:
ALTER table a add
constraint PK_a primary key (id1,str1,str3)
USING INDEX
TABLESPACE ts
ENABLE NOVALIDATE;
但是还是提示会出错,哪位大虾给帮忙一下~~
急啊!在线等!!!!
我的步骤:
Alter table a drop primary key drop index;
ALTER table a add
constraint PK_a primary key (id1, str1, str3)
USING INDEX
TABLESPACE ts
ENABLE NOVALIDATE;
提示的错误:
SQL>
ALTER table evanpk add
2 constraint PK_evanpk primary key
(id1, str1, str2)
USING INDEX TABLESPACE WBXOBJ_LARGE_IDX
3 4 ENABLE NOVALIDATE;
constraint PK_evanpk primary
key (id1, str1, str2)
*
ERROR at line 2:
ORA-02437: cannot validate (TEST.PK_EVANPK) - primary key violated
回答----原因分析
SQL> create table t1(c1 number,c2 varchar2(10));
表已创建。
SQL> insert into t1 values(1,1);
已创建 1 行。
SQL> insert into t1 values(1,2);
已创建 1 行。
SQL> alter table t1 add constraint pk_t1 primary key(c1) enable
novalidate;
alter table t1 add constraint pk_t1 primary key(c1)
enable novalidate
*
第 1 行出现错误:
ORA-02437: 无法验证 (TEST.PK_T1) - 违反主键
SQL> create
index idx_t1 on t1(c1);
索引已创建。
SQL> alter table
t1 add constraint pk_t1 primary key(c1) using index idx_t1 enab
le
novalidate;
表已更改。
相关文档:
SQL的优化应该从
5
个方面进行调整:
1.去掉不必要的大型表的全表扫描
2.缓存小型表的全表扫描
3.检验优化索引的使用
4.检验优化的连接技术
5.尽可能减少执行计划的
Cost
SQL语句:
是对数据库(
数据
)
进行操作的惟一途径;
消耗了70%~90%
的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化, ......
ORACLE 数据库对象
——索引
q 索引是与表相关的一个可选结构
q 用以提高 SQL 语句执行的性能
q 减少磁盘I/O
q 使用 CREATE INDEX 语句创建索引
q &n ......
程序包
包主体/规范名字一样
包主体/规范中的对应参数必须类型及名字一样
只能使用强类型的REF游标
创建程序包规范
create or replace package my_pack
is
procedure find_emp_proc(eno emp.empno%type);
function fin ......
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=OraOLEDB.Oracle.1;Persist Security Info= ......
不错的资料,转过来,方便日后查看使用!!!
--监控索引是否使用
alter index &index_name monitoring usage;
alter index &index_name nomonitoring usage;
select * from v$object_usage where index_name =
&index_name;
--求数据文件的I/O分布
select
df.name,phyrds,phywrts,phyblkrd,phyblkwrt,sin ......