Обновление базы данных OCI & из ExaCS в DBCS, исправление обновленной DBCS через OCI CLI

Давайте сразу перейдем к сути вопроса,
Вот традиционная ситуация On Prem

  • Мой продакшн находится в Exadata, мой Dev/Test находится в не Exadata Традиционные методы исправления помогут протестировать исправление GI/DB.

Теперь вот та же ситуация в OCI

  • Мое производство находится в ExaCS, мои Dev/Test находятся в DBCS (VM DB Systems).
  • Есть ли решение для реального тестирования исправлений базы данных в DBCS (VM DB Systems)?

Это, безусловно, возможно, но ответ на этот вопрос очень глубок, Прежде чем мы перейдем к решению, есть несколько вещей, о которых следует знать в ExaCS и DBCS DBCS (VM DB Systems)

1) Шифрование — OCI всегда использует шифрование.

Если вы предполагали восстанавливать резервные копии RMAN из ExaCS в DBCS без шифрования, вы ошибаетесь. Базы данных OCI всегда должны иметь включенное шифрование.

Если вы предполагали, что восстановление резервных копий RMAN из ExaCS в DBCS не требует шифрования, вы ошибаетесь Базы данных OCI всегда должны иметь включенное шифрование Если вы новичок в работе с кошельками TDE, я советую прочитать эту документацию Oracle
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/asoag/configuring-transparent-data-encryption.html#GUID-753C4808-CC51-4DA1-A5C3-980417FDAB14

Хранилища ключей в ExaCS и DBCS находятся в совершенно разных местах В ExaCS gv$encryption_wallet; не показывает вам никаких WRL

exacs> select * from gv$encryption_wallet;
   INST_ID|WRL_TYPE            |WRL_PARAMETER                           |STATUS         |WALLET_TYPE         |WALLET_OR|FULLY_BAC|    CON_ID
----------|--------------------|----------------------------------------|---------------|--------------------|---------|---------|----------
         1|FILE                |                                        |OPEN           |AUTOLOGIN           |SINGLE   |NO       |         3
         2|FILE                |                                        |OPEN           |AUTOLOGIN           |SINGLE   |NO       |         3

Вход в полноэкранный режим Выйти из полноэкранного режима

На самом деле он отображается в файле $ORACLE_HOME/network/admin/sqlnet.ora

.....
WALLET_LOCATION = (SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/var/opt/oracle/dbaas_acfs/<<db_name>>/db_wallet)))
.....
$ ls -l /var/opt/oracle/dbaas_acfs/orcl/tde_wallet
total 84
-rw------- 1 oracle oinstall  1234 XXX 19  202X cwallet.sso 
-rw------- 1 oracle oinstall  1234 XXX 19  202X ewallet.p12 

Войти в полноэкранный режим Выйти из полноэкранного режима

В DBCS (VM DB Systems) он находится в другом месте и также виден в $ORACLE_HOME/network/admin/sqlnet.ora


dbcs> select * from gv$encryption_wallet;
WRL_TYPE            |WRL_PARAMETER                                               |STATUS         |WALLET_TYPE         |WALLET_OR|FULLY_BAC|    CON_ID
--------------------|------------------------------------------------------------|---------------|--------------------|---------|---------|----------
FILE                |/opt/oracle/dcs/commonstore/wallets/tde/<<db_unique_name>>/ |OPEN           |AUTOLOGIN           |SINGLE   |NO       |         1

Вход в полноэкранный режим Выйти из полноэкранного режима

Обратите внимание, что в DBCS и ExaCS будут совершенно разные TDE кошельки, поэтому мне пришлось использовать те же ключи, что и в ExaCS в DBCS, чтобы восстановить резервные копии,

Мы решили только 1/3 нашей проблемы, восстановления ExaCS в DBCS недостаточно, нам нужно сделать ее OCI распознаваемой.

2) Создание базы данных, распознаваемой OCI.

Если вы восстанавливаете базу данных из ExaCS в DBCS, не распознав ее в OCI Console, тогда нет никакой реальной пользы от наличия базы данных OCI.

Допустим, моя база данных ExaCS имеет следующее имя


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      exacs

Вход в полноэкранный режим Выход из полноэкранного режима

