Alter primary key constraint - efficient way
Please let me know the efficient way to alter the primary key constraint in a table(it has millions of records).
Thanks.
Do you want to have a NCI on PK instead of CI? You have to drop a constraint.. You know , a constraint is a logical component but the index (unique) that SQL Server creates behind the scene is a physical implementation...
Best Regards,Uri Dimant SQL Server MVP,
http://sqlblog.com/blogs/uri_dimant/
MS SQL optimization: MS SQL Development and Optimization
MS SQL Consulting:
Large scale of database and data cleansing
Remote DBA Services:
Improves MS SQL Database Performance
SQL Server Integration Services:
Business Intelligence
Similar Messages
-
Altering Primary Key constraint on a table i Oracle 10G
Hi All,
Can anyone tell me how to alter a primary key constraint on any table. My concern is that, suppose i have a table called 'Employee' where only 'EmployeeName' is added as a primary ket constaint. Now i want to alter this P.K. constarint to add 'EmployeeName' and 'DateOfBirth' as a primary key. Can anyone suggest me how can i achieve that? Any help will be highly appreciated.hi,
you need to drop the constraint and recreate it.
SQL> conn scott/tiger@alpspso
Connected.
SQL> create table test (id number constraint id_pk primary key,name varchar(30));
create table test (id number constraint id_pk primary key,name varchar(30))
ERROR at line 1:
ORA-00955: name is already used by an existing object
SQL> create table test_table (id number constraint id_pk primary key,name varchar(30))
Table created.
SQL> alter table test_table modify constraint id_pk primary key(id,name);
alter table test_table modify constraint id_pk primary key(id,name)
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> alter table test_table modify constraint id_pk(id,name);
alter table test_table modify constraint id_pk(id,name)
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> alter table test_table modify primary key(id,name);
alter table test_table modify primary key(id,name)
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> alter table drop constraint id_pk;
alter table drop constraint id_pk
ERROR at line 1:
ORA-00903: invalid table name
SQL> alter table test_table drop constraint id_pk;
Table altered.
SQL> alter table test_table add constraint id_pk primary_key(id,name);
alter table test_table add constraint id_pk primary_key(id,name)
ERROR at line 1:
ORA-00902: invalid datatype
SQL> alter table test_table add constraint id_pk primary key(id,name);
Table altered.
Regards.
Navneet -
Altering Primary Key Constraint
hi this may sound silly .
but is it possible to alter a primary key constraint and add another column to it ?
eg. >desc t1
c1 number(3) not null
c2 number(3)
here I have created primary key on column c1.
Now I want to alter this constraint and add second column also as part of primary key constraint (so that it will be composite primary key )
How do i do that ? Do the column needs to be empty ?
ThanksYou should use ALTER TABLE DROP CONSTRAINT / ADD CONSTRAINT option.
Do the column needs to be empty ?Because primary key constraint supposes NOT NULL constraints for columns
included into primary key, all columns havn't to have nulls values (NOT NULL constraint will be added to c2 column):
SQL> create table t1 (c1 number(3) not null, c2 number(3));
Table created.
SQL> alter table t1 add constraint t1_pk primary key(c1);
Table altered.
SQL> insert into t1 values(1,1);
1 row created.
SQL> insert into t1 values(2,null);
1 row created.
SQL> commit;
Commit complete.
SQL> alter table t1 drop constraint t1_pk;
Table altered.
SQL> alter table t1 add constraint t1_pk primary key (c1,c2);
alter table t1 add constraint t1_pk primary key (c1,c2)
ERROR at line 1:
ORA-01449: column contains NULL values; cannot alter to NOT NULL
SQL> update t1 set c2 = 3;
2 rows updated.
SQL> alter table t1 add constraint t1_pk primary key (c1,c2);
Table altered.
SQL> desc t1
Name Null? Type
C1 NOT NULL NUMBER(3)
C2 NOT NULL NUMBER(3)Rgds. -
Large table, primary key constraint
I have migrated a table from 8i to 9i that is over 300 million rows. I migrated the the table to a 9i database without constraints or indexes.
I have successfully created a composite index of two columns, t1 varchar2(512), t2 varchar2(32). This index took nearly 16 hours to create.
I am now trying to create a primary key based on that index with the following sql:
alter table table1
add constraint table1_t1_t2_pk primary key(t1,t2)
using index table1_t1_t2_idx
nologging
This process has taken over 24 hours and is well into the second day. Studio reports it will take an additional 15 hours to create.
My questions are these?
1. Is my syntax okay?
2. I thought that by creating a primary key on an existing index, that another index is not being created. I thought it would be faster this way. Why is it taking a lot longer to create then the index it is based upon?
3. Is there a more efficient method (other than parallel query) to create this index/constraint on such a large table? What happens when I go production and need to recreate this index if I have a failure. I have never had to do this before. I can't be down for 48 hours to create an index. What other alternatives do I have?
The table is partit[i]Long postings are being truncated to ~1 kB at this time.Is INDEX table1_t1_t2_idx UNIQUE? If it's not that might explain why building the primary key constraint takes longer.
I think the USING INDEX clause with an existing index is intended mainly for different UNIQUE constraints to share the same index. In your situation I think you would be better off just building the primary key constraint.
Cheers, APC -
dear members,
I have a tables named orders and part. Both of them contain common column named partnum. The column partnum in the table orders contains duplicates. I tried to add a primary key constraint to that column partnum but sql*plus gave me an error unique constraint voilation.
The reason for the error was because of duplicates in the column partnum but if i want to assign a column as a primary key and suppose it contains duplicates then how can i do that ? I cannot alter my table orders data, in this case how should i proceed further!!!You cannot use a single column with duplicates or null values as a primary key. It's that simple.
If a given single column has duplicates values its not a possible candidate for a primary key. It has to be an unique value.
I'm not fully sure here but kinda feels like your table "orders" has information about all orders (purchase, sell, whatever) related with "parts". So, this way if its possible that orders has duplicates because you have several orders on the same "part". I think "part" has a primary key on "partnum". If there's a need for a pk in "orders" maybe you have an additional column, let's call it "ordernum". -
Modify a primary key constraint
Hi,
I'm starting with oracle, and I have two doubts that can't handle after searching on the internet.
1º It's possible to make an ALTER TABLE of a CONSTRAINT DEFAULT?. Maybe you think that the question should be in another way like this: Does oracle database take the default condition as a constraint?. As long as I know, doesn't do that.
2º It's possible, with an ALTER TABLE, to MODIFY a CONSTRAINT of a PRIMARY KEY, to add another more field?
I've been searching on the internet, but I didn't find a clear answer. I'm using oracle 10g express edition.
Thank you very much.
P.D.:Sorry for my english it's not very good.#2 - You can not 'add a column to the primary-key constraint of a table' with a single ALTER, but you can drop and re-create the primary key constraint (including the additional column).
13:25:26> create table t1 (a number primary key, b number, c number );
Table created.
Elapsed: 00:00:00.09
13:25:46> alter table t1 drop primary key;
Table altered.
Elapsed: 00:00:00.06
13:25:47> alter table t1 add primary key (a,b);
Table altered.
Elapsed: 00:00:00.09But you will not be able to drop the primary key of an index-organized table.
13:25:47> create table t2 (a number primary key, b number, c number ) organization index;
Table created.
Elapsed: 00:00:00.03
13:25:59> alter table t2 drop primary key;
alter table t2 drop primary key
ERROR at line 1:
ORA-25188: cannot drop/disable/defer the primary key constraint for
index-organized tables or sorted hash cluster
Elapsed: 00:00:00.00
13:25:59> #1 - I'm not sure I understand your question , but you can alter a table's column to have a default. This is not a 'constraint', but a default. It only has effect when you perform an insert which does not include that column.
13:31:23> alter table t1 modify (c default 3.14);
Table altered.
Elapsed: 00:00:00.04
13:31:24> insert into t1 (a,b,c) values (1,2,3);
1 row created.
Elapsed: 00:00:00.01
13:31:24> insert into t1 (a,b,c) values (4,5,NULL);
1 row created.
Elapsed: 00:00:00.00
13:31:24> insert into t1 (a,b) values(6,7);
1 row created.
Elapsed: 00:00:00.01
13:31:24> select * from t1;
A B C
1 2 3
4 5
6 7 3.14
3 rows selected.
Elapsed: 00:00:00.18 -
How add primary key constraint to already existing table with data
I want apply primary key constraint to already existing table with data
is there any command or way to doAlternatively, assuming you want to ensure uniqueness in your primary key column you can do this:
alter table <table name> add constraint <cons name> primary key (col1,col2) exceptions into <exception_table>
If the altter table statement fails this will populate the EXCEPTIONS table with the rows that contain duplicate values for (col1,col2).
You will need to run (or get a DBA to run) a script called UTLEXCPT.SQL (which will be in the $ORACLE_HOME/rdbms/admin directory) if you don't already have an EXCEPTIONS table.
Cheers, APC -
SQL Server - primary key constraint modify
Hi,
I have a table with many records. I wanted to modify the primary key constraint. The only way to alter the primary key constraint is to drop and create again. Please let me if it is right.
Can we create primary key constraint with NoCheck. Since we have lots of records in our table, creating primary key constraint takes more time because it is checking the existing data. Please provide your comments.
Thanks.>>I have a table with many records. I wanted to modify the primary key constraint. The only way to alter the primary key constraint is to drop and create again. Please let me if it is right.
http://technet.microsoft.com/en-us/library/ms181043(v=sql.105).aspx
Note
To modify a PRIMARY KEY constraint, you must first delete the existing PRIMARY KEY constraint and then re-create it with the new definition.
>>Can we create primary key constraint with NoCheck. Since we have lots of records in our table, creating primary key constraint takes more time because it is checking the existing data. Please provide your comments.
http://msdn.microsoft.com/en-IN/library/ms188066.aspx
When FOREIGN KEY or CHECK constraints are added, all existing data is verified for constraint violations unless the WITH
NOCHECK option is specified. If any violations occur, ALTER TABLE fails and an error is returned. When a new PRIMARY KEY or UNIQUE constraint is added to an existing column, the data in the column or columns must be unique. If duplicate values are found, ALTER
TABLE fails. The WITH NOCHECK option has no effect when PRIMARY KEY or UNIQUE constraints are added.
Satheesh
My Blog |
How to ask questions in technical forum -
DISABLE primary key constraint
Hello,
let me know whats meaning by this....
Here, it creates a primary key and disable it... So whats the purpose of doing this...
(defines and disables an integrity constraint)
Constraint is DISABLED. is it in VALIDATE state / NO-VALIDATE state)
CREATE TABLE emp (
empno NUMBER(5) PRIMARY KEY DISABLE, . . . ;
ALTER TABLE emp
ADD PRIMARY KEY (empno) DISABLE;
Thanks
Edited by: Zerandib on Nov 12, 2008 6:47 AMHaving just done this this morning, let me have a go at explaining one possible use for this feature:
I am bulk-loading some data into a table. I know that some of the rows in that data duplicates other rows, and that I need to clean out those duplicates.
The quickest way of detecting duplicates I know of is to attempt to switch on a primary or unique key constraint and have the duplicate records written out to an EXCEPTIONS table. Therefore, I create my loading table with a primary key constraint DISABLED, so that I can actually perform the data load which I know will violate the constraint. If I'd created it enabled, which is the default, the bulk load would never be able to insert anything into the table, after all. When the load is finished, I do this:
alter table bulk_load enable constraint bulk_load_pk exceptions into exceptions;...and then I can use other techniques to use the new contents of the EXCEPTIONS table to work out which rows from the BULK_LOAD table to delete to clear out the duplicates.
All constraints when first created are in the enabled validate state, unless you specify otherwise. If you miss out the validate/novalidate keyword, in other words, your constraint will be created as VALIDATE.
Hope that helps a little. -
Unable to enforce Primary Key constraint with my code
Hi Guys
I have a table that contains 2 columns: code and description (defined as not null). I am using oracle forms 10g, if I inset a new row both the columns: code and description should have data e.g. code: 001 and description: Main Store...
So on forms I have an on-update trigger on block level that handles the error messages but if the user has to update the description this trigger blocks him because the value for the code i.e. 001 is already on the database but if I remove the piece of code (the first IF block on my code together with a cursor and the entire declaration section)then the primary key constraint is violated: the code is as follows:
declare
v_store_code store_types.code%type;
cursor store_codes is
select a.code
from store_types a
where a.code = :b1.code;
begin
open store_codes;
fetch store_codes into v_store_code;
if ( store_codes%found ) then
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
close store_codes;
raise form_trigger_failure;
end if;
close store_codes;
if :b1.code is not null and :b1.description is null then
message('If the Store Code has been captured, then the Store Description must be captured!');
message('If the Store Code has been captured, then the Store Description must be captured!');
raise form_trigger_failure;
end if;
if :b1.description is not null and :b1.code is null then
message('If the Store Description has been captured, then the Store code must be captured!');
message('If the Store Description has been captured, then the Store code must be captured!');
raise form_trigger_failure;
end if;
exception
when others then
message(sqlerrm);
raise form_trigger_failure;
end;
My main intention here is: the user should be able to update the description field and save the changes without violating primary key on the column: code ...... please help me guys...ICM
Sir as far I could understand , your problem is that your wanna allow the end users to update the Store_description , and Store_code..
So on forms I have an on-update trigger on block level that handles the error messages but if the user has to update the description this trigger blocks him because the value for the code i.e. 001 is already on the databaseif it's right then why don't you have unique key constraints Store_description?
alter the tables and apply unique key constraint...
and no need to write this code
f :b1.code is not null and :b1.description is null then
message('If the Store Code has been captured, then the Store Description must be captured!');
message('If the Store Code has been captured, then the Store Description must be captured!');
raise form_trigger_failure;
end if;because as you mentioned
code and description (defined as not null)if they are already under not null constraints then no need to handle this in coding..
he/she must be able to change the description and save the changes without affecting the code i.e.:Sir I think updation in records can only be performed when the forms is in query mode e.g execute query, have all/desired records and then make changes
(1)description is in unique key constraint it can't be duplicated ..
(2)code is PK it can never be duplicated...
for this I would suggest you to have a update button on forms , when-button-pressed trigger sets property of block (update_allowed, property_true);
and check the code of unique key violation code from oracle form's help , when that error code raise up you can show those message
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');
Message('The Store Code you have entered already exists on the Store_Types table, please enter another code!');I hope it could do something for you
thanks
regards:
usman noshahi -
I have migrated my SCCm 2007 environment to SCCM 2012 SP1 CU4.
I noticed in the System Status\Component Status\SMS_STATE_SYSTEM a lot of errors like the one below:
Microsoft SQL Server reported SQL message 2627, severity 14: [23000][2627][Microsoft][SQL Server Native Client 11.0][SQL Server]Violation of PRIMARY KEY constraint 'DeploymentSummary_PK'. Cannot insert duplicate key in object 'dbo.DeploymentSummary'. The duplicate key value is (1, 0, S0220438, 0). : spUpdateClassi
Please refer to your Configuration Manager documentation, SQL Server documentation, or the Microsoft Knowledge Base for further troubleshooting information.
When looking up the deployment ID and recreate the Deployment the problem is solved. But I have 700 packages and don't want to manually do this action on all packages. I think it is related to the migration i did and something went wrong there :-(
Besides it will retriggers the deployment to the clients which is also not preferred.
Is there another way to solve this by e.e.g do something directly in the SQL database tables ?Hi,
It is not supported by Microsoft that do something directly in SQL database.
If you want to do that, you could make a call to CSS.
Best Regards,
Joyce
We
are trying to better understand customer views on social support experience, so your participation in this
interview project would be greatly appreciated if you have time.
Thanks for helping make community forums a great place. -
Violation of PRIMARY KEY constraint in JDBC receiver
Hi Experts !
I am configuring a JDBC Receiver. I need to insert the records and if the same record is coming again i need to update the records in my database.So I have used action "UPDATE_INSERT". But now I am getting the error,
"Violation of PRIMARY KEY constraint-Cannot insert duplicate key in object " .. Pls help me out !!! It is very urgent!!
Thanks,
LaawanyaLawanya,
It seems that you are trying to update the primary key itself..
One thing is sure The error is related to data....
Do this at JDBC receiver Communication channel :
Under advanced option : use parameter "logSQLParameter" and use value "TRUE"...by this way you will be able to see the values passing through JDBC receiver .
And then check whether the same value exist in Table or not...
Feel free to ping for further clarification..
Regards, -
Violation of PRIMARY KEY constraint
Hello,
I have the following table in my oracle database :
create table FLTRPTDATA
esn VARCHAR2(10) default 'ALL' not null,
periodid NUMBER not null,
yearid NUMBER default 2007 not null,
reportid NUMBER not null,
entryid NUMBER not null,
operatorid VARCHAR2(30) default 'XXX' not null,
param1 VARCHAR2(200),
param2 VARCHAR2(200),
param3 VARCHAR2(200),
param4 VARCHAR2(200),
param5 VARCHAR2(200),
param6 VARCHAR2(200),
param7 VARCHAR2(200),
param8 VARCHAR2(200),
param9 VARCHAR2(200),
param10 VARCHAR2(200),
acid VARCHAR2(8) default 'ALL' not null
and also have a composite primary key for the table as follows :
add constraint PK_FLTRPTDATA primary key (ESN, PERIODID, YEARID, REPORTID, ENTRYID, OPERATORID, ACID)
using index
So I expect that I can only insert a new row into the table if the combination of values for ESN,PERIODID,YEARID,REPORTID,ENTRYID,OPERATORID and ACID are unique.
I am running some software that inserts new rows into the table (via an INSERT SQL statement).
When the software runs, it inserts a certain number of rows, but then stops when inserting one of the rows with a Violation of PRIMARY KEY constraint 'PK_FLTRPTDATA'. Cannot insert duplicate key in object 'fltRPTDATA' error.
This implies that the row being inserted contains values for the composite key columns that are NOT unique. However, when I look at the data it fails to insert, I can see that there are NO rows in the table for this combination of column values.
If I then try to MANUALLY insert the same row myself (via my own SQL statement in SQL Developer), the row is inserted with no error.
When I run the software, the first thing it does is delete any rows in the table that it will subsequently insert, so there cannot be any duplicate entries in the table before the inserts take place. I have run the SQL statement that does the deletion myself manually, and it does delete all of the relevant rows.
I have checked the code (I am not the author), and I cannot see anything that would cause the same INSERT to be executed twice.
I have checked the log file generated by the software, and the INSERT is only attempted once (according to the log).
I don't understand why the insert fails when I run the software, and I am wondering if anyone can shed any light on the issue? Has anyone seen this scenario before where you get a PRIMARY KEY constraint violation on a composite key, where the data being inserted IS unique?
Thanks for any help and apologies if this is in the wrong forum,
Jason.>
I don't understand why the insert fails when I run the software, and I am wondering if anyone can shed any light on the issue? Has anyone seen this scenario before where you get a PRIMARY KEY constraint violation on a composite key, where the data being inserted IS unique?
>
One way to find those records would be to create and use a dml error log table. Then those records would get logged to the log table and would not prevent the insert of the valid records.
See Loading Tables in the DBA Guide
http://docs.oracle.com/cd/E11882_01/server.112/e17120/tables004.htm#InsertDMLErrorLogging
Then you can examine the records in the log table and see why they were rejected. -
Primary key constraint for index-organized tables or sorted hash cluster
We had a few tables dropped without using cascade constraints. Now when we try to recreate the table we get an error message stating that "name already used by an existing constraint". We cannot delete the constraint because it gives us an error "ORA-25188: cannot drop/disable/defer the primary key constraint for index-organized tables or sorted hash cluster" Is there some sort of way around this? What can be done to correct this problem?
What version of Oracle are you on?
And have you searched for the constraint to see what it's currently attached to?
select * from all_constraints where constraint_name = :NAME; -
Modifying column adding primary key constraint
how can we alter a table and modify a column and add a primary key constraint to it??
987018 wrote:
can't we add a primary key constraint using the modify command?If the column already exists, and ther is no existing primary key, then
SQL> create table t (id number, descr varchar2(10));
Table created.
SQL> alter table t modify (id not null primary key);
Table altered.If the column does not yet exist and ther is no primary key then:
SQL> create table t1 (descr varchar2(10));
Table created.
SQL> alter table t1 add (id number not null primary key);
Table altered.John
Maybe you are looking for
-
How to make plant mandatory field in Sales order thru standard SAP process
Hello, There is requirement in business that User wants to make plant field Mandatory in Sales order line item once material number is entered. Can you please guide me how I can make Plant field mandatory thru Standard SAP process. I had checked it t
-
Hi all, I have a requirement to provide CSV output with RTF template. When i export, its save in txt format in default. Is ther any other way to save the file directly in CSV format. I have used some codes in rtf to bring dynamic concept. I am using
-
how can i connect my g5 dp 1.8 to a composite rca tv connector is there a dvi converter or is there a card i can add
-
Can't locate originals; but have aliases for album
I can access aliases in Finder for photos from an album, but I cannot open them because I get the diaglog box saying "can't open because originals are missing" (that's paraphrasing, obviously). Are the aliases any good for recovering the originals? O
-
Not executing the job automatically scheduled in dba_scheduler_jobs
Hi Friends, I have scheduled a job in dba_scheduler_jobs ,it should run on every 15 mins intervel , But it is not happening.If I trigger the job by manually .. like exec dbms_scheduler.run_job('SNAP15MIN_JOB') , executing successfully. please fiind t