Wednesday, July 26, 2023

CRS-6706: Oracle Clusterware Release patch level ('nnn') does not match Software patch level ('mmm')

 One day restarting clusterware i obtained CRS-6706:

[root@rac2 ~]# crsctl start cluster
CRS-6706: Oracle Clusterware Release patch level ('...') does not match Software patch level ('...').
Oracle Clusterware cannot be started.
CRS-4000: Command Start failed, or completed with errors.

Ups!

Yes, i have patched the ClusterWare some days ago, but GI/CW successfully started after node reboot. I used the new Zero Downtime GI Patching procedure as described in great article of Daniel Overby Hansen: https://dohdatabase.com/2023/03/10/how-to-patch-oracle-grid-infrastructure-19c-using-zero-downtime-oracle-grid-infrastructure-patching

and may do something wrong ...  

At first I thought it was an error after the patching procedure.

I tried to start GI/CW from other node an obtained the same: "CRS-6706: Oracle Clusterware Release patch level ('...') does not match Software patch level ('...')". This confirmed my assumption of error is somewhere in the cluster software, maybe in cluster registry ...

Google was quick to suggest a suitable note with many clever recommendations:  CRS-6706: Oracle Clusterware Release patch level ('nnn') does not match Software patch level ('mmm') (Doc ID 1639285.1) and some other interesting articles, they recommendto do:

$ORACLE_HOME/bin/clscfg -localpatch
$ORACLE_HOME/crs/install/rootcrs.sh -lock


[root@rac1 ~]# $ORACLE_HOME/bin/clscfg -localpatch
clscfg: EXISTING configuration version 0 detected.
Cannot proceed with the command execution while local OHASD is running.
Error initializing OLR for local patch operation.


[root@rac1 ~]# $ORACLE_HOME/crs/install/rootcrs.sh -lock
Using configuration parameter file: /u01/app/19.15/crs/install/crsconfig_params
The log of current session can be found at:
  /u01/app/grid/crsdata/rac1/crsconfig/crslock_rac1_2023-07-26_06-30-09AM.log
Failure in execution (rc=-1, 0, No such file or directory) for command /usr/sbin/semanage fcontext --add -e /bin /u01/app/19.15/bin
2023/07/26 06:30:14 CLSRSC-329: Replacing Clusterware entries in file 'oracle-ohasd.service'

 Nothig helped !

I won't torture you with my investigation. The mistake is mine and it is very easy: the wrong value of ORACLE_HOME variable. :)

