\documentclass[12pt, a4paper] {ncc}
\usepackage[utf8] {inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english, russian] {babel}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings,a4wide,longtable,amsmath,amsfonts,graphicx,tikz}
\usepackage{indentfirst,fancyvrb,pdfpages,tabularx}
\usepackage[rounded]{syntax}

\begin{document}
\setcounter{figure}{0}
\frenchspacing
\pagestyle{plain}
% ============================ ТИТУЛЬНЫЙ ЛИСТ ================================
\begin{center}
     Национальный исследовательский университет информационных технологий,
                              механики и оптики.\\
                       Кафедра вычислительной техники.\\
                      Системы управления базами данных.
\end{center}
\vspace{\stretch{2}}
\begin{center}
                         {\bf Лабораторная работа №2}\\
                 Основы конфигурирования серверов Oracle SQL.\\
                                {\sl 650 вариант}
\end{center}
\vspace{\stretch{3}}
\begin{flushright}
                                          Работу выполнил студент группы P3415\\
                                                         {\it Халанский Дмитрий}
\end{flushright}
\vspace{\stretch{4}}
\begin{center}
                                      2016
\end{center}
\newpage
% ======================== КОНЕЦ ТИТУЛЬНОГО ЛИСТА ============================

% ================================ ОТЧЁТ =====================================

\tableofcontents

\section{Этап 1}

\subsection{Постановка задачи}

Цель работы~--- сконфигурировать экземпляр Oracle ASM на выделенном сервере и
настроить его работу с базой данных, созданной при выполнении лабораторной
работы №1.

\begin{itemize}
	\item Необходимо использовать тот же узел, что и в лабораторной работе
                №2.
        \item Имя сервиса: \texttt{ASM.100000}, где \texttt{100000}~--- ID
                студента.
        \item \texttt{ASM\_POWER\_LIMIT}: 4.
        \item Количество дисковых групп: 4.
        \item Имена и размерности дисковых групп:
                \begin{itemize}
                        \item bravefox, 6
                        \item braveeagle, 7
                        \item carefulhamster, 7
                        \item carelessfox, 5
                \end{itemize}
        \item В качестве хранилища данных (дисков) необходимо использовать
                файлы. Имена файлов должны строиться по шаблону
                \texttt{\$DISKGROUP\_NAME\$X}, где
                \texttt{\$DISKGROUP\_NAME}~--- имя дисковой группы, а
                \texttt{\$X}~--- порядковый номер файла в группе (нумерация
                начинается с нуля).
        \item Путь к файлам ASM~---
                \texttt{/u01/\$DISKGROUP\_NAME/\$DISK\_FILE\_NAME}.
        \item Существующие файлы БД необходимо смигрировать в хранилище ASM.
\end{itemize}

В процессе конфигурации ASM можно пользоваться только интерфейсом командной строки и утилитой SQLPlus; использовать графический конфигуратор нельзя.

\subsection{Ход работы}

\subsubsection{Подготовка среды}

Зададим переменные окружения.

\begin{lstlisting}[language=sh]
export ORACLE_HOME=/u01/app/11.2.0/grid
export ORACLE_SID=+ASM.182349
PATH=$ORACLE_HOME/bin:$PATH
\end{lstlisting}

В результате должны стать доступными для вызова по имени без указания полного
пути утилиты \texttt{sqlplus} и \texttt{crsctl}, которые потребуются по ходу
работы. Проверим, что это так:

\begin{Verbatim}
$ type sqlplus
sqlplus is /u01/app/11.2.0/grid/bin/sqlplus
\end{Verbatim}

\subsubsection{Запуск Cluster Services Synchronization Daemon}

\begin{figure}
\begin{Verbatim}[frame=single]
bash-3.2$ crsctl stat res ora.cssd -t
--------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       db150
\end{Verbatim}
\caption{Пример вывода \texttt{crsctl stat res ora.cssd -t} при работающем CSSD}
\label{fig:cssdon}
\end{figure}

\begin{figure}
\begin{Verbatim}[frame=single]
crsctl stat res ora.cssd -t
--------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------
ora.cssd
      1        ONLINE  OFFLINE
\end{Verbatim}
\caption{Пример вывода \texttt{crsctl stat res ora.cssd -t} при выключенном CSSD}
\label{fig:cssdoff}
\end{figure}

