Имам Oracle 19.3 Multitenant база данни, която се опитвам да приложа актуализацията на версията 19.7. RU беше инсталиран от opatch съвсем добре. Но datapatch ще доведе до грешка ORA-1114. Получавам грешки като следните в един от регистрационните файлове:
SQL> промяна на включваща се база данни GOLD2020_06_18_123653 отворена за четене запис instances=all;
променете включваща се база данни GOLD2020_06_18_123653 отворете четене за запис екземпляри=всички
*
ГРЕШКА на ред 1:
ORA-65107:Възникна грешка при обработката на текущата задача на екземпляр:1
ORA-17500:ODM грешка:Невалиден аргумент
ORA-01114:IO грешка при запис на блок във файл 12346 (блок № 1)
ORA-17500:ODM грешка:Невалиден аргумент
ORA-01114:Блок за запис на грешка в IO във файл 12345 (блок № 1)
ORA-17500:ODM грешка:Невалиден аргумент
Преди да мога да обясня какъв е проблемът, нека обсъдя как използваме Multitenant в моята среда. Веднъж седмично имаме задача за cron, която създава копие на нашата производствена база данни (използвайки хардуерни моментни снимки на диск). Ние наричаме това копие на продукцията нашия „златен образ“. Това златно изображение е включено в нашата база данни като един от нашите PDB. Името на PDB е във формат GOLDyyyy_mm_dd_hhmiss така че да знаем кога е създаден този PDB.
Всички наши бази данни за разработчици и тестове след това се създават от този PDB със златно изображение. Когато трябва да обновя DEV1 или TEST, ние просто изключваме PDB за DEV1 или TEST и го пускаме. След това създаваме клонинг на моментна снимка на най-новото златно изображение. PDB със златното изображение е в режим САМО ЧЕТЕНЕ, за да се улесни клонирането на моментна снимка.
Както писах тук, когато PDB се използва като източник за клонинг на моментна снимка, Oracle ще промени разрешенията на файла на 220. Това е Oracle, който ни защитава от самите нас. Не трябва да ни се позволява да променяме източника на клонинг на моментна снимка, така че Oracle да прави файловете с данни само за четене. Който и да е в Oracle, който е решил, че промяната на разрешенията за файлове е добра идея, не е говорил за това с разработчиците на datapatch.
Datapatch вижда PDB САМО ЧЕТЕНЕ и иска да го отвори като READ WRITE, да поправи вътрешността на PDB и след това да се върне на САМО ЧЕТЕНЕ. Въпреки това, datapatch не може да отвори PDB в режим на четене на запис, тъй като разрешенията на файла няма да го позволят. Оттук и грешките, които получавам.
Oracle ми направи това... те принудиха разрешенията за файлове еднопосочно и след това datapatch не може да направи това, което сега искат да прави.
Все още не съм получил официално съобщение с моята заявка за услуга, но очаквам това да се превърне в грешка. Според мен Datapatch трябва да пропуска всички PDB, които са източници за клонинги на моментни снимки.
Междувременно можете да си проправите път през това с груба сила. Опитах се да използвам параметъра -exclude_pdbs за datapatch, но това не работи. Очевидно има известна грешка, при която този параметър не работи, ако вашият списък с PDBs има запетая. Така че трябваше да стартирам datapatch, както следва:\
./datapatch -verbose -pdbs cdb\$root
./datapatch -verbose -pdbs pdb\$seed
./datapatch -verbose -pdbs dev1,dev2
Първо, стартирах datapatch, за да поправя CDB$ROOT. След това закърпих PDB$SEED. След това закърпих моите PDB за разработчици. Просто не поправих моите PDB със златно изображение.