Создание кластерной базы данных на "headless" серверах, импорт данных, сбор статистики и резервное копирование

THE HOLY BIBLE - King James Version - БИБЛИЯ в Синодальном переводе
"Нас Атакуют!" Изобличи козни лукавого, запрети диаволу

Создание кластерной базы данных на "headless" серверах, импорт данных, сбор статистики и резервное копирование

Современные высокопроизводительные компьютерные системы отличаются повышенной компактностью. Как пример, Oracle Exadata X2 построена на "headless" серверах и не имеет полноценного графического интерфейса пользователя. Операционная система на узлах кластера и на дисковых ячейках установлена без необходимых "rpm" пакетов для запуска X сервера или загрузки системы в runlevel 5.

Эта заметка рассматривает самый простой способ создания новой кластерной базы данных из командной строки, с ее последующей подготовкой к работе.

Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:



........... == Второе соборное послание святого апостола Петра == .............. === Глава 3, Стих 9 === 9 Не медлит Господь исполнением обетования, как некоторые почитают то  медлением; но долготерпит нас, не желая, чтобы кто погиб, но чтобы все  пришли к покаянию.

Лично для вас благая весть - Единородный Сын Божий Иисус Христос любит вас, Он взошел на крест за ваши грехи, был распят и на третий день воскрес, сел одесную Бога и открыл нам дорогу в Царствие Небесное.

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

Покайтесь, примите Иисуса как вашего Спасителя, ибо наступают последние времена и время близко - стоит Судья у ворот.

Пожалуйста, в своих каждодневных трудах, какими бы занятыми вы себе ни казались - находите время для Бога, Его заповедей и Библии.

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


Вернемся к нашим техническим деталям.

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

Я также предполагаю, что в наличии имеется правильно установленный и работающий Oracle RAC 11.2, возможно с уже существующими базами. В моей статье я рассматриваю Oracle Exadata x2 как предустановленную кластерную платформу и полагаю, что система уже работает в вашей серверной комнате. В то же время, в компании не существует централизованной версии Oracle Enterprise Manager Grid Control.

