Para empezar vamos a situarnos un poco. Esto es una referencia rápida a los aspectos más genéricos del entorno de Oracle.
Si buscas una guia de SQL y SQL*Plus pasate por este otro apartado
sqlplus usuario/contraseña@base
connect usuario/contraseña
exit
select * from tabs; select * from tab; select * from user_objects where object_type = 'TABLE'; desc NOMBRE_DE_TABLA;select * from user_catalog; select * from cat; @nombre_de_archivoestableces el tamaño de las páginas a un tamaño mas grande para que no te ponga la cabecera
set pagesize 10000$>exp USUARIO/CONTRASEÑA@BASEDEDATOS FILE=ARCHOVO.EXP FILE=ARCHOVO.EXP.LOG FULL=Y TABLES=(EMP,DEPT,MGR) buffer=1000000
$>imp USUARIO/CONTRASEÑA@BASEDEDATOS file=ARCHIVO_DE_COPIA_DE_SEGURIDAD.exp commit=y log=ARCHIVO_DE_LOG_DESEADO.log buffer=1000000 ignore=n fromuser=USUARIO_QUE_HIZO_LA_COPIA touser=USUARIO_QUE_RESTAURA_LA_COPIA''
Util por ejemplo para traerte una cópia de la base de datos de un ordenador a otro. Presupongo que tienes guardado en un sql la estructura de la base de datos ( usuairo para Oracle) Primero hago el export
exp usuario/contraseña@maquina file=export.exp log=el_log.log buffer=3000000
Luego me conecto como usuario system ( root) y me cargo el usuario de base de datos (osea la base de datos) para luego a traves del script sql_con_la_estructura_de_la_base.sq2 recrear las tablas
sqlplus system/contraseña@máquina SQL> drop user base_que_queremos_machacar cascade ; SQL> user dropped SQL>@sql_con_la_estructura_de_la_base.sq2 SQL>exit
Una vez hecho esto ya puedo importar los datos en las nuevas tablas vacías.
imp usuario/contraseña@maquina file=export.exp commit=y log=log.log buffer=1000000 ignore=n fromuser=usuario_que_hizo_el_export touser=nuevo_usuario
A veces, a la hora de borrar una base de datos oracle te dice que hay conexiones activas y que no se puede borrar mientras haya gente conectada. O nos puede interesar simplemente saber quien hay conectado a una base de datos. Esto se hace de la siguiente manera:
Para ver las sesiones abiertas:
select username, status, sid, serial# from v$session;
Una vez que ya sabes el sid y el serial con la consulta de arriba es tan facil como:
alter system kill session 'sid,serial#';
Sql Loader es una utilidad que proporciona Oracle para cargar datos a una base de datos desde un fichero externo, normalmente un fichero de texto aunque tambien pueden ser ficheros binarios. Al SQLLoader ( sqlldr) se le pasan como parametros (los más importanes) el fichero que contiene los datos que se van a cargar y otro fichero mas de control que es donde se especifican las acciones a realizar. El formato de los datos, donde se cargaran y cualquier otro tipo de control.
sqlldr userid=USUARIO/CONTRASEÑA@BASE control=/RUTA/DEL/FICHERO/DE/CONTROL data=/RUTA/DEL/FICHERO/QUE/CONTIENE/LOS/DATOS log=/LO/MISMO bad=/A/DONDE/VAN/LOS/DATOS/MALOS discard=/A/DONDE/VAN/LOS/DATOS/DESCARTADOS
sqlldr userid=jj/contraseña@sistema control=/HOME/ctl/a.ctl data=/HOME/jj/tmp/a.txt
ORA-01089: immediate shutdown in progress - no operations are permitted
Si estás aqui es porque alguien ha intentado parar oracle.
Si no eres el administrador de la base de datos y no sabes por que te ha pasado ESPERA
Si eres el administrador TEN PACIENCIA. ¡ EL PROCESO DE APAGARSE DE ORACLE PUEDE LLEGAR A TARDAR 1 O 2 HORAS ! No hagas como yo y al cabo de 30' lo mates.
Si, como yo, has matado el proceso de oracle. Al intentar arrancar te va a salir ese precioso error aunque acabes de reiniciar. ORA-01089: immediate shutdown in progress - no operations are permitted
Shutting down instance (immediate) License high water mark = 6 All dispatchers and shared servers shutdown Fri Oct 19 08:53:32 2007 ALTER DATABASE CLOSE NORMAL
Y ahora… como intentar solucionar la tragedia: hay dos posibilidades:
Intenta conectarte a la bases de datos. Pero no lo hagas como sqlplus system/@base. Hazlo como lo hace el proceso de arrancar normal.
1. Arranca Oracle
/etc/rc2.d/S99oracle
2. Exporta la variable de tu(s) usuario(s)
export ORACLE_SID=EL_NOMBRE_DE_TU_BASE
3. Entra en sqlplus
sqlplus
4. Conectate como sysdba
connect / as sysdba;
5. Trata de arrancarlo
5.2
startup force;
5.1 menos recomendabe porque al hacer shutdown abort puedes perder transacciones
shutdown abort; startup;
Te recomiendo que tengas otra terminal en donde vayas viendo el log para que veas que va pasando.
Y… ARMATE DE PACIENCIA PARA ESPERAR A QUE EL NIÑO ACABE DE HACER SUS COSITAS
Es tambien recomendable arrancar y parar oracle un par de veces una vez conseguido arrancarlo para que todo vuelva a la normalidad
Por cierto… hay gente por ahi que dice que reiniciando la máquina se ha solucionado. No lo he comprobado. Yo no podía reiniciar
… o como dirían en mi pueblo ajustes de funcionamiento
El Clustering factor es un índicador que sirve para medir cuan ordenados están los registros de una tabla respecto a su índice. Si los registros de la tabla están percetamente ordenados respecto a su índice (primer puesto del indice es el primer registro y el puesto número 59 del índice es el registro ubicado en 59avo lugar )
Por eso, cuanto el valor sea menor mejor ordenada está la tabla, menos bloques lee oracle y mas rápido va. aquí tienes una explicación mucho mas detallada y mejor.
SELECT ut.TABLE_NAME, ut.BLOCKS, idx.INDEX_NAME, idx.CLUSTERING_FACTOR FROM USER_INDEXES idx, USER_TABLES ut WHERE ut.TABLE_NAME = idx.TABLE_NAME AND ut.TABLE_NAME LIKE 'Tu Tabla' ORDER BY 1, 2;
select XIDSLOT, XIDSQN as order_me, oracle_username, 'ps -ef | grep ' || process process_finder, os_user_name, DECODE(locked_mode, 1, 'SELECT', 2, 'SELECT FOR UPDATE / LOCK ROW SHARE', 3, 'INSERT/UPDATE/DELETE/LOCK ROW EXCLUSIVE', 4, 'CREATE INDEX/LOCK SHARE', 5, 'LOCK SHARE ROW EXCLUSIVE', 6, 'ALTER TABLE/DROP TABLE/DROP INDEX/TRUNCATE TABLE/LOCK EXCLUSIVE') lock_mode, object_name, object_type from v$locked_object a,dba_objects b where a.object_id = b.object_id order by order_me;
select d.status,
db.name dbname,
d.tablespace_name tsname,
d.extent_management,
d.allocation_type,
to_char(nvl(d.min_extlen / 1024, 0),
'99G999G990D90', 'NLS_NUMERIC_CHARACTERS = '',.'' ')
"ALLOC_SIZE (K)",
d.contents "Type",
case
when(d.contents = 'TEMPORARY') then
to_char(nvl(t.bytes / 1024 / 1024, 0),
'99G999G990D90', 'NLS_NUMERIC_CHARACTERS = '',.'' ')
else
to_char(nvl(a.bytes / 1024 / 1024, 0),
'99G999G990D90', 'NLS_NUMERIC_CHARACTERS = '',.'' ')
end as "Size (M)",
to_char(nvl((a.bytes - nvl(f.bytes, 0)) / 1024 / 1024, 0),
'99G999G990D90', 'NLS_NUMERIC_CHARACTERS = '',.'' ')
"Used (M)",
to_char(nvl((a.bytes - nvl(f.bytes, 0)) / a.bytes * 100, 0),
'990D90', 'NLS_NUMERIC_CHARACTERS = '',.'' ')
"Used (%)"
from sys.dba_tablespaces d,
(select tablespace_name,
sum(bytes) bytes
from dba_data_files
group by tablespace_name)
a,
(select tablespace_name,
sum(bytes) bytes
from dba_temp_files
group by tablespace_name)
t,
(select tablespace_name,
sum(bytes) bytes
from dba_free_space
group by tablespace_name)
f,
v$database db
where d.tablespace_name = a.tablespace_name(+)
and d.tablespace_name = f.tablespace_name(+)
and d.tablespace_name = t.tablespace_name(+)
order by 10 desc;