ПРИМЕЧАНИЕ: Я использовал следующий сценарий для резервного копирования данных из ExaCS в файловое хранилище в OCI, если вы новичок в файловом хранилище OCI, я настоятельно рекомендую прочитать эту статью
https://docs.oracle.com/en-us/iaas/Content/File/Concepts/filestorageoverview.htm

################# rman_orcl_L0.sh
#!/bin/bash
export NLS_DATE_FORMAT='DD-MON-YY HH24:MI:SS'
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_x
NOW=$(date +"%Y_%m_%d_%H%M%S")
$ORACLE_HOME/bin/oraenv <<< orcl1
export ORACLE_SID=orcl1
$ORACLE_HOME/bin/rman target / <<EOF
SPOOL LOG TO '/backup_path/file_store/orcl_L0_$NOW.log';
run{
  ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C2 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C3 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C4 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
        BACKUP AS COMPRESSED BACKUPSET FORMAT '/backup_path/file_store/orcl-L0-%U';
                INCREMENTAL LEVEL 0 DATABASE
                INCLUDE CURRENT CONTROLFILE
                PLUS ARCHIVELOG;
        BACKUP CURRENT CONTROLFILE FORMAT '/backup_path/file_store/orcl-cfile_%U.bkp';
        BACKUP SPFILE FORMAT '/backup_path/file_store/orcl-spfile_%U.bkp';
        BACKUP ARCHIVELOG ALL FORMAT '/backup_path/file_store/orcl-L0-arch_%U.bkp';
}
SPOOL LOG OFF;
exit;
EOF

Вход в полноэкранный режим Выход из полноэкранного режима

Теперь давайте вернемся к нашей DBCS (VM Db System), где и будут происходить все действия.


I had created the DB System with the following 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      dbcsxy
db_name                              string      dbcs
db_unique_name                       string      dbcsxy_abc1xy
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь, чтобы восстановить ExaCS в DBCS, вы должны скопировать файлы кошелька TDE из хранилища ключей ExaCS в хранилище ключей DBCS.
Нет другого способа восстановить резервные копии, это определенно необходимо.

Теперь, как нам восстановить базу данных как сервис, удалите файлы DBCS в ASM, не удаляйте базу данных из кластера *—- вот в чем фокус.

Создайте следующий список файлов из ASM в DBCS

SQL> set heading off linesize 999 pagesize 0 feedback off trimspool on 
SQL> spool /tmp/files.lst
SQL> select 'asmcmd rm '||name from v$datafile
union all
select 'asmcmd rm '||name from v$tempfile union all
select 'asmcmd rm '||member from v$logfile; 
SQL> spool off
SQL> create pfile='/tmp/<standby DB_UNIQUE_NAME>.pfile' from spfile; #Backup spfile $chmod 777 /tmp/files.lst
Войдите в полноэкранный режим Выйти из полноэкранного режима

Я использую следующие шаги для восстановления резервных копий ExaCS в DBCS (VM DB System )

Database Restore Step 1) Delete all the ASM Files as in list /tmp/files.lst , do not drop the database from the Cluster.


Database Restore Step 2)  Use the DBCS spfile and only change whats minimum , in my case it's just the db_name 
In case you are any custom parameters please feel free to change it ,  My intention here is to ensure I stick to DBCS parameters as much as possible as my database should be DBCS compatible and should not carry over all the parameters from EXACS

In the DBCS it is important to set the following 

alter system set db_name=exacs scope=spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      dbcsxy
db_name                              string      dbcs           ----> to be changed to exacs
db_unique_name                       string      dbcsxy_abc1xy



Database Restore Step 3) Restore Controlfile and database 

RMAN> RESTORE CONTROLFILE FROM "/backup_path/file_store/orcl-cfile_XXXXXXX.bkp";


---------- Run the Restore Script 

RMAN>

run
{
  ALLOCATE CHANNEL C1 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C2 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C3 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C4 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl_L0_%U';
  ALLOCATE CHANNEL C4 DEVICE TYPE DISK FORMAT '/backup_path/file_store/orcl-L0-arch_%U.bkp';
  BACKUP ARCHIVELOG ALL FORMAT '/backup_path/file_store/orcl-L0-arch_%U.bkp';
  set newname for database to new;
  restore database;
  switch datafile all;
  recover database;
}


