\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}

\lstset{escapeinside={(*}{*)},}

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

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

\newcommand{\usrA}{disappointedgreenmutalisk}
\newcommand{\usrB}{furiousblackdrone}

\newcommand{\usriA}{\textit{\usrA}}
\newcommand{\usriB}{\textit{\usrB}}

\newcommand{\nodeA}{\texttt{ashamedtemplar0}}
\newcommand{\nodeB}{\texttt{ashamedtemplar1}}

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

\subsection{Конфигурация кластера}

\begin{description}
	\item[Имя БД] \texttt{ashamedtemplar};
	\item[Имена узлов] \nodeA, \nodeB.
\end{description}

\subsection{Подключение}

\subsection{Операции с базой данных}

\begin{lstlisting}[language=sh]
connect() {
sqlplus64 "system/oracle@("\
"DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)"\
"(HOST=db-cluster)(PORT=1521))"\
"(CONNECT_DATA=(SERVICE_NAME=ashamedtemplar)))"
}
\end{lstlisting}

\subsubsection{Вывод состояния сессий на узле \nodeA}

\subsubsection{Остановка узла \nodeA}
\begin{lstlisting}[language=sh]
srvctl stop instance -db ashamedtemplar -instance ashamedt1
\end{lstlisting}

\subsubsection{Создание пользователя \usriA}

\begin{lstlisting}[language=SQL]
ALTER SESSION SET "_ORACLE_SCRIPT"=true;
CREATE USER (*\usrA*) IDENTIFIED BY "oracle";
GRANT CONNECT TO (*\usrA*);
\end{lstlisting}

\subsubsection{Закрытие сессий \usriB}

\begin{lstlisting}[language=sh]
close_sessions() {
  user="$1"
  echo '{SELECT sid, serial#, inst_id FROM gv$session WHERE \
       username = upper('"$user"') and status = 'ACTIVE';}}' |
    sqlplus / as sysdba |
    grep -P '^([\t ]*[0-9]+[\t ]*){3}$' |
    awk '{print "ALTER SYSTEM KILL SESSION '\''"$1","$2",@"$3"'\'';"}' |
    sqlplus / as sysdba
}
\end{lstlisting}

\begin{lstlisting}[language=sh]
close_sessions (*\usrA*)
\end{lstlisting}

\subsubsection{Создание пользователя \usriB}

\begin{lstlisting}[language=SQL]
ALTER SESSION SET "_ORACLE_SCRIPT"=true;
CREATE USER (*\usrB*) IDENTIFIED BY "oracle";
GRANT CONNECT TO (*\usrB*);
\end{lstlisting}

\subsubsection{Закрытие сессий \usriB}

\begin{lstlisting}[language=sh]
close_sessions (*\usrB*)
\end{lstlisting}

\subsubsection{Вывод состояния сессий \usriB}

\begin{lstlisting}[language=SQL]
SELECT sid, serial#, inst_id FROM gv$session
	WHERE username='(*\usrA*)';
\end{lstlisting}

\subsubsection{Вывод состояния сессий на узле \nodeB}

\begin{lstlisting}[language=SQL]
SELECT sid, serial#, inst_id FROM gv$session
	WHERE inst_id=2;
\end{lstlisting}

\subsubsection{Закрытие сессий \usriB}

\begin{lstlisting}[language=sh]
close_sessions (*\usrB*)
\end{lstlisting}

\subsection{Экстренное отключение узла}

Отключим вычислительную систему, на которой располагается первый узел.

При попытке подключиться к ней:

\begin{Verbatim}
$ ssh oracle@172.16.0.1
ssh: connect to host 172.16.0.1 port 22: No route to host
\end{Verbatim}

Проверяем, что \texttt{db-cluster} теперь является \texttt{db2}:

\begin{Verbatim}
ip neigh | grep 172.16.0.[25]
\end{Verbatim}

MAC-адреса должны совпасть.

Подключаемся к базе данных и видим, что активный узел лишь один:

\begin{lstlisting}[language=SQL]
SQL>  SELECT inst_name FROM v$active_instances;
INST_NAME
----------------------------------------------
db2.orcl.cs.ifmo.ru:ashamedt2
\end{lstlisting}

\begin{lstlisting}
SQL> SELECT inst_name FROM v$active_instances;
INST_NAME
----------------------------------------------
db1.orcl.cs.ifmo.ru:ashamedt1
db2.orcl.cs.ifmo.ru:ashamedt2
\end{lstlisting}

\subsection{Администрирование кластера}

\subsubsection{Остановка кластера}

\begin{lstlisting}[language=sh]
crsctl stop cluster -all
\end{lstlisting}

При попытке подключения:

\begin{Verbatim}
ORA-12543: TNS:destination host unreachable
\end{Verbatim}

\subsubsection{Запуск Clusterware на узле \nodeB}

На узле \nodeB:

\begin{lstlisting}[language=sh]
crsctl start cluster
\end{lstlisting}

\subsubsection{Остановка кластера и запуск Clusterware на обоих узлах}

На узле \nodeB:

\begin{lstlisting}[language=sh]
crsctl stop cluster
crsctl start cluster -all
\end{lstlisting}

\section{Вывод}

В результате проделанной работы мы установили, что, согласно с \\
https://docs.oracle.com/database/121/LADBN/toc.htm\#LADBN101 утверждениями
Oracle, LXC-контейнеры теоретически предоставляют возможность держать базу
данных Oracle в них. Несмотря на это, пользоваться таким шансом настоятельно не
рекомендуется.

\end{document}

