Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengecilkan tablespace temp di Oracle?

Ya Tuhan! Lihat ukuran ruang tabel sementara saya! Atau... cara mengecilkan ruang tabel sementara di Oracle.

Ya, saya menjalankan kueri untuk melihat seberapa besar tablespace sementara saya:

SQL> SELECT tablespace_name, file_name, bytes
2  FROM dba_temp_files WHERE tablespace_name like 'TEMP%';

TABLESPACE_NAME   FILE_NAME                                 BYTES
----------------- -------------------------------- --------------
TEMP              /the/full/path/to/temp01.dbf     13,917,200,000

Pertanyaan pertama yang harus Anda tanyakan adalah mengapa tablespace sementara begitu besar. Anda mungkin tahu jawabannya dari atas kepala Anda. Mungkin karena kueri besar yang baru saja Anda jalankan dengan jenis yang merupakan kesalahan (saya telah melakukannya lebih dari sekali.) Mungkin karena beberapa keadaan luar biasa lainnya. Jika itu masalahnya, maka yang perlu Anda lakukan untuk membersihkannya adalah mengecilkan ruang tabel sementara dan melanjutkan hidup.

Tapi bagaimana jika Anda tidak tahu? Sebelum Anda memutuskan untuk menyusut, Anda mungkin perlu melakukan beberapa penyelidikan tentang penyebab tablespace besar. Jika hal ini terjadi secara teratur maka mungkin saja database Anda hanya membutuhkan ruang sebesar itu.

Tampilan performa dinamis

V$TEMPSEG_USAGE

dapat sangat berguna dalam menentukan penyebabnya.

Mungkin Anda hanya tidak peduli dengan penyebabnya dan Anda hanya perlu mengecilkannya. Ini adalah hari ketiga Anda bekerja. Data di database hanya 200MiBif data dan tablespace sementara 13GiB - Kecilkan saja dan lanjutkan. Jika tumbuh lagi maka kita akan mencari penyebabnya. Sementara itu saya kehabisan ruang pada volume disk itu dan saya hanya membutuhkan ruang itu kembali.

Mari kita lihat mengecilkannya. Ini akan sedikit bergantung pada versi Oracle yang Anda jalankan dan bagaimana tablespace sementara diatur.
Oracle akan melakukan yang terbaik untuk mencegah Anda membuat kesalahan yang mengerikan, jadi kami hanya akan mencoba perintahnya dan jika tidak bekerja kami akan menyusut dengan cara baru.

Pertama mari kita coba mengecilkan file data. Jika kita bisa melakukannya maka kita mendapatkan kembali ruang dan kita bisa khawatir tentang mengapa itu tumbuh besok.

SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*   
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

Bergantung pada pesan kesalahan, Anda mungkin ingin mencoba ini dengan ukuran berbeda yang lebih kecil dari situs file saat ini. Saya memiliki keberhasilan terbatas dengan ini. Oracle hanya akan mengecilkan file jika tablespace sementara berada di kepala file dan jika lebih kecil dari ukuran yang Anda tentukan. Beberapa dokumentasi Oracle lama (mereka mengoreksi ini) mengatakan bahwa Anda dapat mengeluarkan perintah dan pesan kesalahan akan memberi tahu Anda ukuran apa yang dapat Anda kecilkan. Pada saat saya mulai bekerja sebagai DBA, ini tidak benar. Anda hanya perlu menebak dan menjalankan kembali perintah beberapa kali dan melihat apakah itu berhasil.

Baiklah. Itu tidak berhasil. Bagaimana dengan ini.

SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;

Jika Anda berada di 11g (Mungkin dalam 10g juga) ini dia! Jika berhasil, Anda mungkin ingin kembali ke perintah sebelumnya dan mencobanya lagi.

Tapi bagaimana jika itu gagal. Jika tablespace sementara adalah sementara default yang diatur ketika database diinstal, maka Anda mungkin perlu melakukan lebih banyak pekerjaan. Pada titik ini saya biasanya mengevaluasi kembali jika saya benar-benar membutuhkan ruang itu kembali. Lagi pula, ruang disk hanya berharga $X.XX per GiB. Biasanya saya tidak ingin melakukan perubahan seperti ini selama jam produksi. Itu berarti bekerja di 2AMAGAIN! (Bukannya saya benar-benar keberatan bekerja pada jam 2 pagi - hanya saja ... Yah, saya juga suka tidur. Dan istri saya suka saya di rumah jam 2 pagi ... tidak berkeliaran di jalan-jalan pusat kota pada jam 4 pagi mencoba mengingat di mana saya memarkir mobil saya. mobil 3 jam sebelumnya. Saya telah mendengar tentang hal "telecommuting". Saya hanya khawatir bahwa saya akan melewati setengah jalan dan kemudian konektivitas internet saya akan gagal - maka saya harus bergegas ke pusat kota untuk memperbaiki semuanya sebelum orang-orang muncul di pagi hari untuk menggunakan databasenya.)

Ok... Kembali ke hal-hal yang serius... Jika tablespace sementara yang ingin Anda kecilkan adalah tablespace sementara default Anda, Anda harus terlebih dahulu membuat temporarytablespace baru, atur sebagai tablespace sementara default lalu hapus tablespace sementara default lama Anda dan buat ulang dia. Penutup tabel sementara kedua dibuat.

SQL> CREATE TEMPORARY TABLESPACE temp2
2  TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3  AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

Database altered.

SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.


SQL> CREATE TEMPORARY TABLESPACE temp
2  TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3  AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Tablespace created.

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

Database altered.

SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

Semoga salah satu dari hal ini akan membantu!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih tanpa klausa FROM di Oracle

  2. MySQL setara dengan peringkat ORACLES ()

  3. Mendapatkan baris tambahan - Setelah bergabung dengan 3 tabel menggunakan Gabung Kiri

  4. membuat tampilan parameter di oracle11g

  5. Menghubungkan Oracle ke PostgreSQL