- Despliegue una topología de recuperación ante desastres multinube mediante Oracle Database Service for Azure
- Despliegue de la topología
Despliegue de la topología
La cláusula "from service" de RMAN permite restaurar y recuperar archivos de base de datos primaria en una base de datos en espera en toda la red. Puede utilizar esta funcionalidad para crear una instancia de una base de datos en espera en lugar del comando RMAN DUPLICATE DATABASE
y es más intuitiva y menos propensa a errores, lo que ahorra tiempo.
Note:
Haga clic en Copiar para guardar el ejemplo de comando en el portapapeles para pegarlo en la línea de comandos. Asegúrese de sustituir cualquiervariables
por valores específicos de la implantación.
Creación de la Base de Datos en Espera mediante RMAN
Utilice Oracle Recovery Manager (RMAN) para crear la base de datos en espera a partir de la base de datos primaria activa. También puede restaurar desde una copia de seguridad de la base de datos primaria.
- Conéctese a la base de datos e inicie la base de datos en el modo
NOMOUNT
.$ rman target /
startup nomount;
- Restaure el archivo de control en espera desde el servicio principal. En este ejemplo, DBUKS_898_LHR es la base de datos principal:
La salida debe ser similar a la siguiente:restore standby controlfile from service 'DBUKS_898_LHR';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 output file name=+RECO/DBUKS_R2J_AMS/CONTROLFILE/current.256.1139953721 Finished restore at 04-JUL-23
- Mount the database:
La salida debe ser similar a la siguiente:alter database mount;
released channel: ORA_DISK_1 Statement processed
- Como raíz en la instancia de OCI, cambie los permisos del directorio de Oracle a abierto (
chmod 777
).cd /opt/
ls -ltra
Debe ver:drwxr-xr-x 10 root root 4096 Jun 20 03:52 oracle
Introduzca:[root@ldbuksdr]# chmod 777 oracle/
ls -ltra
Debe ver:drwxrwxrwx 10 root root 4096 Jun 20 03:52 oracle
- Restaure la base de datos desde la base de datos primaria (DBUKS_898_LHR):
La salida debe ser similar a la siguiente:restore database from service ' DBUKS_898_LHR ';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=162 device type=SBT_TAPE channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=19.0.0.1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00001 to +DATA/DBUKS_898_LHR/DATAFILE/system.261.1139943103 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to +DATA/DBUKS_898_LHR/DATAFILE/sysaux.268.1139943085 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:38 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00004 to +DATA/DBUKS_898_LHR/DATAFILE/undotbs1.260.1139943133 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00005 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/system.264.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:49 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/sysaux.265.1139942759 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:25 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00007 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/undotbs1.266.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:18 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00008 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/system.273.1139943583 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00009 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/sysaux.271.1139943599 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:16 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00010 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/undotbs1.270.1139943611 channel ORA_DISK_1: restore complete, elapsed time: 00:00:20 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00011 to +DATA/DBUKS_898_LHR/DATAFILE/users.269.1139943873 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00012 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/users.274.1139943875 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 Finished restore at 04-JUL-23
exit ;
Validación de la Base de Datos en Espera
A continuación, debe validar la base de datos en espera.
- Consulte el nombre y el rol de la base de datos. En la petición de datos
SQL>
, introduzca:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
Debería ver una respuesta similar a la siguiente:
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE -------------------- ------------------ --------------- ------------------- ------------------------ ---------------------------- YES NO MOUNTED PHYSICAL STANDBY DISABLED MAXIMUM PERFORMANCE
- Consulte el proceso de archivación, el número de thread de estado y el número de secuencia de la base de datos:
select sysdate,process,status,thread#,sequence#,block# from v$managed_standby where status!='IDLE';
Debería ver una respuesta similar a la siguiente:
04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0
Introduzca:
select distinct process from gv$managed_standby;
Debería ver una respuesta similar a la siguiente:
PROCESS --------- ARCH DGRD
Adición de Archivos Log en Espera a Bases de Datos Primarias y en Espera
SQL>
para los siguientes pasos.
- En primer lugar, agregue los archivos log en espera a la base de datos primaria.
- Introduzca:
select group#, type, member from v$logfile;
Verá una respuesta similar a esta:
GROUP# TYPE MEMBER ---------- ------- --------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665
- Introduzca:
select bytes, group# from v$log;
Verá una respuesta similar a esta:1073741824 1 1073741824 3 1073741824 2
- Introduzca esta serie de comandos:
SQL> alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
La respuesta para cada uno debe ser:Database altered
- Introduzca:
select group#, type, member from v$logfile;
Verá una respuesta similar a esta:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665 4 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_4.432.1141789993 5 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_5.431.1141790001 6 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_6.430.1141790011 7 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_7.430.1141790017
- Archive la lista de logs:
archive log list
- Introduzca:
- A continuación, agregue los archivos log en espera a la base de datos en espera.
- Introduzca:
select group#, type, member from v$logfile;
Verá una respuesta similar a esta:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_1.487.1141280511
- Introduzca:
select bytes, group# from v$log;
Verá una respuesta similar a esta:1073741824 1 1073741824 3 1073741824 2
- Introduzca esta serie de comandos:
alter database add standby logfile thread 1 group 4 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
La respuesta para cada comando debe ser:Database altered
- Introduzca:
select group#, type, member from v$logfile;
Verá una respuesta similar a esta:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.487.1141280511 4 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_4.294.1141283919 5 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_5.295.1141283929 6 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_6.296.1141283937 7 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_7.296.1141283938
- Introduzca:
- Borre los archivos log con el nombre único de la base de datos primaria. De los tres archivos log, uno de ellos será el log actual y, por lo tanto, no podrá borrarlo en este momento; este archivo se borrará y se volverá a crear más adelante.
- Introduzca:
alter database drop logfile group 1;
Verá una respuesta similar a esta:alter database drop logfile group 1 * ERROR at line 1: ORA-01623: log 1 is current log for instance dbuks (thread 1) - cannot drop ORA-00312: online log 1 thread 1: '+RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665'
- Introduzca:
alter database drop logfile group 2;
alter database drop logfile group 3;
La respuesta para cada uno debe ser:Database altered
- Introduzca:
- Vuelva a crear los archivos log introduciendo los siguientes comandos:
alter database add logfile thread 1 group 2 ('+RECO') size 1073741824;
alter database add logfile thread 1 group 3 ('+RECO') size 1073741824;
La respuesta para cada uno debe ser:Database altered.
Configuración de Oracle Data Guard Broker
- Compruebe el valor dg_broker_start para la base de datos primaria y la base de datos en espera. Asegúrese de que esté definido en True; en la línea de comandos SQL, introduzca:
show parameter dg_broker_start;
La salida debe ser similar a la siguiente:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_start boolean TRUE
Si dg_broker_start está definido enFALSE
, defina el parámetro enTRUE
antes de continuar con los siguientes pasos; introduzca:alter system set dg_broker_start=true;
La salida debe ser similar a la siguiente:select pname from v$process where pname like 'DMON%';
PNAME ----- DMON
- Compruebe los archivos de Oracle Data Guard para la base de datos primaria:
show parameter dg_broker_config_file1;
Si tiene Oracle RAC u Oracle ASM, puede cambiar la ubicación del archivo de configuración; por ejemplo:show parameter dg_broker_config_file2;
alter system set dg_broker_config_file1=broker_config_file_location;
alter system set dg_broker_config_file2=broker_config_file_location;
- Registre las bases de datos principal y en espera:Utilice la interfaz de línea de comandos (DGMGRL) de Oracle Data Guard para registrar la base de datos primaria y agregar el perfil de la base de datos en espera a la configuración del broker:
- Inicie sesión en el host principal como sys.
dgmgrl sys/password@net_service_name_for_primary
- Cree una configuración que utilice el nombre de la base de datos primaria.
CREATE CONFIGURATION configuration_name AS PRIMARY DATABASE IS primary_database_name CONNECT IDENTIFIER IS primary_database_name;
La salida debe ser similar a la siguiente:CREATE CONFIGURATION dbuks_898_lhr_dbuks_r2j_ams AS PRIMARY DATABASE IS dbuks_898_lhr CONNECT IDENTIFIER IS dbuks_898_lhr;
- Agregue la base de datos en espera.
Por ejemplo:ADD DATABASE standby unique database name AS CONNECT IDENTIFIER IS standby unique database name MAINTAINED AS PHYSICAL;
ADD DATABASE dbuks_r2j_ams AS CONNECT IDENTIFIER IS dbuks_r2j_ams MAINTAINED AS PHYSICAL;
La salida debe ser similar a la siguiente:Database "dbuks_r2j_ams" added
- Inicie sesión en el host principal como sys.
- Active la configuración:
enable configuration;
- Visualice la configuración:
- Introduzca:
show configuration;
Note:
Si recibe una ADVERTENCIA de que no se ha podido determinar la demora de aplicación, conéctese a la base de datos primaria mediante sqlplus y realice algunos cambios de log.Configuration - dbuks_898_lhr_dbuks_r2j_ams Protection Mode: MaxPerformance Members: dbuks_898_lhr - Primary database dbuks_r2j_ams - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 36 seconds ago)
- Muestre la configuración de la base de datos primaria (en este ejemplo, dbuks_898_lhr):
Aparecerá una respuesta similar a la siguiente:show database dbuks_898_lhr
Database - dbuks_898_lhr Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): dbuks Database Status: SUCCESS
- Muestre la configuración de la base de datos en espera (en este ejemplo, dbuks_r2j_ams):
Aparecerá una respuesta similar a la siguiente:show database dbuks_r2j_ams
Database - dbuks_r2j_ams Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 59.00 KByte/s Real Time Query: ON Instance(s): dbuks Database Status: SUCCESS
- Introduzca:
Confirmar la replicación
La base de datos en espera debe empezar a aplicar el redo recibido de la base de datos primaria.
SQL>
para los siguientes pasos.
- Compruebe el proceso MRP:
- Introduzca:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
La salida debe ser similar a la siguiente:SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 RFS RECEIVING 1 417 2413 10-JUL-23 MRP0 APPLYING_LOG 1 417 2412
- Visualice los procesos de Data Guard.
La salida debe ser similar a la siguiente:select distinct process from gv$managed_standby;
PROCESS --------- DGRD RFS MRP0 ARCH
- La base de datos en espera ha comenzado a aplicar los redo logs. Realice algunos cambios de log en la base de datos primaria y vuelva a confirmar en la base de datos en espera:
La salida debe ser similar a la siguiente:select sysdate, process, status, thread#, sequence#, block#from v$managed_standbywhere status!='IDLE';
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CLOSING 1 253 1 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CLOSING 1 252 1 04-JUL-23 MRP0 APPLYING_LOG 1 254 17 04-JUL-23 RFS RECEIVING 1 254 18
- Archive la lista de logs en la base de datos primaria:
La salida debe ser similar a la siguiente:archive log list
Introduzca:Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 415 Next log sequence to archive 417 Current log sequence 417
alter system switch logfile;
Debe recibir esta respuesta:System altered.
Introduzca:/
Debe ver:System altered.
Ahora, archive la lista de logs:
Debe recibir esta respuesta:archive log list
Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 417 Next log sequence to archive 419 Current log sequence 419
- Archive la lista de logs en la base de datos en espera; introduzca:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
Debe recibir esta respuesta:
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CLOSING 1 418 1 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CLOSING 1 417 2048 10-JUL-23 RFS RECEIVING 1 419 59 10-JUL-23 MRP0 APPLYING_LOG 1 419 58
- Introduzca:
- Active el flashback en la base de datos en espera:
- Introduzca:
Después de cada comando, debería ver:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel; SQL> alter database flashback on;
Database altered
- Confirme que el flashback de base de datos está activado (activado).
La salida debe ser similar a la siguiente:select flashback_on from v$database;
FLASHBACK_ON ------------------ YES
- Introduzca:
Debe ver:recover managed standby database using current logfile disconnect from session;
Media recovery complete.
- Introduzca:
- Consulte los detalles de la base de datos:
La salida debe ser similar a la siguiente:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ---------------------------------------------------------- --------------- ----- ----------------------- ----------------------------- YES YES MOUNTED PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- Utilice la utilidad Server Control (srvctl) para parar la base de datos en espera:
La salida debe ser similar a esta:srvctl stop database -d db_unique_name
srvctl stop database -d dbuks_r2j_ams
- Utilice la utilidad Server Control para iniciar la base de datos en espera:
La salida debe ser similar a esta:srvctl start database -d db_unique_name
srvctl start database -d dbuks_r2j_ams
- Consulte los detalles de la base de datos:
La salida debe ser similar a esta:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ----------------------------------------------------------------------- -------------------- ----------------------- YES YES READ ONLY WITH APPLY PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- Ahora puede proporcionar algunos cambios de archivo log más desde la base de datos primaria y asegurarse de que el redo se está aplicando a la base de datos en espera.
- Vuelva a crear el archivo log pendiente, que existe con el nombre único principal. Escriba estos comandos:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;
alter database drop logfile group 1;
Después de cada comando, debería ver:alter database add standby logfile thread 1 group 1 ('+RECO') size 1073741824;
Por último, introduzca:Database altered.
Debe ver:recover managed standby database using current logfile disconnect from session;
Media recovery complete.