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;
表已更改。
相关文档:
自己整理了下Oracle的数据库备份方案,用过冷备份。其他没有测试过
一、 导出/导入(Export/Import)
利用Export可将数据从数据库
中提取出来,利用Import则可将提取出来的数据送回到Oracle
数据库中去。
1、 简单导出数据(Export)和导入数据(Import):
Oracle支持三种方式类型的输出:
(1)、表方式(T方 ......
Create directory让我们可以在Oracle数据库中灵活的对文件进行读写操作,极大的提高了Oracle的易用性和可扩展性。
其语法为:
CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';
本案例具体创建如下:
create or replace directory exp_dir as '/tmp';
目录创建以后,就可以把读写权限授予特定用户 ......
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=OraOLEDB.Oracle.1;Persist Security Info= ......
OleDbConnectioncon=newOleDbConnection(cnnstr);
try
{
con.Open();
}
catch
{}
OleDbCommandcmd=newOleDbCommand(strSQL,con);
System.Data.OleDb.OleDbDataReaderdr=cmd.ExecuteReader();
while(dr.Read())
{
stringdd=dr["gggg"].ToString();
byte[]ooo=(byte[])dr["hhhh"];
stringstr;
str=Sys ......
不错的资料,转过来,方便日后查看使用!!!
--监控索引是否使用
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 ......