Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm cách nào để bạn di chuyển một bảng được phân vùng từ một vùng bảng này sang vùng bảng khác trong Oracle 11g?

Bạn cũng phải xem xét các chỉ mục có thể bị mất hiệu lực - ngoài việc giải đáp thắc mắc của bạn về việc đặt lại không gian bảng mặc định, tôi nghĩ đây là quy trình đầy đủ mà bạn sẽ muốn thực hiện:

1) Di chuyển các phân vùng (một vòng lặp PL / SQL theo câu trả lời của zürigschnäzlets)

Đây là các thủ tục tôi sử dụng trong trình bao bọc khối ẩn danh xác định a_tname, a_destTS, vTname và vTspName - chúng sẽ cung cấp cho bạn ý tưởng chung:

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) Đặt vùng bảng phân vùng mặc định cho bảng để các phân vùng mới được tạo ở đó:

    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) Đặt không gian bảng phân vùng mặc định chỉ mục để các phân vùng chỉ mục mới (nếu có) được tạo ở nơi bạn muốn:

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) xây dựng lại bất kỳ chỉ mục được phân vùng nào cần tạo lại và không nằm trong vùng bảng mong muốn:

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) Tạo lại bất kỳ chỉ mục toàn cầu nào

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. Cách sử dụng oracle trong cakePHP

  2. Cách thực hiện cài đặt Phiên bản Vision 12.2 EBS

  3. Phân trang với Oracle và máy chủ sql và phương pháp phân trang chung

  4. Cách tạo dấu vết FRD trong Oracle Apps 11i / R12

  5. Cách viết một thủ tục PL / SQL với tham số đầu vào x và đầu vào / đầu vào của tham số x được kết hợp