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

Bagaimana Anda memindahkan tabel yang dipartisi dari satu tablespace ke tablespace lain di Oracle 11g?

Anda harus mempertimbangkan indeks yang mungkin tidak valid juga - untuk menjawab pertanyaan Anda tentang mengatur ulang tablespace default selain ini, saya pikir ini adalah proses lengkap yang ingin Anda terapkan:

1) Pindahkan partisi (perulangan PL/SQL sesuai jawaban zürigschnäzlets)

Ini adalah prosedur yang saya gunakan dalam pembungkus blok anonim yang mendefinisikan a_tname, a_destTS, vTname, dan vTspName - mereka akan memberi Anda gambaran umum:

procedure mvTabPart (a_tname in varchar2, a_destTS in varchar2) is
cursor pCur(vTname varchar2, vTspName varchar2) is
  select table_name, partition_name
  from user_tab_partitions
  where table_name = vTname
      and tablespace_name not like vTspName
  order by partition_position desc;
begin
for pRow in pCur(a_tname, a_destTS) loop
 sqlStmnt := 'alter table '||pRow.table_name||
             ' move partition '||pRow.partition_name||
             ' tablespace '||a_destTS;
execute immediate sqlStmnt;
end loop;
end mvTabPart;

2) Setel tablespace partisi default tabel sehingga partisi baru dibuat di sana:

    procedure setDefTabPart (a_tname in varchar2, a_destTS in varchar2) is
    cursor tCur(vTname varchar2) is
      select table_name
      from user_part_tables
      where table_name = vTname;
    begin
    for tRow in tCur(a_tname) loop
     sqlStmnt := 'alter table '||tRow.table_name||
                 ' modify default attributes '||
                 ' tablespace '||a_destTS;
    execute immediate sqlStmnt;
    end loop;
end setDefNdxPart;

3) Setel ruang tabel partisi default indeks sehingga partisi indeks baru (jika ada) dibuat di tempat yang Anda inginkan:

procedure setDefNdxPart (a_tname in varchar2, a_destTS in varchar2) is
cursor iCur(vTname varchar2) is
  select index_name
  from user_part_indexes
  where index_name in (select index_name
             from user_indexes where table_name = vTname);
begin
for iRow in iCur(a_tname) loop
 sqlStmnt := 'alter index '||iRow.index_name||
             ' modify default attributes '||
             ' tablespace '||a_destTS;
execute immediate sqlStmnt;
end loop;

end setDefNdxPart;

4) membangun kembali semua indeks yang dipartisi yang perlu dibangun kembali dan tidak berada dalam tablespace yang diinginkan:

procedure mvNdxPart (a_tname in varchar2, a_destTS in varchar2) is
cursor ndxCur(vTname varchar2, vTspName varchar2) is
select i.index_name index_name, ip.partition_name partition_name
  from user_ind_partitions ip, user_indexes i
  where i.index_name = ip.index_name
     and i.table_name = vTname
     and i.partitioned = 'YES'
     and (ip.tablespace_name not like vTspName or ip.status not like 'USABLE')
  order by index_name, partition_name ;
begin
for ndxRow in ndxCur(a_tname, a_destTS) loop
 sqlStmnt := 'alter index '||ndxRow.index_name||
             ' rebuild partition '||ndxRow.partition_name||
             ' tablespace '||a_destTS;
execute immediate sqlStmnt ;
end loop;
end mvNdxPart;

5) Bangun kembali semua indeks global

procedure mvNdx (a_tname in varchar2, a_destTS in varchar2) is
cursor ndxCur(vTname varchar2, vTspName varchar2) is
  select index_name
  from user_indexes
  where table_name = vTname
       and partitioned = 'NO'
       and (tablespace_name not like vTspName or status like 'UNUSABLE')
  order by index_name ;
begin
for ndxRow in ndxCur(a_tname, a_destTS) loop
 sqlStmnt := 'alter index '||ndxRow.index_name||
             ' rebuild tablespace '||a_destTS;
execute immediate sqlStmnt ;
end loop;
end mvNdx;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan delta untuk user_id sejak bulan-bulan sebelumnya menggunakan Oracle sql

  2. Kesalahan SQL:ORA-02291:batasan integritas

  3. Gabungkan dua tabel dan temukan tanggal dan Kesenjangan yang tumpang tindih

  4. Pilih subquery yang mengembalikan beberapa baris sebagai string (satu kolom) dalam tabel (Oracle SQL)

  5. Pemicu di Oracle untuk menambah bidang secara otomatis dan memasukkan ke dalam tabel asosiasi