For convenience, I have specify a value for ORACLE_HOME in .bash_profile for user root in order to run GI commands from root user (don't setup GI variables each time i did "su - root"). And, of course, this variable was pointing to the wrong path:

Old GI home is /u01/app/19.15/grid
New GI home is /u01/app/19.16/grid

But my variable was ORACLE_HOME=/u01/app/19.15
Nothing more!

After obvious correction CW started successfully.

You may easy reproduce this error spoiling ORACLE_HOME ...


Wednesday, June 14, 2023

Exadata X10M

Появились данные о том, как выглядит Экзадата Х10М-2 (то, что она уже есть - несомненно, вероятно пока работает только в Oracle Cloud):

DB node Unit -------- CPU ---------- ------------ RAM -------------- -------- PCIe- ---------- Ethernet 
E5-2L     2  2*AMD EPYC 9334 32-Core 384|512|768|1536|1920|3072|6144 x16 8GTs|16GTs|32GTs v5.0 6*25/10/1
E5-2L     2  2*AMD EPYC 9J14 96-Core 384|512|768|1536|1920|3072|6144 x16 8GTs|16GTs|32GTs v5.0 6*25/10/1
Cell                                                                                           H.Disk Flash
X10-2L HC 2  2*AMD EPYC 9334 32-Core 128|192|256|768|1536            x16 8GTs|16GTs|32GTs v5.0 12*22T  6 *7.68T 
X10-2L EF 2  2*AMD EPYC 9334 32-Core                 1536            x16 8GTs|16GTs|32GTs v5.0    -   10 *7.68T  

Основные изменения: переход на процессоры AMD (вероятно потому, что у AMD больше ядер). 

 Переход на AMD не удивляет - ещё весной 2022 года стало известно, что в своём облаке Оракл использует Экзадаты X9M на процессорах AMD, однако в on-premise Оракл эту модель не предлагает:
https://blogs.oracle.com/database/post/ ... ucture-x9m
https://www.oracle.com/a/ocom/docs/engi ... x9m-ds.pdf 

DB node Unit -------- CPU ---------- ------------ RAM -------------- -------- PCIe- ---------- Ethernet 
E4-2c     1  2*AMD EPYC 7J13 64-Core             1536|2048           x16 8GTs|16GTs v4.0       2*25/10/1  << X9M-2

 

Оракл считает, что достоинством AMD является большое количество ядер. В своём облаке Оракл назначил цену за физическое AMD-ядро в два раза меньше, чем за ядро Intel.


Основный изменения в X10M-2:

Серверы БД получат по 192 физических ядра (2 процессора по 96 ядер) и 6Т оперативной памяти, шина PCIe 5 поколения, 6 портов Ethernet 25Гбит/10Гбит/1Гбит. Некоторые серверы БД станут двух-юнитовыми.
Вызывает вопросы модель "E5-2L 2*AMD EPYC 9334 32-Core" - вероятно это сервер для тех, кому не требуется много ядер/лицензий на СУБД Оракл? Непонятная модель, поживём -увидим.

Селлы (ячейки хранения) получат шпиндельные диски по 22Т. Для компенсации возросшего объема шпиндельных дисков флеш-карт станет 6 штук, объем каждой по 8Т. Ядер и оперативной памяти в каждом селле также станет больше. В Х10М-2 исчез РМЕМ (потому что PMEM - это технология Intel). Вместо PMEM ожидаем память CXL.

Минимальная версия Экза-софта, способная работать на X10M-2 - это версия 23.1. Версия 23.1 работает на Oracle Linux 8.7 and UEK6 (5.4.17).

Поддерживаемые версии Oracle Database и Oracle Grid Infrastructure (GI): 19.15 и 21.6.
Иными словами: если ваша база ниже, чем 19.15 или 21.6, то на Х10М-2 такая БД работать не сможет. БД версий 11.2 и 12.1 и 12.2 также не смогут работать на X10M-2. Поэтому прежде, чем поставить 23.1 на свои Х5,Х6,Х7 и т.д. - предварительно обновите ваши БД до 19.5 или выше.

Обновиться на 23.1 можно только с версии 21.2.10 (March 2022) или более поздней.


Ну и несколько слов о перспективах:
- Seagate выпустит HDD емкостью 50 Тбайт в 2026 году https://servernews.ru/1088153
- AMD представила 128-ядерные EPYC Bergamo https://servernews.ru/1088342, https://servernews.ru/1088121

В общем, шпиндельные диски еще поживут.
Ядер в процессорах тоже станет больше.

 

Tuesday, February 14, 2023

История поиска самой лучшей СУБД от компании Uber

История метаний поисков Uber :
2013 год - Migraing Uber from MySQL to PostgreSQL
2016 год - Migrating Uber from PostgreSQL to MySQL
2023 год - Migrating Uber to Oracle Cloud

Что показывает этот случай?
При росте объемов и серьёзности бизнеса - альтернативы нет. 

Самое подробное описание, которое удалось найти:

Uber Technologies подписала два крупных облачных семилетних контракта и планирует полностью закрыть собственный центр обработки данных, который был приобретён у Microsoft в 2015 году вместе со 100 сотрудниками. В настоящее время более 95 процентов ИТ-ресурсов размещены в собственном ЦОД Uber.

Оценка облачных ЦОД заняла у Uber 11 месяцев. Оценивая облачные компании в Uber решили, что наличие нескольких провайдеров снижает риски и позволяет компании воспользоваться преимуществами различных облачных провайдеров.

С Google, помимо основного контракта на облачные вычисления, Uber будет использовать картографический сервис Google для маршрутизации своих транспортных средств и рекламный продукт Google для своего молодого рекламного бизнеса.

Что касается Oracle, Uber будет использовать облачную систему планирования корпоративных ресурсов компании и другие продукты базы данных для своего грузового бизнеса.

В своем первоначальном публичном предложении в 2018 году Uber заявила, что в 2018 году она потратила 221 миллион долларов на аренду офисов и центров обработки данных, а также на облачные вычисления Google Cloud и Amazon Web Services.

Развертывание колокации было подробно описано главой Uber Compute Дином Нельсоном, который на DCD>London 2018 объяснил, что компания планирует арендовать 576-стоечный центр обработки данных мощностью 5 МВт.

«Каждый сервер имеет 25-гигабитную сеть, — сказал Нельсон -16 стоек образуют модуль. Формируем 30 модулей, что составляет 480 шкафов».

К 480 стойкам добавляются 32 стойки для сети и 64 стойки для различных дополнений, «потому что мы никогда не знаем, что произойдет», в результате чего в общей сложности получается 576 стоек. Компания использует четыре типа стоек: вычислительная, база данных, хранилище (многоуровневое хранилище с «теплым» и «холодным») и графические процессоры для машинного обучения.

https://www.datacenterdynamics.com/en/news/uber-picks-oracle-and-google-for-7-year-cloud-contracts-closing-its-own-data-centers/

Friday, January 13, 2023

PMEM -> XRMEM

 С января 2023 года Оракл переименовал PMEM в XRMEM.

Т.е. те, после обновления БД на январсий пачсет 2023 в статистиках вместо PMEM будет XRMEM (и в AWR-отчёте тоже).

Wednesday, December 14, 2022

MAX_STRING_SIZE=EXTENDED, ORA-00910, ORA-14694

Появилась задача переключить одну БД в MAX_STRING_SIZE=EXTENDED.
Много лет назад уже приходилось выполнять эту операцию на 12.1, она была проблемной, скрипт utl32k.sql не доходил до конца, заводили SR и долго разбирались в проблеме.
Много времени утекло с тех пор и сейчас уже 19.12.

Что такое MSS и как оно работает: в БД имеется параметр MAX_STRING_SIZE который может иметь два значения STANDARD или EXTENDED.

В стандартной конфигурации (MSS=STANDARD) максимальная длина строки VARCHAR2 = 4000 байт. Возьмёшь на один байт больше - и получишь ошибку:

SQL> create table MSS (col_MSS varchar2(4001));

Error starting at line : 1 in command -
create table MSS (col_MSS varchar2(4001))
Error report -
ORA-00910: specified length too long for its datatype
00910. 00000 -  "specified length too long for its datatype"
*Cause:    for datatypes CHAR and RAW, the length specified was > 2000;
           otherwise, the length specified was > 4000.
*Action:   use a shorter length or switch to a datatype permitting a
           longer length such as a VARCHAR2, LONG CHAR, or LONG RAW


При MSS=EXTENDED длина VARCHAR2 может достигать 32767 байт.
Для демонстрации возможностей MSS=EXTENDED сделаем простой тест: создаём таблицу с столбцом VARCHAR2 длиной более 4000 байт и вставим в эту таблицу стрки длиной 4000 байт.
Вначале выполним пример на тестовой БД со стандартными настройками MSS=STANDARD (она у меня single instance версии 19.17 + MRP1, nonCDB ) :

drop table mss;
show parameter MAX_STRING_SIZE
create table MSS (col_MSS varchar2(4000));
insert into MSS values (rpad('x',4000));
insert into MSS values (rpad('x',4001));
insert into MSS values (rpad('x',32767));
select rownum, length(col_MSS) from MSS;

SQL> show parameter MAX_STRING_SIZE
NAME            TYPE   VALUE    
--------------- ------ --------
max_string_size string STANDARD

SQL> create table MSS (col_MSS varchar2(4000));
Table created.

SQL> insert into MSS values (rpad('x',4000));
SQL> insert into MSS values (rpad('x',4001));
SQL> insert into MSS values (rpad('x',32767));

   ROWNUM    LENGTH(COL_MSS)
_________ __________________
        1               4000
        2               4000
        3               4000


Интересный получается результат! Ошибок нет, но длина строки обрезается по 4000 байт.
При INSERT можно потерять данные и не узнать об этом!

И еще одно подтверждение:
SQL> select length (rpad('x',32767)) from dual;

   LENGTH(RPAD('X',32767))
__________________________
                      4000


---------------------------------------------
Тестовая миграция

Миграция на MSS=EXTENDED заключается в выполнении двух шагов:
1) установить в файле параметров MSS=EXTENDED
2) запустить БД startup upgrade и выполнить скрипт utl32k.sql

