Ensure data is physically deleted from a data file Consider the following:

You create a table space/data file for a table. You insert data into the table and this table has an index.

When you delete the data, it is possible that the data is not actually deleted from the data file. I wrote the program

#include &lt;stdio.h&gt;

int main()
{
   FILE *file = fopen("/some/file/name", "r");
   int ch;
   while ((ch = fgetc(file)) != EOF) {
     if (isprint(ch)) printf("%c", ch);
   }
}


This will display any printable characters. I have found that sometimes the data still exists in the data file (on the OS level)

Is there a way of getting Oracle to zero this data?

EDIT

The URL to the posted question does not solve the problem - as stated in one of the answers - This wouldn't work with indexes since updates are translated to delete+insert in a btree index.*
Where I work, we had this exact issue. I wrote code that read metadata tables and redacted information for people or companies on request. I also logged the id value for every person that we redact. Hence if we do bring back an old database we have the option of taking that metadata and redacting it in any backup that we restore. It would not be practical to bring back every backup, restore, redact people who want to be redacted, do a new backup and send the backup back offsite. We can think about the retention that were need for offsite backups. Ideally in the future we will separate the PII of people from the financial data that we need to keep longer. thus it would be easier to redact some data, but keep the data that we really need. You need more than a single answer. You need to build a framework on how to redact data and still know which data was redacted in case it needs to be redacted again.