Operaciones de mantenimiento comunes de Oracle

I. Introducción

Primero, declare que no soy un DBA. Cualquier inexactitud en el documento es bienvenido para señalar. En cuanto a por qué escribí este artículo, es principalmente un resumen de mi trabajo habitual. Puede preguntarme "¿Su empresa o departamento no tiene un DBA?" Debe haberlo, pero el DBA es un recurso escaso en nuestra empresa. Hay más de 100 personas. Solo hay un DBA en China, no es una cuestión de importancia, ¡es imposible decírselo! No hay forma para el gerente de proyecto, ¡parte del trabajo solo puede hacerlo él mismo!

Dos, operaciones de mantenimiento comunes de Oracle

1. Iniciar y detener la base de datos

# 启动
su - oracle
sqlplus / as sysdba;
SQL>startup;

# 停止
su - oracle
sqlplus / as sysdba;
SQL>shutdown immediate;

2. Iniciar y detener la supervisión

# 启动
su - oracle
lsnrctl start
lsnrctl status

# 停止
su - oracle
snrctl stop
lsnrctl status

Nota : El oyente se registra dinámicamente cada pocos minutos. Si no hay una instancia de base de datos correspondiente cuando se ejecuta el estado del oyente, puede intentar registrarse manualmente.

sqlplus / as sysdba
SQL>alter system register;

3. Lista blanca de IP

  • Nodo único
su - oracle
cd $ORACLE_HOEM/network/admin/
# 查看是否存在sqlnet.ora文件及是否已配置tcp.validnode_checking、tcp.invited_nodes、tcp.excluded_nodes项。如果文件存在且已有这几项,则在此基础上修改这几项;如果文件存在但这几项不存在,则在最后追加;如果文件不存在则直接新建。

vim sqlnet.ora
# 追加以下内容:
tcp.validnode_checking=yes
tcp.invited_nodes=(127.0.0.1,自身IP,192.168.1.128,192.168.1.129)
tcp.excluded_nodes=(192.168.1.242)
lsnrctl reload

Nota : asegúrese de agregar toda su propia IP; de lo contrario, es posible que el estado del oyente no pueda registrar la instancia de la base de datos en el oyente.

Descripción :

tcp.validnode_checking: este elemento es para habilitar la verificación legal de IP, este elemento debe configurarse, si no habilita los otros dos, es inútil
tcp.invited_nodes: este elemento es la dirección IP que puede conectarse a la base de datos, varias direcciones usan comas ( Medio ancho); si habilita esta opción, debe coincidir con la dirección local, de lo contrario no se iniciará el monitoreo.
tcp.excluded_nodes: este elemento es la dirección IP que no puede conectarse a la base de datos. Varias direcciones están separadas por comas (medio ancho); si tienen la misma IP que tcp.invited_nodes, la IP aún puede acceder a la base de datos
tcp.invited_nodes y tcp.excluded_nodes. Puede configurar solo un elemento. Cuando solo se configura tcp.invited_nodes, es una lista blanca. Todas las IP en esta lista pueden acceder a la base de datos, y todas las IP que no están en esta lista tienen denegado el acceso a la base de datos;
cuando solo se configura tcp.excluded_nodes, A todas las direcciones IP en esta lista se les niega el acceso a la base de datos, y todas las direcciones IP que no están en esta lista pueden acceder a la base de datos.

  • Clúster RAC
# 备份和恢复oracle ini初始化文件,防止配置错误或其它原因导致的服务不可用
su - oracle
# 备份
SQL>create pifle='/home/backup/pfile20200920.ora' from spfile;
# 恢复
SQL>create spfile from pifle='/home/backup/pfile20200920.ora' ;

Nota : memoria de alcance de spfile, spfile, ambos (predeterminado); al modificar parámetros de inicialización como memoria, CPU, número de conexiones, etc., se recomienda encarecidamente hacer una copia de seguridad de spfile

su - grid
$GRID_HOME/NETWORK/ADMIN
vim sqlnet.ora
# 追加以下内容:
tcp.validnode_checking=yes
tcp.invited_nodes=(127.0.0.1,private IP,scan ip,virual IP,192.168.1.128,192.168.1.129)
tcp.excluded_nodes=(192.168.1.242)
# 执行以下命令重新加载监听器配置,等待几分钟(期间监听器对外服务不可用,建议一个一个节点执行,防止期间数据库无法访问)。
lsnrctl reload

