Como Renombrar un Tablespace
IntroducciónA partir de Oracle 10g podemos renombrar un Tablespace con una sola sentencia:
ALTER TABLESPACE tablespace_name RENAME TO tablespace_new_name;
Se pueden renombrar todos los tablespaces permanentes o temporales excepto SYSTEM y SYSAUX.
Requisitos :
- El parámetro COMPATIBLE debe estar seteado en 10.0.0 o superior.
- El tablespace a renombrar y todos sus datafiles deben estar online.
Casos de estudio
- Renombramos el Tablespace Users como Users_Data
- Verificamos que existe el tablespace USERS
- Vemos que varios usuarios tienen el tablespace USERS como Default Tablespace
- Verificamos que ya no existe USERS en cambio existe USERS_DATA
- Verificamos que no quedaron usuarios con default tablespace USERS
- Verificamos que automáticamente actualizó el Default Tablespace de los usuarios que tenían USERS a USERS_DATA
- Renombramos el UNDO Tablespace, UNDOTBS1 por UNDOTBS2
- Verificamos que usamos SPFILE
- Verificamos que esta definido UNDOTBS1
- Renombramos UNDOTBS1 a UNDOTBS2
- Comprobamos que NO quedo actualizado
- Verificamos que lo cambio en el spfile
- Reiniciamos la base
- Verificamos el cambio
- Renombramos el Tablespace Temporal
- Para ver el Default Temporary Tablespace consultamos la tabla DATABASE_PROPERTIES
- Consultamos los usuarios que usan TEMP de Tablespace Temporal
- Renombramos TEMP como TEMP1
- Verificamos que no quedaron usuarios con temporary tablespace TEMP
- Verificamos que automáticamente actualizó el Temporary Tablespace de los usuarios que tenían TEMP a TEMP1
- Verificamos que automáticamente actualizó tabla DATABASE_PROPERTIES
- Renombramos un Tablespace Read Only
- Verificamos que el tablespace READONLY_TBS esta definido como READ ONLY
- Renombramos READONLY_TBS como APP_READONLY
- Verificamos que ya no existe READONLY_TBS, en cambio existe APP_READONLY
- Revisamos el alert.log
SQL> select tablespace_name from dba_tablespaces; TABLESPACE_NAME ------------------------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS EXAMPLE TBSJMW INVENTORY 8 rows selected.
SQL> select username, default_tablespace from dba_users where default_tablespace='USERS'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ PM USERS BI USERS ............................................................. 16 rows selected.
-> Renombramos Users como Users_Data
SQL> alter tablespace users rename to users_data; Tablespace altered.
SQL> select tablespace_name from dba_tablespaces; TABLESPACE_NAME ------------------------------ SYSTEM SYSAUX UNDOTBS1 TEMP USERS_DATA EXAMPLE TBSJMW INVENTORY 8 rows selected.
SQL> select username, default_tablespace from dba_users where default_tablespace='USERS'; no rows selected
SQL> select username, default_tablespace from dba_users where default_tablespace='USERS_DATA'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ PM USERS_DATA BI USERS_DATA ............................................................ 16 rows selected.
Conclusión : Excepto SYSTEM y SYSAUX que no se puede renombrar, al renombrar cualquier tablespace que los usuarios tienen definido como Default Tablespace, automáticamente queda actualizado el Default Tablespace de dichos usuarios.
SQL> show parameters pfile NAME TYPE VALUE -------- ---------- ----------------------------- spfile string /u01/app/oracle/product/11.2.0 /dbhome_1/dbs/spfileorcl.ora
SQL> show parameters UNDO NAME TYPE VALUE ----------------------------------- ----------- --------------------- undo_management string AUTO undo_retention integer 172800 undo_tablespace string UNDOTBS1
SQL> alter tablespace undotbs1 rename to undotbs2; Tablespace altered.
SQL> show parameters UNDO NAME TYPE VALUE ------------------------------------ ---------- -------------------- undo_management string AUTO undo_retention integer 172800 undo_tablespace string UNDOTBS1
SQL> select value from v$spparameter where name='undo_tablespace'; VALUE --------------------------------------------------------------- UNDOTBS2
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 418484224 bytes Fixed Size 1336932 bytes Variable Size 297798044 bytes Database Buffers 113246208 bytes Redo Buffers 6103040 bytes Database mounted. Database opened.
SQL> show parameter UNDO NAME TYPE VALUE ------------------------------------ ----------- --------------------- undo_management string AUTO undo_retention integer 172800 undo_tablespace string UNDOTBS2
Conclusión : Renombrar el Undo tablespace solo toma efecto después de reiniciar la base. Si no usamos spfile, antes de levantar la base tenemos que cambiar manualmente el parámetro en el pfile.
SQL> column property_name format a25 SQL> column property_value format a15 SQL> select property_name, property_value from DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE ------------------------ ---------------------- DEFAULT_TEMP_TABLESPACE TEMP
SQL> select username, temporary_tablespace from dba_users where temporary_tablespace='TEMP'; USERNAME TEMPORARY_TABLESPACE ------------------------------ ------------------------------ DBSNMP TEMP DBA1 TEMP BI TEMP ........................................................... 40 rows selected.
SQL> alter tablespace TEMP rename to TEMP1; Tablespace altered.
SQL> select username, temporary_tablespace from dba_users where temporary_tablespace='TEMP'; no rows selected
SQL> select username, temporary_tablespace from dba_users where temporary_tablespace='TEMP1'; USERNAME TEMPORARY_TABLESPACE ------------------------------ ------------------------------ DBSNMP TEMP1 DBA1 TEMP1 BI TEMP1 ............................................................. 40 rows selected.
SQL> select property_name, property_value from DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE ------------------------- ----------------------- DEFAULT_TEMP_TABLESPACE TEMP1
Conclusión : Al renombrar un Tablespace Temporal que los usuarios lo tienen definido como Temporary Tablespace, automáticamente queda actualizado el Temporary Tablespace de dichos usuarios. Si este Tablespace Temporal es el Default Temporary Tablespace también lo actualiza en la tabla Database_Properties.
SQL> select tablespace_name,status from dba_tablespaces; TABLESPACE_NAME STATUS ------------------------------ ------------ SYSTEM ONLINE SYSAUX ONLINE UNDOTBS1 ONLINE TEMP ONLINE USERS ONLINE EXAMPLE ONLINE TBSJMW ONLINE INVENTORY ONLINE READONLY_TBS READ ONLY 9 rows selected.
SQL> alter tablespace readonly_tbs rename to app_readonly;
SQL> select tablespace_name,status from dba_tablespaces; TABLESPACE_NAME STATUS ------------------------------ --------- SYSTEM ONLINE SYSAUX ONLINE UNDOTBS1 ONLINE TEMP ONLINE USERS ONLINE EXAMPLE ONLINE TBSJMW ONLINE INVENTORY ONLINE APP_READONLY READ ONLY 9 rows selected.
[oracle@host01]$ tail alert_orcl.log Completed: create tablespace ReadOnly_TBS datafile '+DATA' size 100M Sun Jan 26 09:30:34 2014 alter tablespace ReadOnly_TBS read only Converting block 0 to version 10 format Completed: alter tablespace ReadOnly_TBS read only Sun Jan 26 09:35:51 2014 alter tablespace readonly_tbs rename to app_readonly Tablespace 'READONLY_TBS' is renamed to 'APP_READONLY'. Tablespace name change is not propagated to file headersbecause the tablespace is read only. Completed: alter tablespace readonly_tbs rename to app_readonly
Conclusión : Si el tablespace es Read Only, los headers de los datafiles no son actualizados. Esto no significa que quede corrupto. En el alert.log va a escribir un mensaje que los headers de los datafiles no fueron renombrados pero en el diccionario de datos y en los control file quedó actualizado.
No hay comentarios:
Publicar un comentario