Мы рассмотрим несколько основных шагов:

  • Удаление старой имеющейся базы
  • Создание новой кластерной базы
  • Регистрация новой базы в Enterprise Manager Database Control
  • Загрузка данных с помощью DataPump
  • Сбор статистики
  • Резервное копирование готовой базы
  • Все эти действия будут выполнены исключительно из командной строки и не будут требовать графического интерфейса.

    Удаление старой имеющейся базы

    Предположим, что имеется ненужная база OLDDB с системным пользователем SYS и паролем "welcome". Нам необходимо избавиться от этой базы и использовать высвобожденное место для создания новой базы NEWDB.

    Операция выполняется в одно действие, используя Database Configuration Assistant в так называемом "silent" режиме, не требующем доступа к X-дисплею. При этом база OLDDB должна быть в состоянии принять соединение.

    [oracle@x1 ~]$ nohup dbca -deleteDatabase -sourceDB OLDDB -sysDBAUserName sys \
    -sysDBAPassword welcome -silent &
    
    Connecting to database
    9% complete
    14% complete
    19% complete
    23% complete
    28% complete
    33% complete
    38% complete
    47% complete
    Updating network configuration files
    48% complete
    52% complete
    Deleting instances and datafiles
    66% complete
    80% complete
    95% complete
    100% complete
    Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/OLDDB.log" for further
    details.
    
    [oracle@x1 ~]$ cat /u01/app/oracle/cfgtoollogs/dbca/OLDDB.log
    
    The Database Configuration Assistant will delete the Oracle instances and
    datafiles for your database. All information in the database will be deleted. Do
    you want to proceed?
    Connecting to database
    DBCA_PROGRESS : 9%
    DBCA_PROGRESS : 14%
    DBCA_PROGRESS : 19%
    DBCA_PROGRESS : 23%
    DBCA_PROGRESS : 28%
    DBCA_PROGRESS : 33%
    DBCA_PROGRESS : 38%
    ORA-12514: TNS:listener does not currently know of service requested in connect
    descriptor
    
    DBCA_PROGRESS : 47%
    Updating network configuration files
    DBCA_PROGRESS : 48%
    DBCA_PROGRESS : 52%
    Deleting instances and datafiles
    DBCA_PROGRESS : 66%
    DBCA_PROGRESS : 80%
    DBCA_PROGRESS : 95%
    DBCA_PROGRESS : 100%
    Database deletion completed.
    [oracle@x1 ~]$
    

    Как видно, listener уже не знал о старой базе данных, тем не менее процесс удаления прошел успешно. Использование Database Configuration Assistant позволяет выполнить сразу много действий - от физического удаления файлов до корректировки конфигурации кластерных служб.

    Создание новой кластерной базы

    Существует два способа создания базы из командной строки - с помощью SQL команды "CREATE DATABASE" и используя файл - сценарий (response file).

    Поскольку мы хотим попробовать простейший способ, я предлагаю вариант с файлом-сценарием. Опять будет использоваться Database Configuration Assistant, что позволяет нам выполнить множество действий одной командой.

    Подготовим response file для новой базы NEWDB, при этом пароль для всех пользователей будет установлен в "oracle", база должна обслуживаться процессами на четырех кластерных узлах, иметь локальную копию Enterprise Manager DB Console и иметь заданные значения для числа сессий и процессов.

    Я специально выбрал "старое" значение US7ASCII в качестве набора символов для новой базы - я не собираюсь хранить там что-либо кроме ASCII кодов и хочу сэкономить место на диске и в оперaтивной памяти.

  • В любом каталоге создадим файл такого содержания, коментарии обязательно удалите:
  • [oracle@x1 ~]$ cat dbca.rsp
    [GENERAL]
    RESPONSEFILE_VERSION = "11.2.0.2"	# Используем последнюю версию (на сегодняшний день)
    OPERATION_TYPE = "createDatabase"	# Создаем новую базу
    [CREATEDATABASE]
    GDBNAME = "NEWDB"			# "Глобальное" имя новой кластерной базы
    SID = "NEWDB"				# На самом деле, это "SID prefix". Instances будут NEWDB1-NEWDB4
    NODELIST="x1,x2,x3,x4"			# "Регистрируем" базу на четырех нодах
    TEMPLATENAME = "General_Purpose.dbc"	# Я всегда использую именно это значение
    SYSPASSWORD = "oracle"
    SYSTEMPASSWORD = "oracle"
    EMCONFIGURATION = "LOCAL"		# Мне нужен "локальный" EM только для этой базы
    SYSMANPASSWORD = "oracle"
    DBSNMPPASSWORD = "oracle"
    STORAGETYPE=ASM				# Exadata не может использовать ничего, кроме ASM, забудем NFS.
    DISKGROUPNAME="DATA"			# Datafiles
    ASMSNMP_PASSWORD="oracle"
    RECOVERYGROUPNAME="RECO"		# Flashback Recovery Area
    CHARACTERSET = "US7ASCII"		# Набор символов
    NATIONALCHARACTERSET= "AL16UTF16"	# Излишняя "экзотика"
    INITPARAMS ="processes=1500,sessions=2000,compatible=11.2.0.2.0"	# Мои требования
    SAMPLESCHEMA=TRUE			# Я скучаю по "scott/tiger"
    MEMORYPERCENTAGE = "20"			# Используется автоматическое распределение памяти для SGA и PGA,
    # из "общего котла".
    DATABASETYPE = "MULTIPURPOSE"		# Я всегда использую именно это значение
    AUTOMATICMEMORYMANAGEMENT = "TRUE"	# "Общий котел" памяти ...
    TOTALMEMORY = "18000"			# ... и его обьем.
    [oracle@x1 ~]$
    

  • Подготовим нашу сессию, конечная цель - правильно установленные environment variables для нашей командной оболочки. У меня имеется работающая база "mdb", так что мне необходимо только лишь вызвать скрипт "oraenv" и потом очистить переменные с именем базы. Вам может понадобиться устанавливать переменные вручную, если это первая база, создаваемая в вашей системе.
  • [oracle@x1 ~]$ . oraenv
    ORACLE_SID = [mdb] ? mdb
    The Oracle base remains unchanged with value /u01/app/oracle
    [oracle@x1 ~]$ env | grep ORA
    ORACLE_UNQNAME=mdb
    ORACLE_SID=mdb1
    ORACLE_BASE=/u01/app/oracle
    ORAENV_ASK=YES
    ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
    [oracle@x1 ~]$ unset ORACLE_SID ORACLE_UNQNAME
    

    Нам не надо предпринимать каких-либо специальных шагов (типа настройки X11Forwarding) - "dbca" будет использоваться в "молчаливом" режиме, выводящем исключительно текст. Тем не менее, обязательно проверьте чтобы порты на вашей системе не были заблокированы "iptables" - я его просто отключаю, останавливая службу на уровне Linux.

  • Теперь вызовем "dbca" и позволим ему выполнить всю оставшуюсю работу.
  • [oracle@x1 ~]$ dbca -responseFile dbca.rsp -silent
    Copying database files
    1% complete
    3% complete
    30% complete
    Creating and starting Oracle instance
    32% complete
    36% complete
    40% complete
    44% complete
    45% complete
    48% complete
    50% complete
    Creating cluster database views
    52% complete
    70% complete
    Completing Database Creation
    73% complete
    76% complete
    85% complete
    94% complete
    100% complete
    Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/NEWDB/NEWDB.log"
    [oracle@x1 ~]$ cat /u01/app/oracle/cfgtoollogs/dbca/NEWDB/NEWDB.log
    Copying database files
    DBCA_PROGRESS : 1%
    DBCA_PROGRESS : 3%
    DBCA_PROGRESS : 30%
    Creating and starting Oracle instance
    DBCA_PROGRESS : 32%
    DBCA_PROGRESS : 36%
    DBCA_PROGRESS : 40%
    DBCA_PROGRESS : 44%
    DBCA_PROGRESS : 45%
    DBCA_PROGRESS : 48%
    DBCA_PROGRESS : 50%
    Creating cluster database views
    DBCA_PROGRESS : 52%
    DBCA_PROGRESS : 70%
    Completing Database Creation
    DBCA_PROGRESS : 73%
    DBCA_PROGRESS : 76%
    DBCA_PROGRESS : 85%
    DBCA_PROGRESS : 94%
    DBCA_PROGRESS : 100%
    Database creation complete. For details check the logfiles at:
    /u01/app/oracle/cfgtoollogs/dbca/NEWDB.
    Database Information:
    Global Database Name:NEWDB
    System Identifier(SID) Prefix:NEWDB
    The Database Control URL is https://x1:5502/em
    
    Management Repository has been placed in secure mode wherein
    Enterprise Manager data will be encrypted.  The encryption
    key has been placed in the file:
    /u01/app/oracle/product/11.2.0/dbhome_1/x1_NEWDB/sysman/config/emkey.ora.
    Ensure this file is backed up as the encrypted data will become unusable if this file is lost.
    

  • Предлагаю провести несколько маленьких проверок после создания базы:
  • 13:39:33 SQL> show user
    USER is "SYS"
    13:39:36 SQL> select count(*) from dba_objects where status <> 'VALID';
    
    COUNT(*)
    ----------
    0
    
    1 row selected.
    
    Elapsed: 00:00:00.03
    13:39:50 SQL> select comp_id, version, status
    13:40:00   2  from dba_registry;
    
    COMP_ID                        VERSION                        STATUS
    ------------------------------ ------------------------------ -----------
    OWB                            11.2.0.2.0                     VALID
    APEX                           3.2.1.00.12                    VALID
    EM                             11.2.0.2.0                     VALID
    AMD                            11.2.0.2.0                     VALID
    SDO                            11.2.0.2.0                     VALID
    ORDIM                          11.2.0.2.0                     VALID
    XDB                            11.2.0.2.0                     VALID
    CONTEXT                        11.2.0.2.0                     VALID
    EXF                            11.2.0.2.0                     VALID
    RUL                            11.2.0.2.0                     VALID
    OWM                            11.2.0.2.0                     VALID
    CATALOG                        11.2.0.2.0                     VALID
    CATPROC                        11.2.0.2.0                     VALID
    JAVAVM                         11.2.0.2.0                     VALID
    XML                            11.2.0.2.0                     VALID
    CATJAVA                        11.2.0.2.0                     VALID
    APS                            11.2.0.2.0                     VALID
    XOQ                            11.2.0.2.0                     VALID
    RAC                            11.2.0.2.0                     VALID
    
    19 rows selected.
    
    Elapsed: 00:00:00.00
    13:40:05 SQL> select inst_id, logins
    13:40:34   2  from gv$instance;
    
    INST_ID LOGINS
    ---------- ----------
    4 ALLOWED
    3 ALLOWED
    2 ALLOWED
    1 ALLOWED
    
    4 rows selected.
    
    Elapsed: 00:00:00.01
    13:40:38 SQL>
    

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

    Регистрация новой базы в Enterprise Manager Database Control

    Приятная неожиданность - никаких дополнительных шагов не требуется, "dbca" выполнил всю работу за нас. Все что надо сделать - заметить URL из предыдущего лога и использовать его, в нашем случае
    "https://x1:5502/em".

    Заметьте, что Enterprise Manager DB Console для новой базы сконфигурирован на порту 5502. Как вы помните, у меня уже существует "n" баз данных на этой системе, и каждая из них имеет свою "локальную" копию EM, слушающую на порту "5500+n", где n - порядковый номер базы. Естественно, с ростом количества баз будет увеличиваться число этих самых "консолей", работающих одновременно (и потребляющих ресурсы системы) - вот вам и причина подумать о централизованном Enterprise Manager Grid Control.

  • Убедимся, что наш EM работает правильно и получает диагностические данные от агентов:
  • [oracle@x1 ~]$ env | grep ORA
    ORACLE_UNQNAME=NEWDB
    ORACLE_SID=NEWDB
    ORACLE_BASE=/u01/app/oracle
    ORAENV_ASK=YES
    ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
    [oracle@x1 ~]$ emctl status dbconsole
    Oracle Enterprise Manager 11g Database Control Release 11.2.0.2.0
    Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
    https://x1:5502/em/console/aboutApplication
    
    Oracle Enterprise Manager 11g is running.
    ------------------------------------------------------------------
    Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/x1_NEWDB/sysman/log
    
    [oracle@x1 ~]$ emctl status agent
    Oracle Enterprise Manager 11g Database Control Release 11.2.0.2.0
    Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
    ---------------------------------------------------------------
    Agent Version     : 10.2.0.4.3
    OMS Version       : 10.2.0.4.3
    Protocol Version  : 10.2.0.4.3
    Agent Home        : /u01/app/oracle/product/11.2.0/dbhome_1/x1_NEWDB
    Agent binaries    : /u01/app/oracle/product/11.2.0/dbhome_1
    Agent Process ID  : 30881
    Parent Process ID : 30783
    Agent URL         : https://x1:1833/emd/main
    Repository URL    : https://x1:5502/em/upload/
    Started at        : 2011-02-20 13:23:51
    Started by user   : oracle
    Last Reload       : 2011-02-20 13:37:54
    Last successful upload                       : 2011-02-20 13:43:25
    Total Megabytes of XML files uploaded so far :    14.90
    Number of XML files pending upload           :        0
    Size of XML files pending upload(MB)         :     0.00
    Available disk space on upload filesystem    :    77.02%
    Data channel upload directory                : /u01/app/oracle/product/11.2.0/dbhome_1/x1_NEWDB/sysman/recv
    Last successful heartbeat to OMS             : 2011-02-20 13:43:53
    ---------------------------------------------------------------
    Agent is Running and Ready
    

    Enterprise Manager работает и принимает XML файлы от агента, о чем свидетельствует метрика "Total Megabytes of XML files uploaded so far". Все необходимые файлы были получены от агента - метрика "Number of XML files pending upload" равна нулю.

    Загрузка данных с помощью DataPump

    Теперь, когда новая база данных готова, нам надо загрузить в нее необходимые данные.

    Предположим, что у нас имеется какой-то файл параллельного datapump экспорта всей базы данных, выполненный на предыдущей версии Oracle и содержащий несколько "частей". Для загрузки я обычно использую такой параметр файл:

    [oracle@x1 ~]$ cat dpump_imp.par
    userid="/ as sysdba"
    DIRECTORY="MYDMP"
    DUMPFILE="olddb_full_%U.dmp"
    LOGFILE="NEWDB_full.log"
    TABLE_EXISTS_ACTION="REPLACE"
    FULL=Y
    PARALLEL=12
    EXCLUDE=SCHEMA:"in ('OUTLN','ANONYMOUS','APEX_030200','APEX_PUBLIC_USER','APPQOSSYS','DBFS',
    'DBSNMP','DIP','EXFSYS','FLOWS_FILES','MDSYS','MGMT_VIEW','ORACLE_OCM','ORDDATA',
    'ORDPLUGINS','ORDSYS','OUTLN','SI_INFORMTN_SCHEMA','WMSYS','XDB','XS$NULL','SYSTEM','SYSMAN',
    'SYS','DBSNMP','PERFSTAT')"
    EXCLUDE=STATISTICS
    [oracle@x1 ~]$ nohup impdp parfile=dpump_imp.par &
    [oracle@x1 ~]$ tail -200f dpump_imp.par
    
    Import: Release 11.2.0.2.0 - Production on Sun Feb 20 14:53:58 2011
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options
    Master table "SYS"."SYS_IMPORT_FULL_03" successfully loaded/unloaded
    Starting "SYS"."SYS_IMPORT_FULL_03":  /******** AS SYSDBA parfile=dpump_imp.par
    Processing object type DATABASE_EXPORT/TABLESPACE
    Processing object type DATABASE_EXPORT/PROFILE
    Processing object type DATABASE_EXPORT/SCHEMA/USER
    Processing object type DATABASE_EXPORT/ROLE
    Processing object type DATABASE_EXPORT/GRANT/SYSTEM_GRANT/PROC_SYSTEM_GRANT
    Processing object type DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT
    Processing object type DATABASE_EXPORT/SCHEMA/ROLE_GRANT
    Processing object type DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE
    Processing object type DATABASE_EXPORT/SCHEMA/TABLESPACE_QUOTA
    Processing object type DATABASE_EXPORT/RESOURCE_COST
    Processing object type DATABASE_EXPORT/SCHEMA/DB_LINK
    Processing object type DATABASE_EXPORT/DIRECTORY/DIRECTORY
    Processing object type DATABASE_EXPORT/CONTEXT
    Processing object type DATABASE_EXPORT/SCHEMA/PUBLIC_SYNONYM/SYNONYM
    Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/PRE_SYSTEM_ACTIONS/PROCACT_SYSTEM
    Processing object type DATABASE_EXPORT/SYSTEM_PROCOBJACT/POST_SYSTEM_ACTIONS/PROCACT_SYSTEM
    Processing object type DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
    . . imported "U1"."T1"                         7.514 GB 2941530 rows
    ...
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/INDEX
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/CONSTRAINT
    Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/PACKAGE_SPEC
    Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE/GRANT/OWNER_GRANT/OBJECT_GRANT
    Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/PROCEDURE
    Processing object type DATABASE_EXPORT/SCHEMA/PROCEDURE/ALTER_PROCEDURE
    Processing object type DATABASE_EXPORT/SCHEMA/VIEW/VIEW
    Processing object type DATABASE_EXPORT/SCHEMA/PACKAGE_BODIES/PACKAGE/PACKAGE_BODY
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
    Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TRIGGER
    Job "SYS"."SYS_IMPORT_FULL_03" completed with 2 error(s) at 17:25:40
    

    Как видно, я позволяю импорту замещать существующие таблицы, потому что я исключаю важные системные схемы из списка объектов для импорта. Также я предпочитаю пересобирать статистику после загрузки и просто игнорирую имеющиеся в дампе записи.

    Сбор статистики

    После загрузки данных многие объекты потребуют пере-компиляции, выполним это действие используя внутренние средства Oracle:

    [oracle@x1 ~]$ sqlplus
    SQL*Plus: Release 11.2.0.2.0 Production on Mon Feb 21 07:21:10 2011
    
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    07:21:10 SQL> conn / as sysdba
    Connected.
    07:21:10 SQL> exec utl_recomp.recomp_parallel;
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 00:00:17.72
    07:21:28 SQL> exit
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options
    [oracle@x1 ~]$
    

    Теперь самое время собрать статистику на вновь созданной базе, со "свежезагруженными" данными. Для этой цели я использую пакет DBMS_STATS, доверяя ему выбор необходимых параметров выборки. На мой взгляд, сбор статистики должен осуществляться в наиболее простом виде на уровне всей базы данных, индивидуальная "настройка" статистики нежелательна и используется только для улучшения производительности "проблемных" запросов.

    Поскольку в моем примере используется Exadata x2, системную (ОС) статистику собирать не требуется. Более того, я стараюсь не препятствовать оптимизатору запросов выбирать "параллельные планы" и позволяю системе собрать статистику "по умолчанию", способствующую выбору "hash join"-ов.

    [oracle@x1 ~]$ sqlplus "/ as sysdba"
    Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    Connected.
    
    18:36:27 SQL> begin
    18:36:27   2  dbms_stats.gather_database_stats();
    18:36:27   3  end;
    18:36:27   4  /
    
    PL/SQL procedure successfully completed.
    
    Elapsed: 04:04:43.02
    22:41:10 SQL> exit
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
    Data Mining and Real Application Testing options
    

    Как видим, сбор аккуратной статистики на большом обьеме данных может занять часы. Собирая статистику на индексах отдельно, можно значительно ускорить процесс. Кроме того, использование SQL-скрипта, запущенного через "nohup" выглядит разумно. Скрипт очень прост:

    [oracle@x1 ~]$ cat get_stats.sql
    conn / as sysdba
    begin
    dbms_stats.gather_database_stats();
    end;
    /
    exit
    [oracle@x1 ~]$ sqlplus /nolog @get_stats.sql
    

    После сбора статистики, создание резервной копии новой базы данных просто необходимо.

    Резервное копирование готовой базы

    Я настоятельно рекомендую использовать Recovery Manager для резервного копирования баз данных. В случае с Exadata, "rman" является единственной опцией.

  • В нашем примере, используем скрипт:
  • [oracle@x1 ~]$ cat bckp.sh
    #!/bin/bash
    set -x
    
    date
    source /home/oracle/.bash_profile
    
    date
    emctl stop dbconsole
    
    date
    srvctl stop database -d $ORACLE_UNQNAME -o transactional
    
    date
    /u01/app/oracle/product/11.2.0/dbhome_1/bin/rman << EOF
    connect target
    startup mount
    
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    CONFIGURE DEVICE TYPE DISK PARALLELISM 12 BACKUP TYPE TO BACKUPSET;
    
    backup database;
    shutdown
    EOF
    
    date
    srvctl start database -d $ORACLE_UNQNAME
    
    date
    emctl start dbconsole
    [oracle@x1 ~]$
    

    Результат выполнения этого скрипта выглядит приблизительно так:

    Mon Feb 21 08:16:27 EST 2011
    
    The Oracle base remains unchanged with value /u01/app/oracle
    
    Mon Feb 21 08:16:28 EST 2011
    
    Oracle Enterprise Manager 11g Database Control Release 11.2.0.2.0
    Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
    https://x1:5502/em/console/aboutApplication
    Stopping Oracle Enterprise Manager 11g Database Control ...
    ...  Stopped.
    
    Mon Feb 21 08:17:55 EST 2011
    
    Recovery Manager: Release 11.2.0.2.0 - Production on Mon Feb 21 08:17:55 2011
    
    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
    
    RMAN>
    connected to target database (not started)
    
    RMAN>
    Oracle instance started
    database mounted
    
    Total System Global Area   18840203264 bytes
    
    Fixed Size                     2234376 bytes
    Variable Size              14965278712 bytes
    Database Buffers            3825205248 bytes
    Redo Buffers                  47484928 bytes
    
    RMAN>
    RMAN>
    using target database control file instead of recovery catalog
    new RMAN configuration parameters:
    CONFIGURE CONTROLFILE AUTOBACKUP ON;
    new RMAN configuration parameters are successfully stored
    
    RMAN>
    new RMAN configuration parameters:
    CONFIGURE DEVICE TYPE DISK PARALLELISM 12 BACKUP TYPE TO BACKUPSET;
    new RMAN configuration parameters are successfully stored
    
    RMAN>
    RMAN>
    Starting backup at 21-FEB-11
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=1522 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_2
    channel ORA_DISK_2: SID=1617 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_3
    channel ORA_DISK_3: SID=1712 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_4
    channel ORA_DISK_4: SID=1807 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_5
    channel ORA_DISK_5: SID=1902 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_6
    channel ORA_DISK_6: SID=1997 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_7
    channel ORA_DISK_7: SID=2092 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_8
    channel ORA_DISK_8: SID=2187 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_9
    channel ORA_DISK_9: SID=2 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_10
    channel ORA_DISK_10: SID=97 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_11
    channel ORA_DISK_11: SID=193 instance=NEWDB4 device type=DISK
    allocated channel: ORA_DISK_12
    channel ORA_DISK_12: SID=288 instance=NEWDB4 device type=DISK
    channel ORA_DISK_1: starting full datafile backup set
    channel ORA_DISK_1: specifying datafile(s) in backup set
    input datafile file number=00036 name=+DATA/NEWDB/datafile/ts1.545.743609327
    channel ORA_DISK_1: starting piece 1 at 21-FEB-11
    channel ORA_DISK_2: starting full datafile backup set
    channel ORA_DISK_2: specifying datafile(s) in backup set
    input datafile file number=00037 name=+DATA/NEWDB/datafile/ts1i.490.743609327
    input datafile file number=00004 name=+DATA/NEWDB/datafile/users.449.743605729
    input datafile file number=00006 name=+DATA/NEWDB/datafile/undotbs2.499.743605931
    input datafile file number=00007 name=+DATA/NEWDB/datafile/undotbs3.444.743605931
    input datafile file number=00008 name=+DATA/NEWDB/datafile/undotbs4.608.743605931
    channel ORA_DISK_2: starting piece 1 at 21-FEB-11
    channel ORA_DISK_3: starting full datafile backup set
    channel ORA_DISK_3: specifying datafile(s) in backup set
    input datafile file number=00014 name=+DATA/NEWDB/datafile/ts2.441.743609321
    input datafile file number=00026 name=+DATA/NEWDB/datafile/ts3.438.743609323
    input datafile file number=00032 name=+DATA/NEWDB/datafile/ts4.546.743609325
    input datafile file number=00033 name=+DATA/NEWDB/datafile/ts5.491.743609325
    input datafile file number=00056 name=+DATA/NEWDB/datafile/ts6.540.743609333
    channel ORA_DISK_3: starting piece 1 at 21-FEB-11
    channel ORA_DISK_4: starting full datafile backup set
    channel ORA_DISK_4: specifying datafile(s) in backup set
    input datafile file number=00029 name=+DATA/NEWDB/datafile/perfstat.492.743609325
    input datafile file number=00017 name=+DATA/NEWDB/datafile/ts7.495.743609321
    input datafile file number=00018 name=+DATA/NEWDB/datafile/ts8.440.743609321
    input datafile file number=00022 name=+DATA/NEWDB/datafile/ts9.439.743609323
    input datafile file number=00023 name=+DATA/NEWDB/datafile/ts10.603.743609323
    channel ORA_DISK_4: starting piece 1 at 21-FEB-11
    channel ORA_DISK_5: starting full datafile backup set
    channel ORA_DISK_5: specifying datafile(s) in backup set
    input datafile file number=00035 name=+DATA/NEWDB/datafile/ts11.600.743609327
    input datafile file number=00009 name=+DATA/NEWDB/datafile/tools.498.743609319
    input datafile file number=00010 name=+DATA/NEWDB/datafile/ts12.553.743609319
    input datafile file number=00011 name=+DATA/NEWDB/datafile/ts13.606.743609319
    input datafile file number=00016 name=+DATA/NEWDB/datafile/ts14.550.743609321
    channel ORA_DISK_5: starting piece 1 at 21-FEB-11
    channel ORA_DISK_6: starting full datafile backup set
    channel ORA_DISK_6: specifying datafile(s) in backup set
    input datafile file number=00055 name=+DATA/NEWDB/datafile/ts15.595.743609331
    input datafile file number=00031 name=+DATA/NEWDB/datafile/ts16.601.743609325
    input datafile file number=00053 name=+DATA/NEWDB/datafile/ts17.486.743609331
    input datafile file number=00054 name=+DATA/NEWDB/datafile/ts18.431.743609331
    input datafile file number=00040 name=+DATA/NEWDB/datafile/ts19.544.743609327
    channel ORA_DISK_6: starting piece 1 at 21-FEB-11
    channel ORA_DISK_7: starting full datafile backup set
    channel ORA_DISK_7: specifying datafile(s) in backup set
    input datafile file number=00027 name=+DATA/NEWDB/datafile/ts20.602.743609325
    input datafile file number=00038 name=+DATA/NEWDB/datafile/ts21.435.743609327
    input datafile file number=00042 name=+DATA/NEWDB/datafile/ts22.434.743609329
    input datafile file number=00050 name=+DATA/NEWDB/datafile/ts23.432.743609331
    input datafile file number=00030 name=+DATA/NEWDB/datafile/ts24.437.743609325
    channel ORA_DISK_7: starting piece 1 at 21-FEB-11
    channel ORA_DISK_8: starting full datafile backup set
    channel ORA_DISK_8: specifying datafile(s) in backup set
    input datafile file number=00013 name=+DATA/NEWDB/datafile/ts25.496.743609321
    input datafile file number=00041 name=+DATA/NEWDB/datafile/ts26.489.743609329
    input datafile file number=00003 name=+DATA/NEWDB/datafile/ts27.504.743605729
    input datafile file number=00048 name=+DATA/NEWDB/datafile/ts28.542.743609331
    input datafile file number=00052 name=+DATA/NEWDB/datafile/ts29.541.743609331
    channel ORA_DISK_8: starting piece 1 at 21-FEB-11
    channel ORA_DISK_9: starting full datafile backup set
    channel ORA_DISK_9: specifying datafile(s) in backup set
    input datafile file number=00028 name=+DATA/NEWDB/datafile/ts30.547.743609325
    input datafile file number=00051 name=+DATA/NEWDB/datafile/ts31.596.743609331
    input datafile file number=00015 name=+DATA/NEWDB/datafile/ts32.605.743609321
    input datafile file number=00002 name=+DATA/NEWDB/datafile/ts33.559.743605729
    input datafile file number=00046 name=+DATA/NEWDB/datafile/ts34.433.743609329
    channel ORA_DISK_9: starting piece 1 at 21-FEB-11
    channel ORA_DISK_10: starting full datafile backup set
    channel ORA_DISK_10: specifying datafile(s) in backup set
    input datafile file number=00047 name=+DATA/NEWDB/datafile/ts35.597.743609329
    input datafile file number=00012 name=+DATA/NEWDB/datafile/ts36.551.743609321
    input datafile file number=00034 name=+DATA/NEWDB/datafile/ts37.436.743609327
    input datafile file number=00024 name=+DATA/NEWDB/datafile/ts38.548.743609323
    input datafile file number=00005 name=+DATA/NEWDB/datafile/example.554.743605851
    channel ORA_DISK_10: starting piece 1 at 21-FEB-11
    channel ORA_DISK_11: starting full datafile backup set
    channel ORA_DISK_11: specifying datafile(s) in backup set
    input datafile file number=00045 name=+DATA/NEWDB/datafile/ts39.488.743609329
    input datafile file number=00049 name=+DATA/NEWDB/datafile/ts40.487.743609331
    input datafile file number=00001 name=+DATA/NEWDB/datafile/system.450.743605727
    input datafile file number=00020 name=+DATA/NEWDB/datafile/ts41.549.743609323
    input datafile file number=00044 name=+DATA/NEWDB/datafile/ts42.543.743609329
    channel ORA_DISK_11: starting piece 1 at 21-FEB-11
    channel ORA_DISK_12: starting full datafile backup set
    channel ORA_DISK_12: specifying datafile(s) in backup set
    input datafile file number=00021 name=+DATA/NEWDB/datafile/ts43.494.743609323
    input datafile file number=00043 name=+DATA/NEWDB/datafile/ts44.598.743609329
    input datafile file number=00039 name=+DATA/NEWDB/datafile/ts45.599.743609327
    input datafile file number=00019 name=+DATA/NEWDB/datafile/ts46.604.743609321
    input datafile file number=00025 name=+DATA/NEWDB/datafile/ts47.493.743609323
    channel ORA_DISK_12: starting piece 1 at 21-FEB-11
    channel ORA_DISK_6: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2174.743674699 tag=TAG20110221T081815
    channel ORA_DISK_6: backup set complete, elapsed time: 00:01:24
    channel ORA_DISK_7: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2139.743674701 tag=TAG20110221T081815
    channel ORA_DISK_7: backup set complete, elapsed time: 00:01:24
    channel ORA_DISK_8: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2110.743674707 tag=TAG20110221T081815
    channel ORA_DISK_8: backup set complete, elapsed time: 00:01:28
    channel ORA_DISK_9: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2061.743674715 tag=TAG20110221T081815
    channel ORA_DISK_9: backup set complete, elapsed time: 00:01:20
    channel ORA_DISK_10: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2012.743674717 tag=TAG20110221T081815
    channel ORA_DISK_10: backup set complete, elapsed time: 00:01:17
    channel ORA_DISK_5: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2178.743674697 tag=TAG20110221T081815
    channel ORA_DISK_5: backup set complete, elapsed time: 00:01:46
    channel ORA_DISK_11: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.1691.743674727 tag=TAG20110221T081815
    channel ORA_DISK_11: backup set complete, elapsed time: 00:01:17
    channel ORA_DISK_12: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2643.743674739 tag=TAG20110221T081815
    channel ORA_DISK_12: backup set complete, elapsed time: 00:01:06
    channel ORA_DISK_4: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2225.743674697 tag=TAG20110221T081815
    channel ORA_DISK_4: backup set complete, elapsed time: 00:02:07
    channel ORA_DISK_3: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2243.743674697 tag=TAG20110221T081815
    channel ORA_DISK_3: backup set complete, elapsed time: 00:02:18
    channel ORA_DISK_2: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2642.743674697 tag=TAG20110221T081815
    channel ORA_DISK_2: backup set complete, elapsed time: 00:24:48
    channel ORA_DISK_1: finished piece 1 at 21-FEB-11
    piece handle=+RECO/NEWDB/backupset/2011_02_21/nnndf0_tag20110221t081815_0.2318.743674697 tag=TAG20110221T081815
    channel ORA_DISK_1: backup set complete, elapsed time: 00:26:38
    Finished backup at 21-FEB-11
    
    Starting Control File and SPFILE Autobackup at 21-FEB-11
    piece handle=+RECO/NEWDB/autobackup/2011_02_21/s_743674663.2644.743676295
    Finished Control File and SPFILE Autobackup at 21-FEB-11
    
    RMAN>
    database dismounted
    Oracle instance shut down
    
    RMAN>
    
    Recovery Manager complete.
    
    
    Mon Feb 21 08:45:32 EST 2011
    Oracle Enterprise Manager 11g Database Control Release 11.2.0.2.0
    Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
    https://x1:5502/em/console/aboutApplication
    Starting Oracle Enterprise Manager 11g Database Control ..... started.
    ------------------------------------------------------------------
    Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/x1_NEWDB/sysman/log
    

    Скрипт можно изменить так, чтобы "rman channels" равномерно распределялись между всеми узлами кластера, но в моем случае я предпочитаю выполнять все действия на одном ноде и использовать ресурсы других узлов для работы.

    Заметьте, что первый выполненный "бэкап" сделан в "холодном" режиме. При этом очень важно чтобы подключенные сессии завершились нормально, отсюда и появилось "-o transactional" в скрипте.

    Теперь новую базу данных можно переводить в archivelog mode и начинать использовать по-настоящему. Последующие резервные копии вероятнее всего надо делать в "горячем" режиме.

    Спасибо что зашли,

    Будьте благословенны!
    Денис