ASM не будет работать без запущенного демона синхронизации сервисов кластера.
Для проверки его состояния нужно ввести команду

\begin{lstlisting}[language=sh]
crsctl stat resource ora.cssd -t
\end{lstlisting}

В колонке \texttt{STATE}, как продемонстрировано на рис. \ref{fig:cssdon}, должно быть \texttt{ONLINE}. В противном случае (рис. \ref{fig:cssdoff}) сервис необходимо запустить:

\begin{lstlisting}[language=sh]
crsctl start resource ora.cssd
\end{lstlisting}

\subsubsection{Создание дисков}

В качестве дисков послужат обычные файлы. Создадим их:

\begin{lstlisting}[language=sh]
create_disk() {
        local name=$1;
        local disks=$2;
	local size=$3;
        mkdir -p /u01/$name;
        for ((n=0; n<disks; n++)); do
                /usr/sbin/mkfile -n $size $name/$name$n;
        done;
}

create_disk bravefox 6 500m
create_disk braveeagle 7 500m
create_disk carefulhamster 7 30m
create_disk carelessfox 5 30m
\end{lstlisting}

Проверим, что они появились:
\begin{Verbatim}
bash-3.2$ ls -lh brave* care*
braveeagle:
total 7
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle0
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle1
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle2
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle3
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle4
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle5
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 braveeagle6

bravefox:
total 6
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 bravefox0
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 bravefox1
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 bravefox2
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 bravefox3
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 bravefox4
-rw-------   1 oracle   oinstall    500M нояб. 24 20:25 bravefox5

carefulhamster:
total 7
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster0
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster1
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster2
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster3
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster4
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster5
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carefulhamster6

carelessfox:
total 5
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carelessfox0
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carelessfox1
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carelessfox2
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carelessfox3
-rw-------   1 oracle   oinstall     30M нояб. 24 20:25 carelessfox4
\end{Verbatim}

Убеждаемся, что это sparse-файлы и не занимают много места, пока мы не начнём
их заполнять данными:

\begin{Verbatim}
bash-3.2$ du -hs brave* care*
   5K   braveeagle
   4K   bravefox
   5K   carefulhamster
   4K   carelessfox
\end{Verbatim}

\subsubsection{Создание файла с начальными настройками}

Чтобы Oracle распознал файл с начальными настройками, нужно, чтобы он
располагался в директории \texttt{\$ORACLE\_HOME/dbs/init\$ORACLE\_SID}. В
нашем случае это файл \texttt{initASM.182349}.

\begin{Verbatim}
_asm_allow_only_raw_disks=false
instance_type=asm
asm_power_limit=9
asm_diskstring=(
        '/u01/braveeagle/*',
        '/u01/bravefox/*',
        '/u01/carefulhamster/*',
        '/u01/carelessfox/*')
\end{Verbatim}

Назначение используемых полей таково:

\begin{tabularx}{0.9\textwidth}{|c|c|X|}
\hline
\bf Имя поля & \bf Стандартное & \bf Описание \\
             & \bf значение    & \\
\hline
\tt \_asm\_allow\_only\_raw\_disks & \tt true & ASM выдаёт ошибку при попытке
	использовать в качестве диска что-то помимо блочного устройства. \\
\hline
\tt instance\_type & \tt rdbms & Позволяет отличить экземпляр базы данных от
	экземпляра ASM; может принимать значения \texttt{rdbms} и \texttt{asm}.
\\
\hline
\tt asm\_power\_limit & 1 & Определяет по шкале от 0 до 11, как много ресурсов
	системы ASM будет тратить на перераспределение данных по дискам.\\