Descripción :

  • No hay ningún archivo sqlnet. Ora en el directorio ORACLEHOME / NETWORK / ADMIN del usuario ORACLE . Debe iniciar sesión como usuario GUID para ingresar al directorio ORACLE_HOME / NETWORK / ADMIN. No hay un archivo sqlnet.ora en el directorio, debe iniciar sesión como usuario GUID.O R A C L EHO M E / N E T W es O R ^ K / A D M I N entrada registrada en no tener S Q L n- E T . O R & lt Un texto elemento , debe ser tan con G el U- el I D con un usuario de inicio de sesión entradas en el GRID_HOME añadir y modificar el archivo sqlnet.ora bajo / network / admin.

  • Al agregar la lista blanca, se debe agregar la IP local, debido a que es un entorno RAC, toda la IP real, IP privada, VIP y SCAN IP de cada sección debe agregarse a la lista blanca.

  • Cada nodo debe realizar esta operación.

4. Contraseña caducada

su - oracle
sqlplus / as sysdba
SQL>SELECT * FROM dba_profiles s WHERE s.profile=\'DEFAULT\' AND resource_name=\'PASSWORD_LIFE_TIME\';
SQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL>alter user scott identified by tiger;

5. Importación y exportación de bombas de datos

(1) Cree manualmente un directorio de exportación de bombas de datos ** (opcional) **

su - oracle
mkdir sdir
sqlplus / as sysdba
SQL>create directory DATA_PUMP_DIR_SCOTT as '/home/oracle/sdir';
SQL>grant read,write on directory DATA_PUMP_DIR_SCOTT to scott;
SQL> exit

(2) Exportación

# 查看默认的数据泵导出目录(DATA_PUMP_DIR),并记录下来。
su - oracle
sqlplus / as sysdba
SQL>select * from dba_directories;
SQL> exit
expdp SCOTT/SCOTT directory=DATA_PUMP_DIR dumpfile=scott20200920.dmp schemas=SCOTT

(3) Crear espacio de tabla, usuario, autorización

SQL>CREATE TEMPORARY TABLESPACE SCOTT_TEMP TEMPFILE 'D:\app\oracle\data\SCOTT_TEMP.DBF'  size 2048M autoextend on next 50M maxsize 20480M EXTENT MANAGEMENT LOCAL;
SQL>create tablespace TBS_SCOTT_TEST datafile 'D:\app\oracle\data\TBS_SCOTT01.DBF' size 2048M autoextend on next 50M maxsize 20480M EXTENT MANAGEMENT LOCAL;
SQL>create user SCOTT_TEST identified by SCOTT_TEST default tablespace TBS_SCOTT_TEST TEMPORARY TABLESPACE SCOTT_TEMP;
SQL>GRANT CONNECT,RESOURCE TO SCOTT_TEST;
# 可选
SQL>grant all privileges to SCOTT_TEST;--除DBA权限之外的所有权限(可选)
SQL>GRANT DBA TO SCOTT_TEST;  --DBA权限(可选)

(4) Importar

impdp SCOTT_TEST/SCOTT_TEST directory=DATA_PUMP_DIR dumpfile=scott20200920.dmp remap_schema=SCOTT:SCOTT_TEST remap_tablespace=TBS_SCOTT:TBS_SCOTT_TEST

Nota : Si el esquema y el espacio de tabla son diferentes de los de la exportación, debe especificar remap_schema y remap_tablespace.

Referencia :

Bomba de datos de Oracle

6. Uso del espacio de mesa (incluido el espacio de mesa temporal)

