Вы можете использовать следующую команду для удаления файлов данных в табличном пространстве:
ALTER TABLESPACE TS_DD_LHR DROP DATAFILE n; --n — номер файла данных
ALTER TABLESPACE TS_DD_LHR DROP DATAFILE '/tmp/ts_dd_lhr01.dbf';
Есть несколько замечаний по поводу этой команды:
① Этот оператор удалит файл на диске и обновит информацию в управляющем файле и словаре данных. Исходный серийный номер файла данных после удаления можно использовать повторно.
② Это утверждение можно использовать только в том случае, если соответствующий файл данных находится в режиме ОНЛАЙН. Если соответствующий файл данных находится в режиме OFFLINE, он доступен только для табличного пространства, управляемого по словарю (DMT), но не может использоваться для локально управляемого табличного пространства (LMT), в противном случае будет сообщено об ошибке «ORA-03264»: невозможно удалить автономный файл данных локально управляемое табличное пространство». Если файл данных находится в состоянии RECOVER, эту команду все равно нельзя использовать.
③ Вы не можете удалить первый файл данных, добавленный в табличное пространство, иначе будет сообщено об ошибке, например «ORA-03263: невозможно удалить первый файл табличного пространства TS_DD_LHR».
④Если табличное пространство содержит только один файл данных, файл данных не может быть удален, в противном случае будет сообщено об ошибке, например «ORA-03261: табличное пространство TS_DD_LHR имеет только один файл».
⑤Файл данных должен быть пустым, иначе будет сообщено: ORA-03262: файл непустой. Следует отметить, что значение непустого значения заключается в том, что ТАБЛИЦЕ назначается ЭКСТЕНТ, а не наличие в ТАБЛИЦЕ СТРОК. В настоящее время, если вы используете «DROP TABLE XXX;», это не сработает, вы должны использовать. «DROP TABLE XXX PURGE;» или используйте «PURGE TABLE» после использования «DROP TABLE XXX;» «Имя таблицы XXX в корзине»;», чтобы удалить таблицу в корзине, иначе место не будет освобождено и файл данных все равно не будет подлежит удалению.
⑥ Файлы данных табличного пространства СИСТЕМА не могут быть удалены, в противном случае будет сообщено об ошибке «ORA-01541: системное табличное пространство невозможно перевести в автономный режим; при необходимости выключите».
Следует отметить, что согласно официальной документации файлы данных табличного пространства в состоянии READ ONLY не могут быть удалены, однако эксперименты доказали, что их действительно можно удалить.
Чтобы удалить файлы данных, перейдите по ссылке: https://www.xmmup.com/oraclesuoxiaobiaokongjandefangfa.html.
Невозможно удалить файл данных из табличного пространства с помощью команды Alter Tablespace (код ID 1050261.1)
Аналогично удалению файлов данных существуют следующие команды («ИМЯ_ФАЙЛА» также можно заменить номером файла):
ALTER DATABASE DATAFILE 'FILE_NAME' OFFLINE;
ALTER DATABASE DATAFILE 'FILE_NAME' OFFLINE FOR DROP;--FOR также можно опустить
Следует отметить, что эта команда не удаляет файл данных, а лишь меняет статус файла данных на ВОССТАНОВЛЕНИЕ. Команда OFFLINE FOR DROP эквивалентна переводу файла данных в автономный режим и требует восстановления, а не удаления файла данных. Соответствующая информация о файлах данных также будет храниться в словаре данных и управляющих файлах.
Для режима архива нет разницы между «OFFLINE FOR DROP» и «OFFLINE», поскольку Oracle игнорирует опцию FOR DROP. Потому что после ОФФЛАЙН вам необходимо выполнить ВОССТАНОВЛЕНИЕ, прежде чем вы сможете перейти в ОНЛАЙН.
В режиме без архивирования можно выполнить только «OFFLINE FOR DROP». Если опция FOR DROP не добавлена, будет сообщено об ошибке «ORA-01145: немедленная работа в автономном режиме запрещена, если не включено восстановление носителя». Потому что в неархивном режиме нет архивного файла для выполнения операции ВОССТАНОВЛЕНИЯ. Если после OFFLINE скорость достаточно высокая и данные в онлайн-файле журнала Redo не были перезаписаны, то в этом случае операцию RECOVER все равно можно выполнить.
Если используется“ALTER DATABASE DATAFILE N OFFLINE DROP;
”Заказ,Файл данных не будет удален.,В настоящее время вы можете сначала выйти в ОНЛАЙН, а затем использовать «ALTER». TABLESPACE XXX DROP DATAFILE N;”удалить.Если выполнено“ALTER DATABASE DATAFILE N OFFLINE DROP;
”позже и вOSуровеньудалить Понятноданныедокумент,Тогда сначала вам нужно использовать“ALTER DATABASE CREATE DATAFILE N AS '/tmp/ts_dd_lhr02.dbf';
”добавитьданныедокумент,Затем выполните RECOVER и ONLINE, а затем используйте команду «ALTER TABLESPACE XXX DROP DATAFILE N;», если сгенерированный бревно файл утерян.,Тогда целевой файл уже невозможно будет восстановить.,В настоящее время табличное пространство можно только удалить.,Заказдля:“DROP TABLESPACE XXX INCLUDING CONTENTS AND DATAFILES;
”。
Пример 10 г выглядит следующим образом:
SYS@ora10g> create tablespace ts_dd_lhr datafile '/tmp/ts_dd_lhr01.dbf' size 10M;
Tablespace created.
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr01.dbf';
alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr01.dbf'
*
ERROR at line 1:
ORA-03261: the tablespace TS_DD_LHR has only one file
SYS@ora10g> alter tablespace ts_dd_lhr add datafile '/tmp/ts_dd_lhr02.dbf' size 10M;
Tablespace altered.
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr01.dbf';
alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr01.dbf'
*
ERROR at line 1:
ORA-03263: cannot drop the first file of tablespace TS_DD_LHR
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
Tablespace altered.
SYS@ora10g> ! ls -l /tmp/ts_dd_lhr0*
-rw-r----- 1 oracle oinstall 10493952 Jun 29 14:58 /tmp/ts_dd_lhr01.dbf
--------------------------------------------------
SYS@ora10g> alter tablespace ts_dd_lhr add datafile '/tmp/ts_dd_lhr02.dbf' size 10M;
Tablespace altered.
SYS@ora10g> alter database datafile '/tmp/ts_dd_lhr02.dbf' offline drop;
Database altered.
SYS@ora10g> ! ls -l /tmp/ts_dd_lhr02.dbf
-rw-r----- 1 oracle oinstall 10493952 Jun 29 15:17 /tmp/ts_dd_lhr02.dbf
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf'
*
ERROR at line 1:
ORA-03264: cannot drop offline datafile of locally managed tablespace
SYS@ora10g> alter database datafile '/tmp/ts_dd_lhr02.dbf' online;
alter database datafile '/tmp/ts_dd_lhr02.dbf' online
*
ERROR at line 1:
ORA-01113: file 9 needs media recovery
ORA-01110: data file 9: '/tmp/ts_dd_lhr02.dbf'
SYS@ora10g> recover datafile 9;
Media recovery complete.
SYS@ora10g> alter database datafile '/tmp/ts_dd_lhr02.dbf' online;
Database altered.
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
Tablespace altered.
SYS@ora10g> ! ls -l /tmp/ts_dd_lhr02.dbf
ls: cannot access /tmp/ts_dd_lhr02.dbf: No such file or directory
SYS@orclasm > create table t_ts_dd_lhr tablespace ts_dd_lhr as select * from dual;
Table created.
SYS@orclasm > truncate table t_ts_dd_lhr;
Table truncated.
SYS@orclasm >
SYS@orclasm > alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf'
*
ERROR at line 1:
ORA-03262: the file is non-empty
SYS@orclasm > drop table t_ts_dd_lhr;
Table dropped.
SYS@orclasm > alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf'
*
ERROR at line 1:
ORA-03262: the file is non-empty
SYS@orclasm > purge recyclebin;
Recyclebin purged.
SYS@orclasm > alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
Tablespace altered.
SYS@ora10g> create tablespace ts_dd_lhr datafile '/tmp/ts_dd_lhr01.dbf' size 10M;
alter tablespace ts_dd_lhr add datafile '/tmp/ts_dd_lhr02.dbf' size 10M;
Tablespace created.
SYS@ora10g> SYS@ora10g> SYS@ora10g>
Tablespace altered.
SYS@ora10g>
SYS@ora10g> alter tablespace ts_dd_lhr read only;
Tablespace altered.
SYS@ora10g> select * from dba_tablespaces;
TABLESPACE_NAME STATUS CONTENTS LOGGING
------------------------------ --------- --------- ---------
SYSTEM ONLINE PERMANENT LOGGING
UNDOTBS1 ONLINE UNDO LOGGING
SYSAUX ONLINE PERMANENT LOGGING
TEMP ONLINE TEMPORARY NOLOGGING
USERS ONLINE PERMANENT LOGGING
EXAMPLE ONLINE PERMANENT NOLOGGING
TS10GTEST ONLINE PERMANENT LOGGING
HHRIS ONLINE PERMANENT LOGGING
TS_DD_LHR READ ONLY PERMANENT LOGGING
9 rows selected.
SYS@ora10g>
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr01.dbf';
alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr01.dbf'
*
ERROR at line 1:
ORA-03263: cannot drop the first file of tablespace TS_DD_LHR
SYS@ora10g>
SYS@ora10g> alter tablespace ts_dd_lhr drop datafile '/tmp/ts_dd_lhr02.dbf';
Tablespace altered.
SQL>select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
----------------- ---------------------------------------------------
SYSTEM +DATA/oraee/datafile/system.260.870970687
SYSAUX +DATA/oraee/datafile/sysaux.261.870970721
UNDOTBS1 +DATA/oraee/datafile/undotbs1.262.870970751
UNDOTBS2 +DATA/oraee/datafile/undotbs2.264.870970801
USERS +DATA/oraee/datafile/users.265.870970831
EXIMTRX +DATA/oraee/datafile/eximtrx.270.871293623
EXIMUSER +DATA/oraee/datafile/eximuser.271.871293631
TS_EXIMTRX +DATA/oraee/datafile/ts_eximtrx.272.890144851
TS_EXIMTRX +DATA/oraee/datafile/ts_eximtrx.273.890146243
TS_EXIMUSER +DATA/oraee/datafile/ts_eximuser.274.892913553
TS_EXIMUSER /oracle/app/oracle/product/11.2.0/db/dbs/+DATAA
11г операция:
SQL>alter tablespace TS_EXIMUSER drop datafile '/oracle/app/oracle/product/11.2.0/db/dbs/+DATAA'; ---->Непризнанныйданныедокумент
SQL>alter database datafile 11 offline drop;
SQL> select file#,status,ts# from v$datafile;
FILE# STATUS TS#
---------- ------- ----------
1 SYSTEM 0
2 ONLINE 1
3 ONLINE 2
4 ONLINE 4
5 ONLINE 5
6 ONLINE 6
7 ONLINE 7
8 ONLINE 8
9 ONLINE 8
10 ONLINE 13
11 RECOVER 13 ---------->
SQL> recover datafile 11;
Media recovery complete.
SQL> select file#,status,ts# from v$datafile;
FILE# STATUS TS#
---------- ------- ----------
1 SYSTEM 0
2 ONLINE 1
3 ONLINE 2
4 ONLINE 4
5 ONLINE 5
6 ONLINE 6
7 ONLINE 7
8 ONLINE 8
9 ONLINE 8
10 ONLINE 13
11 OFFLINE 13
SQL> alter database datafile 11 online;
Database altered.
SQL> select file#,status,ts# from v$datafile;
FILE# STATUS TS#
---------- ------- ----------
1 SYSTEM 0
2 ONLINE 1
3 ONLINE 2
4 ONLINE 4
5 ONLINE 5
6 ONLINE 6
7 ONLINE 7
8 ONLINE 8
9 ONLINE 8
10 ONLINE 13
11 ONLINE 13 ----->данныедокументдолжно быть вONLINEсостояние
11 rows selected.
SQL> alter tablespace TS_EXIMUSER drop datafile 11;
Tablespace altered.
SQL> select file#,status,ts# from v$datafile;
FILE# STATUS TS#
---------- ------- ----------
1 SYSTEM 0
2 ONLINE 1
3 ONLINE 2
4 ONLINE 4
5 ONLINE 5
6 ONLINE 6
7 ONLINE 7
8 ONLINE 8
9 ONLINE 8
10 ONLINE 13
10 rows selected.
Если в файле данных есть данные, их необходимо сначала перенести и перестроить индекс.
1、Проверьте, есть лиданные:SQL> select owner,segment_name,tablespace_name from dba_extents where file_id=6;
2、ALTER TABLE table_name MOVE TABLESPACE tablespace_name;
3、index_rebuild
4、alter tablespace TT_TEST drop datafile 6;
Кроме того, если данные больше не нужны, вы можете рассмотреть возможность удаления соответствующей схемы. См. https://www.xmmup.com/oraclesuoxiaobiaokongjiandefangfa.html.