И применительно к промышленной миграции возникают ряд вопросов:
- вопрос про Fallback-стратегию: как после установки MAX_STRING_SIZE=EXTENDED вернуть БД в MAX_STRING_SIZE=STANDARD, если в ходе миграции что-то пойдёт не по плану?
- как устанавливать MSS=EXTENDED на стендбай? Надо ли устанавливать этот параметр до того, как мы установили его на основной БД или после? И будет ли стендбай с MSS=STANDARD накатывать редо от БД с MSS=EXTENDED ?

Попробуем выполнить MSS=EXTENDED на тестовой БД ( версия 19.17 + MRP1, nonCDB, single instance) и затем откатить БД к точке восстановления.

Есть нота
2383964.1 After changing parameter Max_string_size=extended can I revert back to Standard
которая категорично утверждает, что возврат к MSS=STANDARD - только путём восстановления из бэкапа:

"This is not supported per the Oracle documentation." 
"The only way to revert is to restore the database from backup ..."


Но эта нота ничего не пишет про FLASHBACK TO RESTORE POINT. Можно ли использовать  Flashback DB для возврата к MSS=STANDARD? Т.е. после миграции на MAX_STRING_SIZE=EXTENDED откатить БД на заранее созданную точку восстановления и вернуть  MAX_STRING_SIZE=STANDARD ?

