Disable all constraints of a table

During maintenance, I had to disable all constraints of a table. I knew that Oracle SQL Developer (I really like it even though it is a developer tool and not aimed at Database Administrators) had built-in functions to do this, but since I could only access the database machine via SSH, I had to do it in SQL*Plus.

Luckily, SQL Developer is quite transparent about the commands it uses and I could therefore easily see what is going on when you disable all constraints on a table using the GUI. So here it goes…

Disable all constraints of a table:

begin
	for cur in (select owner, constraint_name , table_name 
		from all_constraints
		where owner = 'SIMON' and
		TABLE_NAME = 'MY_TABLE') loop
	  execute immediate 'ALTER TABLE '||cur.owner||'.'||cur.table_name||' 
	  MODIFY CONSTRAINT "'||cur.constraint_name||'" DISABLE ';
   end loop;
end;
/

Remember to enable the constraints again before ending maintenance or else you might end up with a logically inconsistent database:

begin
	for cur in (select owner, constraint_name , table_name 
		from all_constraints
		where owner = 'SIMON' and
		TABLE_NAME = 'MY_TABLE') loop
	  execute immediate 'ALTER TABLE '||cur.owner||'.'||cur.table_name||'
	  MODIFY CONSTRAINT "'||cur.constraint_name||'" ENABLE ';
   end loop;
end;

Hello world

My name is Simon Krenger, I am a Technical Account Manager (TAM) at Red Hat. I advise our customers in using Kubernetes, Containers, Linux and Open Source.

Elsewhere

  1. GitHub
  2. LinkedIn
  3. GitLab