---------- Open database with reset logs
SQL> alter database opn resetlogs;


Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь моя база данных открыта, но как мне проверить, что моя база данных доступна как служба

3) Проверьте одну из функций службы OCI — например, сделайте резервную копию OCI.

Я вернусь к моей проверенной и испытанной утилите ocidtab, чтобы быстро сделать OCI резервную копию моей базы данных Oracle.

Краткая справка о моей утилите tab на случай, если вы новичок в этом деле
https://blog.pythian.com/the-ocidtab-a-solution-to-make-oci-cli-scripting-easier/

$ oci db backup create --database-id $DB_OCID --display-name 27May2022_Backup --profile DEV-PROFILE
{
  "data": {
    "availability-domain": "EtvR:my-region-1-AD-1",
    "compartment-id": "ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "database-edition": "ENTERPRISE_EDITION",
    "database-id": "ocid1.database.oc1.my-region-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "database-size-in-gbs": null,
    "display-name": "27May2022_Backup",
    "id": "ocid1.dbbackup.oc1.my-region-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "kms-key-id": null,
    "kms-key-version-id": null,
    "lifecycle-details": null,
    "lifecycle-state": "CREATING",    <<<<<<<------ THIS MEANS MY BACKUP IS RUNNING AND MY DATABASE IS RECOGNISED AS A DBCS SERVICE 
    "shape": "VM.Standard2.1",
    "time-ended": null,
    "time-started": "2022-05-27T11:59:19.785000+00:00",
    "type": "FULL",
    "vault-id": null,
    "version": "12.2.0.1.220118"
  },
  "etag": "abcdefgh",
  "opc-work-request-id": "ocid1.coreservicesworkrequest.oc1.my-region-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
Вход в полноэкранный режим Выход из полноэкранного режима

Вы можете увидеть, что база данных распознается как служба OCI, запустив одну из утилит базы данных OCI. Аналогичным образом можно включить OCI метрики для этой базы данных, но я пропущу часть о метриках для другой статьи в блоге.

Вы можете видеть, что база данных распознана как OCI сервис, запустив одну из утилит OCI базы данных.
Аналогичным образом можно включить OCI метрики для этой базы данных, я пропущу часть о метриках в другой статье блога.

3) Исправление DBCS через OCI Console

Если вы дошли до этого момента, вы проделали отличную работу.

ПРИМЕЧАНИЕ: В ExaCS есть передышка: компоненты Exadata планируются OCI внутри компании, и клиенту не нужно выполнять никаких действий, кроме мониторинга исправлений инструментов/компонентов ExaCS, клиенты будут периодически получать уведомления об исправлениях.

Dom0 — Привилегированный доступ к компонентам ExaCS
DomU — Привилегированный доступ к компонентам Oracle VM отсутствует,
(т.е. вы не можете войти в консоль управления узлом БД в OCI)

Следующие ссылки позволят хорошо освежить в памяти концепции исправлений ExaCS в целом

https://www.youtube.com/watch?v=SGZZzGr9X5E
https://docs.oracle.com/en/cloud/paas/exadata-cloud/csexa/patching.html
https://docs.oracle.com/cd/E35328_01/E35332/html/vmusg-ovm-intro.html#:~:text=Dom0%20is%20an%20abbreviation%20for,Oracle%20VM%20Server%20by%20dom0.

Для OCI Patching у меня есть отдельный пост в блоге, посвященный этим нюансам OCI Patching, я всегда использую OCI CLI для патчей, блог ниже рассматривает их, в основном мы можем патчить DBCS, обновленный выше, через OCI CLI

OCI Database Cloud Service Patching of Database and Grid Infrastructure Using OCI CLI

В результате мы получим две вещи

  1. Приложения безопасно тестируются с помощью OCI CLI Patching в среде Dev
  2. OCI Patching сам по себе безопасно тестируется в среде Dev на обновленной базе данных с помощью OCI CLI.

#oci #ocidtab #oracle #патчинг #базы данных #OracleCloudInfrastructure #Exadata #ExaCS

Оцените статью
Procodings.ru
Добавить комментарий