-- Попробуем проверить
-- Создаём точку восстановления BEFORE_MSS
SQL> create restore point BEFORE_MSS guarantee flashback database;
Restore point created.


RMAN> list restore point all;

SCN              RSP Time            Type       Time                Name
---------------- ------------------- ---------- ------------------- ----
2359859                              GUARANTEED 2022.12.11 15:55:35 BEFORE_MSS



-- Выполняем миграцию
-- Поскольку данная миграция затрагивает код приложений, то предварительно необходимо собрать информацию об инвалидных объектах.
-- А после миграции посмотреть - не появилось дополнительно что-то инвалидное ?

SQL> conn / as sysdba
Connected.
SQL> ALTER SYSTEM SET max_string_size=EXTENDED scope=spfile;
System SET altered.

SQL> shutdown immediate
SQL> startup upgrade
SQL> @?/rdbms/admin/utl32k
--
во время первого прогона случайно нажал Ctrl+C, скрипт свалился и был запущен повторно, никаких проблем поле этого не было, похоже, что можно запускать этот скрипт несколько раз

-- Поскольку в процессе миграции на 32К некоторые объекты могут стать инвалидными, то откомпилируем весь софт в БД еще раз
SQL> @?/rdbms/admin/utlrp

SQL> shutdown immediate
SQL> startup

-- Теперь наша БД с MSS=EXTENDED
-- С помощью нашего тестового примера проверим как работает 32K

SQL> show parameter max_string
NAME            TYPE   VALUE    
--------------- ------ --------
max_string_size string EXTENDED

drop table mss;
create table MSS (col_MSS varchar2(32767));
insert into MSS values (rpad('x',4000));
insert into MSS values (rpad('x',4001));
insert into MSS values (rpad('x',32767));
select rownum, length(col_MSS) from MSS;
select length (rpad('x',32767)) from dual;

SQL> select rownum, length(col_MSS) from MSS;

   ROWNUM    LENGTH(COL_MSS)
_________ __________________
        1               4000
        2               4001
        3              32767