select * from ( 
Select a.tablespace_name, 
to_char(a.bytes/1024/1024,'99,999.999') total_bytes, 
to_char(b.bytes/1024/1024,'99,999.999') free_bytes, 
to_char(a.bytes/1024/1024 - b.bytes/1024/1024,'99,999.999') use_bytes, 
to_char((1 - b.bytes/a.bytes)*100,'99.99') || '%' use 
from (select tablespace_name, 
sum(bytes) bytes 
from dba_data_files 
group by tablespace_name) a, 
(select tablespace_name, 
sum(bytes) bytes 
from dba_free_space 
group by tablespace_name) b 
where a.tablespace_name = b.tablespace_name 
union all 
select c.tablespace_name, 
to_char(c.bytes/1024/1024,'99,999.999') total_bytes, 
to_char( (c.bytes-d.bytes_used)/1024/1024,'99,999.999') free_bytes, 
to_char(d.bytes_used/1024/1024,'99,999.999') use_bytes, 
to_char(d.bytes_used*100/c.bytes,'99.99') || '%' use 
from 
(select tablespace_name,sum(bytes) bytes 
from dba_temp_files group by tablespace_name) c, 
(select tablespace_name,sum(bytes_cached) bytes_used 
from v$temp_extent_pool group by tablespace_name) d 
where c.tablespace_name = d.tablespace_name 
) ;

7. Amplíe el espacio de la tabla.

# 查看数据文件位置
SQL>select name from v$datafile;
# 为指定表空间增加数据文件
SQL>ALTER TABLESPACE TBS_SCOTT ADD DATAFILE 'D:\app\oracle\data\TBS_SCOTT02.DBF' SIZE 20480M;

Nota : El disco de cuadrícula se utiliza en Oracle RAC y no se puede omitir el "+" que sigue al directorio. Por ejemplo: "+ / datagrid01 / data / TBS_SCOTT02.dbf"

8. Modifique el número máximo de conexiones de Oracle.

# 备份和恢复oracle ini初始化文件,防止配置错误或其它原因导致的服务不可用
su - oracle
# 备份
SQL>create pifle='/home/backup/pfile20200920.ora' from spfile;
# 恢复
SQL>create spfile from pifle='/home/backup/pfile20200920.ora' ;
SQL>alter system set processes=1000 scope = spfile;

Nota : sesiones es un valor derivado, que está determinado por el valor de los procesos. La fórmula es generalmente sesiones = 1.1 * proceso + 5, y no se requiere configuración.

9. Suelte manualmente el bloqueo

# 锁表情况
SQL>select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;

SQL>select S.sid,S.SERIAL# from v$session S where username='SCOTT';
SQL>alter system kill session 'sid,SERIAL'

Nota : la versión de Oracle Linux, la sesión es a nivel de proceso, la versión de Windows es a nivel de subproceso. Si los recursos no se pueden liberar completamente en Linux usando los comandos anteriores, puede usar la eliminación del nivel del sistema operativo para forzar la liberación.

Linux:

SQL>select spid, osuser,s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24是上面的sid)
SQL>exit
kill -9 12345(12345为上面查询出的spid)

ventanas:

orakill sid thread #分别为24 12345

10. Consulta de estado de estadísticas y recopilación automática.

-- 查询统计信息是否陈旧
SQL>select * from dba_tab_statistics order by last_analyzed desc;

Introducción :

La estadística es muy importante para Oracle. Recopila información detallada sobre los objetos de la base de datos y los almacena en el diccionario de datos correspondiente. Según estas estadísticas, el optimizador puede elegir el mejor plan de ejecución para cada SQL. La recopilación de información estadística de Oracle se divide en dos tipos: recopilación automática y recopilación manual.

Referencia :

Estadísticas

Recolección automática

Tareas de mantenimiento automático de Oracle

En oracle11g, hay una nueva función de autotask, que se puede utilizar para recopilar automáticamente información de optimización, recopilar información de segmento, etc. En EM, buscamos en el menú Server-Oracle Scheduler-Automated Maintenance Tasks para verlos:

Recopilar tareas automáticamente

linux iniciar EM

emctl start dbconsole

Dirección de visita:
http: // localhost: 1158 / em

Habilitar tareas de recopilación automática

  • Encienda el interruptor principal

    --可查看SELECT * FROM SYS.DBA_AUTOTASK_TASK;是否有值,默认没有,开启后有值!
    begin
    dbms_auto_task_admin.enable();--或dbms_auto_task_admin.enable;
    end;
    
  • Abra la ventana de mantenimiento designada (todas abiertas de lunes a domingo de forma predeterminada, se pueden cerrar selectivamente)

    SELECT * FROM SYS.DBA_SCHEDULER_WINDOW;
    -- 打开
    dbms_scheduler.enable(name=>'SATURDAY_WINDOW');
    -- 关闭
    dbms_scheduler.disable(name=>'SATURDAY_WINDOW',froce=>true);
    
  • Realizar consulta histórica

    SELECT * FROM SYS.DBA_AUTOTASK_JOB_HISTORY;
    SELECT * FROM SYS.DBA_AUTOTASK_CLIENT_HISTORY;
    