\hline
\tt asm\_diskstring & & Задаёт список путей, по которым ASM должен искать
потенциальные диски; если этот параметр не установить, то ASM сможет
использовать лишь диски, расположенные в стандартной локации. В случае Solaris
это \texttt{/dev/rdsk/*}. \\
\hline
\end{tabularx}

\subsubsection{Запускаем экземпляр ASM}

Для запуска экземпляра вызываем команду \texttt{startup}:

\begin{lstlisting}[language=sh]
echo startup | sqlplus / as sysasm
\end{lstlisting}

Единственной ошибкой при инициализации должна стать \texttt{ORA-15110: no
diskgroups mounted}. Ошибка вызвана тем, что дисковых групп ещё не существует.
Её можно проигнорировать.

\subsubsection{Проверка состояния дисков}

Проверяем, что ASM определил нужные нам файлы как диски:

\begin{lstlisting}[label={lst:check},language=sh]
cat << 'EOF' | sqlplus / as sysasm | sed -n '/^NAME/,/selected.$/p'
set pagesize 300
column name format a20
column path format a35
select name,path,mount_status from v$asm_disk order by path;
EOF
\end{lstlisting}

Вывод в нашем случае должен быть таким:

\begin{Verbatim}
NAME                 PATH                                MOUNT_S
-------------------- ----------------------------------- -------
                     /u01/braveeagle/braveeagle0         CLOSED
                     /u01/braveeagle/braveeagle1         CLOSED
                     /u01/braveeagle/braveeagle2         CLOSED
                     /u01/braveeagle/braveeagle3         CLOSED
                     /u01/braveeagle/braveeagle4         CLOSED
                     /u01/braveeagle/braveeagle5         CLOSED
                     /u01/braveeagle/braveeagle6         CLOSED
                     /u01/bravefox/bravefox0             CLOSED
                     /u01/bravefox/bravefox1             CLOSED
                     /u01/bravefox/bravefox2             CLOSED
                     /u01/bravefox/bravefox3             CLOSED
                     /u01/bravefox/bravefox4             CLOSED
                     /u01/bravefox/bravefox5             CLOSED
                     /u01/carefulhamster/carefulhamster0 CLOSED
                     /u01/carefulhamster/carefulhamster1 CLOSED
                     /u01/carefulhamster/carefulhamster2 CLOSED
                     /u01/carefulhamster/carefulhamster3 CLOSED
                     /u01/carefulhamster/carefulhamster4 CLOSED
                     /u01/carefulhamster/carefulhamster5 CLOSED
                     /u01/carefulhamster/carefulhamster6 CLOSED
                     /u01/carelessfox/carelessfox0       CLOSED
                     /u01/carelessfox/carelessfox1       CLOSED
                     /u01/carelessfox/carelessfox2       CLOSED
                     /u01/carelessfox/carelessfox3       CLOSED
                     /u01/carelessfox/carelessfox4       CLOSED

25 rows selected.
\end{Verbatim}

Так как диски ещё не назначены дисковым группам, у них нет имён.

\subsubsection{Настройка дисковых групп}

Выполняется запросом

\begin{syntdiag}
\tok{CREATE DISKGROUP} <name> \begin{stack} \\
<type> \tok{REDUNDANCY}
\end{stack}
\begin{rep}
\begin{stack} \\
\tok{FAILGROUP} <name>
\end{stack}
\tok{DISK}
\begin{rep}
<disc description> \\
\tok{,}
\end{rep}
\end{rep}
\end{syntdiag}

Для наших групп зададим избыточность \texttt{EXTERNAL}, что соответствует
отсутствию зеркалирования. Указывать \texttt{FAILGROUP} мы явно не станем:
тогда каждый диск будет находиться в собственной группе отказа.

Пример для дисковой группы \texttt{carelessfox}:

\begin{lstlisting}[language=SQL]
CREATE DISKGROUP carelessfox EXTERNAL REDUNDANCY DISK
	'/u01/carelessfox/carelessfox0',
	'/u01/carelessfox/carelessfox1',
	'/u01/carelessfox/carelessfox2',
	'/u01/carelessfox/carelessfox3',
	'/u01/carelessfox/carelessfox4'
ATTRIBUTE 'COMPATIBLE.ASM'='11.2.0.0.0';
\end{lstlisting}

После совершения этого запроса и аналогичных для других групп проверяем
корректность назначения дисков группам запросом из главы \ref{lst:check}.

Вывод должен стать таким:
\begin{Verbatim}
NAME                 PATH                                MOUNT_S
-------------------- ----------------------------------- -------
BRAVEEAGLE_0000      /u01/braveeagle/braveeagle0         CACHED
BRAVEEAGLE_0001      /u01/braveeagle/braveeagle1         CACHED
BRAVEEAGLE_0002      /u01/braveeagle/braveeagle2         CACHED
BRAVEEAGLE_0003      /u01/braveeagle/braveeagle3         CACHED
BRAVEEAGLE_0004      /u01/braveeagle/braveeagle4         CACHED
BRAVEEAGLE_0005      /u01/braveeagle/braveeagle5         CACHED
BRAVEEAGLE_0006      /u01/braveeagle/braveeagle6         CACHED
BRAVEFOX_0000        /u01/bravefox/bravefox0             CACHED
BRAVEFOX_0001        /u01/bravefox/bravefox1             CACHED
BRAVEFOX_0002        /u01/bravefox/bravefox2             CACHED
BRAVEFOX_0003        /u01/bravefox/bravefox3             CACHED
BRAVEFOX_0004        /u01/bravefox/bravefox4             CACHED
BRAVEFOX_0005        /u01/bravefox/bravefox5             CACHED
CAREFULHAMSTER_0000  /u01/carefulhamster/carefulhamster0 CACHED
CAREFULHAMSTER_0001  /u01/carefulhamster/carefulhamster1 CACHED
CAREFULHAMSTER_0002  /u01/carefulhamster/carefulhamster2 CACHED
CAREFULHAMSTER_0003  /u01/carefulhamster/carefulhamster3 CACHED
CAREFULHAMSTER_0004  /u01/carefulhamster/carefulhamster4 CACHED
CAREFULHAMSTER_0005  /u01/carefulhamster/carefulhamster5 CACHED
CAREFULHAMSTER_0006  /u01/carefulhamster/carefulhamster6 CACHED
CARELESSFOX_0000     /u01/carelessfox/carelessfox0       CACHED
CARELESSFOX_0001     /u01/carelessfox/carelessfox1       CACHED
CARELESSFOX_0002     /u01/carelessfox/carelessfox2       CACHED
CARELESSFOX_0003     /u01/carelessfox/carelessfox3       CACHED
CARELESSFOX_0004     /u01/carelessfox/carelessfox4       CACHED

25 rows selected.
\end{Verbatim}

\subsubsection{Создание SPFILE}

Чтобы создать SPFILE, в первую очередь необходимо зарегистрировать сервис ASM,
в параметрах которого будет указано, где SPFILE находится. Расположим его в
дисковой группе \texttt{carelessfox}.

\begin{lstlisting}[language=sh]
srvctl add asm -p '+CARELESSFOX' -d '+CARELESSFOX'
\end{lstlisting}

Теперь создадим SPFILE и перезапустим ASM, чтобы изменения вступили в силу.

\begin{lstlisting}[language=SQL]
CREATE SPFILE FROM MEMORY;
SHUTDOWN IMMEDIATE;
STARTUP;
\end{lstlisting}

\subsubsection{Перенос старых данных на ASM}
\label{ch:migtoasm}

В первую очередь зададим среду исполнения для работы с базой данных, а не ASM:

\begin{lstlisting}[language=sh]
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=s182349
PATH=$ORACLE_HOME/bin:$PATH
\end{lstlisting}

Нам нужно перевести базу данных в состояние \texttt{mount}. Если база данных
вовсе не запущена, запускаем её.

\begin{lstlisting}[language=sh]
if ps -ef | grep [o]ra_pmon_$ORACLE_SID > /dev/null; then
	echo startup mount
else
	echo alter database mount
fi | sqlplus / as sysdba
\end{lstlisting}

Для переноса в ASM доступны
\begin{itemize}
\item Файлы с данными,
\item SPFILE,
\item Контрольные файлы и файлы восстановления.
\end{itemize}

Выполним работу, разделив её на такие этапы:

	Для переноса файлов с данными будем использовать диск
		\texttt{bravefox}: он достаточного размера.
\begin{lstlisting}[language=sh]
echo "BACKUP AS COPY INCREMENTAL LEVEL 0" \
"DATABASE FORMAT '+bravefox' TAG 'ORA_ASM_MIGRATION';" |
rman target=/
\end{lstlisting}

	Контрольные файлы и SPFILE будем хранить на диске
		\texttt{carelessfox}. Сохраняем SPFILE:
\begin{lstlisting}[language=sh]
cat << EOF | rman target=/
run {
	BACKUP AS BACKUPSET SPFILE;
	RESTORE SPFILE TO "+carelessfox/spfile";
}
EOF
\end{lstlisting}

		Создадим PFILE, который будет указывать на новый SPFILE:
\begin{lstlisting}[language=sh]
echo SPFILE=+carelessfox/spfile > /tmp/init.ora
\end{lstlisting}

		Теперь сделаем так, чтобы база данных работала с новым SPFILE.
		Перед перезапуском запомним локацию контрольного файла.
\begin{lstlisting}[language=SQL]
SELECT NAME FROM V$CONTROLFILE;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT PFILE='/TMP/INIT.ORA';
\end{lstlisting}

	Назначим локации для контрольных файлов и flash recovery area,
		затем перезапустим базу данных, чтобы изменения вступили в
		силу:
\begin{lstlisting}[language=SQL]
ALTER SYSTEM SET CONTROL_FILES='+CARELESSFOX/CT1.F'
	SCOPE=SPFILE
	SID='S182349';
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+BRAVEEAGLE'
	SID='S182349';
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT PFILE='INITS_TEMP.ORA';
\end{lstlisting}

Восстановим контрольный файл из имеющегося (название которого мы определяли
ранее) и зададим, чтобы использовались файлы данных из ASM:
\begin{lstlisting}[language=sh]
cat << EOF | rman target=/
restore controlfile from 'path_to_file';
alter database mount;
switch database to copy;
EOF
\end{lstlisting}

Наконец, включим flashback с поддержкой ASM (это занимает длительное время):
\begin{lstlisting}[language=SQL]
ALTER DATABASE FLASHBACK OFF;
ALTER DATABASE FLASHBACK ON;
\end{lstlisting}

Проверим, что система использует правильные файлы:
\begin{Verbatim}
SQL> select name from v$datafile;

NAME
----------------------------------------------------------
+BRAVEFOX/bigmath/datafile/system.256.928787519
+BRAVEFOX/bigmath/datafile/sysaux.258.928787533
+BRAVEFOX/bigmath/datafile/sysaux.259.928787535
+BRAVEFOX/bigmath/datafile/undotbs1.257.928787525
+BRAVEFOX/bigmath/datafile/users.260.928787539
+BRAVEFOX/bigmath/datafile/users.261.928787543
+BRAVEFOX/bigmath/datafile/nice_gray_user.262.928787545
+BRAVEFOX/bigmath/datafile/nice_gray_user.263.928787549
+BRAVEFOX/bigmath/datafile/nice_gray_user.264.928787551
+BRAVEFOX/bigmath/datafile/nice_gray_user.265.928787555
+BRAVEFOX/bigmath/datafile/nice_gray_user.266.928787557
+BRAVEFOX/bigmath/datafile/long_orange_disk.267.928787561
+BRAVEFOX/bigmath/datafile/long_orange_disk.268.928787563

13 rows selected.

SQL> select name from v$controlfile;

NAME
----------------------------------------------------------
+CARELESSFOX/ct1.f

SQL> show parameter spfile;

NAME                TYPE        VALUE
------------------- ----------- --------------------------
spfile              string      +CARELESSFOX/spfile
\end{Verbatim}

\section{Этап 2}

Для выполнения второго этапа снова установим переменные окружения, требуемые
для работы с ASM.

\subsection{Удалить дисковую группу \texttt{bravefox}}

Пытаемся выполнить команду

\begin{lstlisting}[language=SQL]
DROP DISKGROUP BRAVEFOX INCLUDING CONTENTS;
\end{lstlisting}

Часть \texttt{INCLUDING CONTENTS} указывает, что нам не интересно наличие в
дисковой группе файлов.

Удаление не срабатывает. Выпадает ошибка \texttt{ORA-15027}: база данных
использует эту дисковую группу.

Для безусловного удаления можно написать

\begin{lstlisting}[language=SQL]
DROP DISKGROUP BRAVEFOX FORCE;
\end{lstlisting}

Мы не советуем.

Если дисковую группу всё же необходимо удалить, нужно перед этим осуществить
процесс миграции, схожий с описанным в \ref{ch:migtoasm}:

\begin{lstlisting}[language=sh]
cat << EOF | rman target=/
BACKUP AS COPY INCREMENTAL LEVEL 0
	DATABASE FORMAT '+richpig' TAG 'ORA_ASM_MIGRATION';
SWITCH DATABASE TO COPY;
\end{lstlisting}

\subsection{Добавить дисковую группу \texttt{richpig}[6], размер AU~--- 8 МБ}

Пользуясь функцией \texttt{create\_disk()}, создаём файлы:

\begin{lstlisting}[language=sh]
create_disk richpig 6 500m
\end{lstlisting}

Добавляем адреса новых дисков в \texttt{ASM\_DISKSTRING}:

\begin{lstlisting}[language=sh]
asmcmd dsset '/u01/braveeagle/*,/u01/bravefox/*,'\
'/u01/carefulhamster/*,/u01/carelessfox/*,/u01/richpig/*'
\end{lstlisting}

Добавляем дисковую группу:

\begin{lstlisting}[language=SQL]
CREATE DISKGROUP richpig EXTERNAL REDUNDANCY DISK
        '/u01/richpig/richpig0',
        '/u01/richpig/richpig1',
        '/u01/richpig/richpig2',
        '/u01/richpig/richpig3',
        '/u01/richpig/richpig4',
        '/u01/richpig/richpig5' ATTRIBUTE 'AU_SIZE'='8M';
\end{lstlisting}

\subsection{Добавить дисковую группу \texttt{thinsheep}[6], размер AU~--- 2 МБ}

\begin{lstlisting}[language=sh]
create_disk thinsheep 6 30m
asmcmd dsset '/u01/braveeagle/*,/u01/thinsheep/*,'\
'/u01/carefulhamster/*,/u01/carelessfox/*,/u01/richpig/*'
cat << EOF | sqlplus / as sysasm
CREATE DISKGROUP thinsheep EXTERNAL REDUNDANCY DISK
        '/u01/thinsheep/thinsheep0',
        '/u01/thinsheep/thinsheep1',
        '/u01/thinsheep/thinsheep2',
        '/u01/thinsheep/thinsheep3',
        '/u01/thinsheep/thinsheep4',
        '/u01/thinsheep/thinsheep5' ATTRIBUTE 'AU_SIZE'='2M';
EOF
\end{lstlisting}

\subsection{Пересоздать группу \texttt{carefulhamster}}

\begin{description}
	\item[Размер] 6 дисков
	\item[Избыточность] HIGH
	\item[Число групп отказа] 2
\end{description}

\begin{lstlisting}[language=SQL]
DROP DISKGROUP CAREFULHAMSTER;
CREATE DISKGROUP CAREFULHAMSTER HIGH REDUNDANCY
        FAILGROUP f1 DISK '/u01/carefulhamster/carefulhamster0',
                          '/u01/carefulhamster/carefulhamster1'
        FAILGROUP f2 DISK '/u01/carefulhamster/carefulhamster2',
                          '/u01/carefulhamster/carefulhamster3'
        FAILGROUP f3 DISK '/u01/carefulhamster/carefulhamster4',
                          '/u01/carefulhamster/carefulhamster5';
\end{lstlisting}

\subsection{Удалить диск №4 из группы \texttt{thinsheep}}

\begin{lstlisting}[language=SQL]
ALTER DISKGROUP THINSHEEP DROP DISK THINSHEEP_0003;
\end{lstlisting}

\subsection{Добавить новый диск в группу \texttt{carelessfox}}

\begin{lstlisting}[language=sh]
/usr/sbin/mkfile -n 30m /u01/carelessfox/carelessfox5
\end{lstlisting}

\begin{lstlisting}[language=SQL]
ALTER DISKGROUP CARELESSFOX ADD DISK
	'/u01/carelessfox/carelessfox5';
\end{lstlisting}

\subsection{Удалить диск №3 из группы \texttt{richpig}}

\begin{lstlisting}[language=SQL]
ALTER DISKGROUP RICHPIG DROP DISK RICHPIG_002;
\end{lstlisting}

\subsection{Удалить дисковую группу \texttt{carefulhamster}}

\begin{lstlisting}[language=SQL]
DROP DISKGROUP CAREFULHAMSTER;
\end{lstlisting}

\section{Выводы}

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

% ============================ КОНЕЦ ОТЧЁТА ==================================

\end{document}