SQL> select length (rpad('x',32767)) from dual;

   LENGTH(RPAD('X',32767))
__________________________
                     32767
-- Вполне ожидаемый результат: VARCHAR2 длиной до 32767 байт.


-- Переходим к FLASHBACK TO RESTORE POINT:

SQL> alter system set max_string_size='STANDARD' scope=spfile;
SQL> shutdown immediate
$ rman target /
RMAN> startup mount
RMAN> flashback database to restore point BEFORE_MSS;

Starting flashback at 11-DEC-22
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=137 device type=DISK

starting media recovery
media recovery complete, elapsed time: 00:00:07

Finished flashback at 11-DEC-22

RMAN> alter database open resetlogs;


SQL> show parameter max_string
NAME            TYPE   VALUE    
--------------- ------ --------
max_string_size string STANDARD



-- Создадим таблицу и посмотрим что получится:
drop table mss;
create table MSS (col_MSS varchar2(32767));
insert into MSS values (rpad('x',4000));
insert into MSS values (rpad('x',4001));
insert into MSS values (rpad('x',32767));
select rownum, length(col_MSS) from MSS;
select length (rpad('x',32767)) from dual;

SQL> drop table mss;

Table MSS dropped.


-- Возникает ожидаемая ошибка:
SQL> create table MSS (col_MSS varchar2(32767));

Error starting at line : 1 in command -
create table MSS (col_MSS varchar2(32767))
Error report -
ORA-00910: specified length too long for its datatype
00910. 00000 -  "specified length too long for its datatype"
*Cause:    for datatypes CHAR and RAW, the length specified was > 2000;
           otherwise, the length specified was > 4000.
*Action:   use a shorter length or switch to a datatype permitting a
           longer length such as a VARCHAR2, LONG CHAR, or LONG RAW

SQL> create table MSS (col_MSS varchar2(4000));

Table MSS created.

SQL> insert into MSS values (rpad('x',4000));

1 row inserted.

SQL> insert into MSS values (rpad('x',4001));

1 row inserted.

SQL> insert into MSS values (rpad('x',32767));

1 row inserted.

SQL> commit;

Commit complete.

SQL> select rownum, length(col_MSS) from MSS;

   ROWNUM    LENGTH(COL_MSS)
_________ __________________
        1               4000
        2               4000
        3               4000

SQL> select length (rpad('x',32767)) from dual;

   LENGTH(RPAD('X',32767))
__________________________
                      4000



-- Поведение полностью повторяет то, что было до миграции.
-- Подтверждаем, что откат на точку восстановления возможен.

-- Не забудьте удалить точку восстановления:
SQL> drop restore point BEFORE_MSS ;

Sunday, December 4, 2022

Block Change Tracking

Начиная с 19.16 BCT-файл будет кешироваться в Flash Cache.

Начиная с 19.17 CTWR назначает операциям В/В высокий приоритет при высокой загрузке В/В.

Wednesday, November 16, 2022

Новости HW

Компания Seagate обновила семейство HDD с двумя независимыми блоками магнитных головок для пользователей, которым необходима повышенная производительность. Диски доступны в модификациях с интерфейсом SATA-3 и SAS-3, при этом SAS-модели выглядят для хоста как два независимых логических HDD.
https://servernews.ru/1077354
В два раза больше IOPS, надо полагать.
Не только в процессорах бывает HyperThreading.
Ну а потом будут диски с тремя блоками, с четырьмя ...


Компания AMD выпустила новое 4-е поколение процессоров AMD EPYC: 96 ядер,  12 каналов памяти DDR5, PCIe 5.0 и поддержка памяти CXL.
Оракл уже предлагает в своём Облаке серверы OCI E5 с этими процессорами.
https://www.amd.com/en/press-releases/2022-11-10-offering-unmatched-performance-leadership-energy-efficiency-and-next

Ждём Экзадату на этих ЦПУ.
Наверное будет только в Облаке Оракл.


# ocrconfig -add +DATA PROT-30: The Oracle Cluster Registry location to be added is not usable. PROC-50: The Oracle Cluster Registry locatio...