11. Vincular variables

Pregunta : Es posible que encuentre un problema de este tipo. Algunos SQL en nuestro código java o mybatis xml son muy lentos de ejecutar, pero consigo que SQL se ejecute rápidamente en herramientas como sqldeveloper o navicate. ¿Por qué?

Posible motivo: para responder a esta pregunta, primero debemos saber qué operaciones se realizan en nuestro código.

  • ¿Está paginando SQL? Además de una instrucción SELECT C1, C2 FROM SQL, también hay una instrucción SELECT COUNT (0) FROM SQL, y la lenta suele ser COUNT (0)
  • Ya sea para realizar un enlace de variables, preste atención al "enlace de variables", no al "carácter de empalme" (como $ {} en Mybatis)

“变量 绑定” 是 什么?
variable de vinculación : una variable en una instrucción SQL que debe ser reemplazada con un valor válido, o la dirección de un valor, para que la instrucción se ejecute con éxito.

El enlace variable es una tecnología muy interesante en los sistemas OLTP. Un buen enlace de variables hará que la velocidad de ejecución de SQL en la base de datos del sistema OLTP sea muy rápida y la eficiencia de la memoria sea extremadamente alta; no usar variables de enlace puede abrumar la base de datos OLTP, los recursos se agotan gravemente por el análisis SQL y el sistema funciona lentamente. Cuando un usuario establece una conexión con la base de datos, emitirá una solicitud de operación a la base de datos, es decir, enviará sentencias SQL a la base de datos. Una vez que Oracle recibe estos SQL, primero realizará una operación de función hash en el SQL para obtener un valor hash y luego buscará la existencia de SQL que coincida con el valor hash en el grupo compartido. Si lo encuentra, Oracle utilizará directamente el plan de ejecución de SQL existente para ejecutar el SQL actual y luego devolverá el resultado al usuario. Si no se encuentra el SQL con el mismo valor hash en el grupo compartido, Oracle considerará que se trata de un nuevo SQL. Se resolverá.

Los pasos del análisis sintáctico de Oracle son los siguientes:
(1) Análisis sintáctico
(2) Análisis sintáctico
(3) Generación del plan de ejecución, que se divide en análisis suave y análisis duro. El análisis riguroso requiere muchos recursos.
(4) La ejecución de SQL

Una pregunta más, si utiliza el método de "vincular variable" para asignar valores a los parámetros, ¿se ignorarán las variables durante el análisis de SQL?
Palabras clave : "Espía variable" "Cursor dinámico SQL"

Bind Peeking es una nueva característica introducida en Oracle 9i, su función es verificar el valor del predicado SQL actual durante el análisis riguroso de la declaración SQL para generar el mejor plan de ejecución.

Si quieres entender el mecanismo de SQL, puedes explicarlo claramente sin un blog ¡Te recomiendo que leas estos dos libros!
"Tutorial detallado de Oracle" : dificultad media (el DBA debe leer, el personal de I + D recomienda leer)
"Oracle Core Technology% 2B Louis" : dificultad alta (el DBA recomienda leer)

Por ejemplo:

SELECT * FROM DUAL WHERE '1' = :v1;
SELECT * FROM DUAL WHERE '1' = '1';

Vincular variable

12. Partición de mesa

-- 按月分区,2018年以前数据归为分区P1
CREATE TABLE T_TEST
(
   TABLE_ID NUMBER(8),
   SUB_DATE DATE,
   VALUE NUMBER(8)
 
)
PARTITION BY RANGE(SUB_DATE)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
  PARTITION P1 VALUES LESS THAN(TO_DATE('2018-01-01','YYYY-MM-DD'))
);

--查看分区
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME=UPPER('T_TEST_PARTITION');

Continuará...

Supongo que te gusta

Origin blog.csdn.net/ory001/article/details/108715361
Recomendado
Clasificación