Показаны сообщения с ярлыком База Данных. Показать все сообщения
Показаны сообщения с ярлыком База Данных. Показать все сообщения

воскресенье, 16 мая 2021 г.

Что такое База Данных (БД)

 База данных — это место для хранения данных. Используется в том числе в клиент-серверной архитектуре. Это все интернет-магазины, сайты кинотеатров или авиабилетов... Вы делаете заказ, а система сохраняет ваши данные в базе.

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

Статья рассчитана на начинающих тестировщиков или аналитиков, то есть тех, кто будет работать с базой, но не на супер-глубоком уровне. Она для тех, кто только входит в мир ИТ, и многого не знает. Она объясняет, что это за звено в клиент-серверной архитектуре такое, и зачем оно нужно.

четверг, 6 мая 2021 г.

Требования ACID на простом языке

Мне нравятся книги из серии Head First O`Reilly — они рассказывают просто о сложном. И я стараюсь делать также.

Когда речь идёт о базах данных, могут всплыть магические слова «Требования ACID». На собеседовании или в разговоре разработчиков — не суть. В этой статье я расскажу о том, что это такое, как расшифровывается ACID и что означает каждая буква.

Требования ACID — набор требований, которые обеспечивают сохранность ваших данных. Что особенно важно для финансовых операций. Мы же не хотим остаться без денег из-за разрыва соединения или ошибки в ПО, не так ли?

См также:

Что такое транзакция

Давайте пройдемся по каждой букве ACID и посмотрим на примерах, чем архив лучше 10 разных файлов. И чем транзакция лучше 10 отдельных запросов.

Ссылка на ХАБР


Atomicity — Атомарность

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

Друг познается в беде, а база данных — в работе с ошибками. О, если бы всё всегда было хорошо и без ошибок! Тогда бы никакие ACID были бы не нужны. Но как только возникает ошибка, атомарность становится очень важна.

Допустим, вы решили отправить маме деньги. Когда вы делаете перевод внутри банка, что происходит:

  1. У вас деньги списались

  2. Маме поступили

И допустим, что у нас 2 отдельных запроса. А теперь посмотрим, что будет при возникновении ошибок:


воскресенье, 17 января 2021 г.

Что такое транзакция

Транзакция — это набор операций по работе с базой данных (БД), объединенных в одну атомарную пачку.

(Предполагается, что вы знаете, что такое БД. Но чуть позже тут будет ссылка на статью «что это такое»)

Транзакционные базы данных (базы, работающие через транзакции) выполняют требования ACID, которые обеспечивают безопасность данных. В том числе финансовых данных =) Поэтому разработчики их и выбирают.

Я расскажу о том, что такое транзакция. Как ее открыть, и как закрыть. И почему это важно — закрывать транзакцию. И тогда при написании запросов к базе у вас будет осознанное понимание, что происходит там, под капотом, и зачем же нужен этот обязательный коммит после апдейта.



Что такое транзакция


Транзакция — это архив для запросов к базе. Он защищает ваши данные благодаря принципу «всё, или ничего».

Представьте, что вы решили послать другу 10 файликов в мессенджере. Какие есть варианты:
  1. Кинуть каждый файлик отдельно.
  2. Сложить их в архив и отправить архив.
Вроде бы разницы особой нет. Но что, если что-то пойдет не так? Соединение оборвется на середине, сервер уйдет в ребут или просто выдаст ошибку...

В первом случае ваш друг получит 9 файлов, но не получит один.


четверг, 10 сентября 2015 г.

Oracle. Перенос в другое табличное пространство

Наша система работает с базой данных Oracle. У Заказчика БД размещена на SSD-дисках, чтобы работало шустрее. Столкнулись с проблемой — кончилось место. Докупать SSD слишком дорого, нам выделили простые диски, на которые надо было частично переехать.

По итогам переезда мой коллега написал интересные заметки, которые я сюда и выкладываю Smile :)

При переносе таблицы или матвью в другое табличное пространство все индексы на этой таблице становятся UNUSABLE. Для того, чтобы вернуть их в стан валидных, надо сделать ребилд (см. ниже). Также могут невалидными стать процедуры, функции и пакеты. При необходимости можно им сделать compile.

Таблица или матвью

alter table tbl move tablespace new_tblspc;
alter materialized view mview move tablespace new_tblspc;

Партиционированная таблица

-- указать, где создавать новые партиции
alter table tbl modify default attributes tablespace new_tblspc;
-- перенести существующие партиции - получить набор запросов
select 'alter table '||table_name||' move partition '
||partition name||' tablespace new_tblspc;'
from user_tab_partitions where table_name = upper('tbl') 
and tablespace_name = upper('old_tblspc');
Скопировать получившиеся запросы и выполнить. Для контроля выполнить ещё раз второй запрос, он должен вернуть пустой результат.
Для партиционированного матвью всё получилось как-то сложно. Легче оказалось его дропнуть и создать в новом табличном пространстве.

Индексы

-- посмотреть список невалидных индексов
select owner, index_name, status
from dba_indexes
where status not in ('VALID','N/A');
-- перестроение индекса
alter index idx_name rebuild;
-- перестроение индекса с переносом в другое табличное пространство
alter index idx_name rebuild tablespace new_tblspc;

Невалидные объекты

Посмотреть список невалидных объектов
select owner, object_type, object_name
from dba_objects
where status != 'VALID';
 
select 'alter '||object_type||' '||owner||'.'||object_name||' compile;'
from dba_objects
where status != 'VALID';
-- перекомпилировать пакет целиком
alter package pkg_name compile;
alter package pkg_name compile package;
-- только заголовок или только тело (понадобится последнее, скорее всего)
alter package pkg_name compile specification;
alter package pkg_name compile body;
alter package body pkg_name compile;
-- функция и процедура
alter function func_name compile;
alter procedure proc_name compile;
В принципе, oracle должен перекомпилировать это всё при запуске, но лучше сделать заранее. Если перекомпилировать заголовок пакета, то из-за этого могут стать невалидными другие объекты, которые данный пакет используют.