Change all tables, view and sequences owner in a Postgres DB from bash: Tables: for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" maksenov` ; do psql -c "alter table \"$tbl\" owner to maksenov" maksenov; done Sequences: for tbl in `psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" maksenov` ; do psql -c "alter sequence \"$tbl\" owner to maksenov" maksenov ; done Views: for tbl in `psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" maksenov` ; do psql -c "alter view \"$tbl\" owner to maksenov" maksenov; done
initial postgres beauty
после установки свежего экземпляра postgresql отображение в консоли psql не очень радует на больших строках, которые не вмещаются в экран 🙂
поправим пейджинг:
cd echo "\setenv PAGER 'less -XS'" > .psqlrc
поправим bash prompt string:
echo 'PS1=["\u@\h \w]\$ "' >> .bash_profile
Частота переключения REDO логов по часам
Online Redo Log Switch Frequency Map Query.
Взято с: https://blog.zeddba.com/2019/05/31/online-redo-log-switch-frequency-map/
Пусть будет здесь, в последнее время часто ищу подобного рода запрос
SELECT TRUNC (first_time) "Date", inst_id, TO_CHAR (first_time, 'Dy') "Day", COUNT (1) "Total", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '00', 1, 0)) "h0", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '01', 1, 0)) "h1", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '02', 1, 0)) "h2", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '03', 1, 0)) "h3", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '04', 1, 0)) "h4", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '05', 1, 0)) "h5", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '06', 1, 0)) "h6", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '07', 1, 0)) "h7", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '08', 1, 0)) "h8", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '09', 1, 0)) "h9", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '10', 1, 0)) "h10", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '11', 1, 0)) "h11", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '12', 1, 0)) "h12", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '13', 1, 0)) "h13", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '14', 1, 0)) "h14", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '15', 1, 0)) "h15", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '16', 1, 0)) "h16", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '17', 1, 0)) "h17", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '18', 1, 0)) "h18", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '19', 1, 0)) "h19", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '20', 1, 0)) "h20", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '21', 1, 0)) "h21", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '22', 1, 0)) "h22", SUM (DECODE (TO_CHAR (first_time, 'hh24'), '23', 1, 0)) "h23", ROUND (COUNT (1) / 24, 2) "Avg" FROM gv$log_history WHERE thread# = inst_id AND first_time > sysdate -7 GROUP BY TRUNC (first_time), inst_id, TO_CHAR (first_time, 'Dy') ORDER BY 1,2;
под катом — шапка для корретного отображения в sqlplus
Читать далее «Частота переключения REDO логов по часам»
Чистим-чистим арклоги в FRA ASM Standby
Automatic Storage Management на стендбай сервере ругается, что Disk Group FRA is 90.358% used ?
Давайте почистим Fast Recovery Area.
Немного подхачим гуляющий по интернету скрипт и получим готовую к выполнению в RMAN команду для удаления применённых арклогов с учётом тредов. Минус 2 от максимального, т.к. бывали случаи, что стендбай ломался и требовал пару уже применённых логов. Выполнять строго на Standby:
select 'DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE '|| (max(sequence#)-2)||' THREAD '||THREAD# ||';' from v$archived_log where applied = 'YES' AND RESETLOGS_TIME = (select MAX(RESETLOGS_TIME) from V$DATABASE_INCARNATION) group by THREAD#;---
Чтобы быть уверенным, что особого отставания нет и адских гепов, посмотрим на PRIMARY
select max(SEQUENCE#),THREAD# from v$archived_log where RESETLOGS_TIME = (select MAX(RESETLOGS_TIME) from V$DATABASE_INCARNATION) group by THREAD#;
Получим что-то вроде этого:
DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE 3786 THREAD 1; DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE 3571 THREAD 2;
Возможно, будет хорошим решением будет включение опции автоматического удаления накатившихся арклогов:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
Drop и Create индекса на Primary key
Появилась задача — Drop и Create индекса на Primary key (Именно такое потенциальное решение, из всех других предложенных вариантов, остаётся для Internal error ORA 600 [kdsgrp1] по рекомендации MOS)
Alter table "ARDOME"."RUNDOWN_ROW" drop primary key
Error report -
SQL Error: ORA-02273: denna UNIQUE/PRIMARY KEY refereras från några främmande nycklar
02273. 00000 - "this unique/primary key is referenced by some foreign keys"
*Cause: Self-evident.
*Action: Remove all references to the key before the key is to be dropped.
I. Давайте определим имя PK при помощи представления DBA_CONSTRAINTS:
В нашем случае это таблица RUNDOWN_ROW в схеме ARDOME.
select CONSTRAINT_NAME from DBA_CONSTRAINTS
where OWNER like 'ARDOME' and Table_name like 'RUNDOWN_ROW'
and CONSTRAINT_TYPE='P'
- C (check constraint on a table)
- P (primary key)
- U (unique key)
- R (referential integrity) — он же FK, который ссылаясь мешает удалить PK
- V (with check option, on a view)
- O (with read only, on a view)
Немного подшаманим и увидим информацию о FK на наш PK:
select * from DBA_CONSTRAINTS
where R_CONSTRAINT_NAME in (
select CONSTRAINT_NAME from DBA_CONSTRAINTS
where OWNER like 'ARDOME' and Table_name like 'RUNDOWN_ROW' and CONSTRAINT_TYPE='P')
Читать далее «Drop и Create индекса на Primary key»
Statspack. Установка и настройка.
«А у нас в квартире газ! А у вас?» А у нас Standard Edition!
Лишенные радости использования AWR (Automatic Workload Repository) в Enterprise Edition администраторы SE могут использовать набор утилит мониторинга производительности Statspack.
Установить Statspack
@%ORACLE_HOME%\rdbms\admin\spcreate
OR
@?/rdbms/admin/spcreate
Хорошо, установили, но статистика от этого собирается просто так не станет.
Что бы автоматом собиралась статистика:
@?/rdbms/admin/spauto.sql
Читать далее «Statspack. Установка и настройка.»
Повышенное ожидание log file sync. LGWR — Post/wait и Polling.
Version 11.2.0.3 , Windows 2008R2
Столкнулись с ситуацией повышенного log file sync wait.
Конечно написанное приложение далеко от идеала, и в БД очень много коммитов. Но раньше такой ситуации по ожиданиям не возникало, а код остался нетронутым.
Деградации в производительности дискового хранилища и сети не были найдены, всё железо стабильно продолжало работать. В алертлоге ничего путного тоже нет, только:
«Thu Mar 30 15:20:19 2017
Thread 1 cannot allocate new log, sequence 4824
Private strand flush not complete»
Читать далее «Повышенное ожидание log file sync. LGWR — Post/wait и Polling.»
Получить команду DDL, GET_DDL
Вывод получится довольно большой, потому перед началом лучше дать:
set pagesize 0
set long 30000
Получиться DDL команду для VIEW:
select dbms_metadata.get_ddl('VIEW','ИМЯ_ПРЕДСТАВЛЕНИЯ','ИМЯ_СХЕМЫ') from dual;
select dbms_metadata.get_ddl('VIEW','ACCOUNT_MANAGERS','OE') from dual;
select dbms_metadata.get_ddl('INDEX','ИМЯ_ИНДЕКСА','ИМЯ_СХЕМЫ') from dual;
select dbms_metadata.get_ddl('INDEX','DEPT_IDX','SCOTT') from dual;
Перенос файлов временного табличного пространства.
«Место на файловой системе начало подходить к коцу. Здесь же, на диске D располагаются bigfile пространства, довольно большие, переносить их не очень хочется, да и особо некуда, а место для их роста освободить не помешает.» — руководствуясь такими рассуждениями принимаю решение перенести что-то наименее критичное — это пара temp файлов.
1. Используя следующий запрос, посмотрим какие TEMP файлы имеет смысл переносить:
select round((bytes/1024/1024/1024),2) GB, Name from v$tempfile;
Нашли два файла по 60Гб каждый, их и будем переносить. Идём дальше. Читать далее «Перенос файлов временного табличного пространства.»
Перекомпиляция инвалидных объектов схемы
Определение инвалидных объектов
Для определения инвалидных объектов можно использовать представление DBA_OBJECTS, как в этом запросе:
COLUMN object_name FORMAT A30
SELECT owner,
object_type,
object_name,
status
FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type, object_name;
Полученную информацию можно использовать для выбора метода рекомпиляции. Читать далее «Перекомпиляция инвалидных объектов схемы»