oracle DG搭建
安裝環境
在主機1上安裝數據庫軟件,並建監聽和實例,在主機2上安裝數據庫軟件,並建監聽,但不建實例,dg搭建之後數據會同步過去。
數據庫參數優化(也可在spfile文件統一修改)
注:scope=spfile表示更改spfile文件的值,重啓數據庫後才能生效
sga,pga配置
sga:(內存大小*80%)*80% = 128G * 80% * 80% = 82G;
pga:(內存大小*80%)*20% = 128G * 80% * 80% = 20G;
alter system set sga_max_size=82000m scope=spfile;
alter system set sga_target=82000m scope=spfile;
alter system set pga_aggregate_target=20000m scope=spfile;
JOB_QUEUE_PROCESSES參數
JOB_QUEUE_PROCESSES參數是job的進程個數,默認是0;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=20;
共享池大小
Shared pool是SGA中最關鍵的內存片段,共享池主要由庫緩存(共享SQL區和PL/SQL區)和數據字典緩存組成。其中庫緩存的作用是存放頻繁使用的sql,pl/sql代碼以及執行計劃。數據字段緩存用於緩存數據字典。在內存空間有限的容量下,數據庫系統根據一定的算法決定何時釋放共享池中的sql,pl/sql代碼以及數據字典信息。所以shared_pool_size不能太小,否則執行效率會很低。
alter system set shared_pool_size=15000m scope = spfile;
數據庫最大連接數
數據庫的最大可支持的連接數,根據公司邏輯庫的實際情況1500足夠了
alter system set processes=1500 scope = spfile;
數據文件個數
db_files參數限制了數據庫數據文件總的個數,datafiles數目達到db_files指定後數據庫不能添加新的數據文件
alter system set db_files=1000 scope=spfile;
遊標參數
OPEN_CURSORS 指定一個會話一次最多可以擁有的遊標數,不夠無法使用遊標,過大不會增加系統開銷
alter system set open_cursors=2000 scope=both;
alter system set session_cached_cursors=500 scope=spfile;
默認密碼期限
Oracle數據庫密碼期限是180,把它改成無限制
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
數據庫連接超時時間
默認是60秒,60秒沒連接,會報錯,把它設置成0
LSNRCTL> set inbound_connect_timeout 0
LSNRCTL> set save_config_on_stop on 生效
關閉審計
oracle 11g推出了審計功能,這個功能會針對很多操作都產生審計文件.aud,日積月累下來這些文件也很多,考慮到實際情況,將審計功能關閉
alter system set audit_trail=none scope = spfile;
重啓數據庫
上述修改都需重啓數據庫生效
SQL>shutdown immediate
SQL>startup;
主數據庫配置(192.168.8.173)
開啓歸檔與強制LOGGING
Oracle dg模式需要保證主從庫一致,需要傳輸archive log和redo log到從庫,如果不是歸檔模式無法保證主從庫的數據一致。
SQL> select log_mode,force_logging from v$database;
LOG_MODE FOR
------------ ---
ARCHIVELOG NO
SQL> ALTER DATABASE FORCE LOGGING;
創建redo和standy redo日誌
根據公司平臺情況創建6個redo日誌組,每個大小1G,創建standby日誌組的個數是原日誌組個數+1再與thread的積,size不能小於原日誌文件的大小,所以這裏創建7個standby redo。
redo log創建和刪除
1:select * from v$log; 查看redo日誌狀態
2:alter system switch logfile; 將當前redo日誌切到下一個執行
3:alter database add logfile group 6 ('/oracle/oradata/dbxxx/redo06.log') size 1024m reuse;
添加新的redo日誌
4: alter database drop logfile group 1; 刪除redo日誌組(慎用)
standby redo log 的創建只是在logfile前加一個standby
1.alter database add standby logfile group 7('/oracle/oradata/dbxxx/standyredo01.log') size 1024m reuse;
創建主庫密碼文件
Data Guard 配置中所有數據庫必須都擁有獨立的密碼文件,並且必須保證同一個 Data Guard 配置中所有數據庫服務器的 SYS 用戶擁有相同密碼以保證redo 數據的順利傳輸,因爲 redo 傳輸服務通過認證的網絡會話來傳輸redo 數據,而會話使用包含在密碼文件中的SYS 用戶密碼來認證。
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=xxxx entries=1 force=y
SPFILE文件配置(128G內存數據庫)
注:數據庫啓動時加載spfile文件,需對參數進行調整,以及主備配置
SQL> create pfile='/oracle/product/11.2/dbs/initdbxxx.ora' from spfile;
vi /oracle/product/11.2/dbs/initdbxxx.ora
dbxxx.__db_cache_size=66035122176
dbxxx.__java_pool_size=536870912
dbxxx.__large_pool_size=536870912
dbxxx.__oracle_base='/oracle'#ORACLE_BASE set from environment
dbxxx.__pga_aggregate_target=21474836480
dbxxx.__sga_target=83751862272
dbxxx.__shared_io_pool_size=0
dbxxx.__shared_pool_size=15569256448
dbxxx.__streams_pool_size=536870912
*.audit_file_dest='/oracle/admin/dbxxx/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/oracle/oradata/dbxxx/control01.ctl','/oracle/flash_recovery_area/dbxxx/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_files=1000
*.db_name='dbxxx'
*.db_recovery_file_dest='/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=20971520000
*.DB_UNIQUE_NAME='dbxxxpr' *.diagnostic_dest='/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbxxxXDB)'
*.FAL_CLIENT='dbxxxpr'
*.FAL_SERVER='dbxxxdg'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbxxxpr,dbxxxdg)'
*.log_archive_dest_1='location=/oracle/oradata/dbxxx/archivelog'
*.log_archive_dest_2='SERVICE=dbxxxdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbxxxdg'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_FORMAT='log%t_%s_%r.arc'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=1000
*.pga_aggregate_target=20971520000
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.session_cached_cursors=500
*.sessions=1655
*.sga_target=83751862272
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.undo_tablespace='UNDOTBS1'
SPFILE文件替換
spfiledbxxx.ora複製initdbxxx.ora
rm $ORACLE_HOME/dbs/spfiledbxxx.ora
SQL> create spfile from pfile='/oracle/product/11.2.0/dbs/initdbxxx.ora';
tns文件配置
vi $ORACLE_HOME/network/admin/tnsnames.ora ,配置如下:
dbxxxpr =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server173)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbxxx)
)
)
dbxxxdg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.174)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbxxx)
)
)
listener文件配置
vi $ORACLE_HOME/network/admin/tnsnames.ora ,配置如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = server173)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /oracle
SAVE_CONFIG_ON_STOP_LISTENER = ON
INBOUND_CONNECT_TIMEOUT_LISTENER = 0
備數據庫配置(192.168.8.174)
文件複製
將主數據庫/oracle/product/10.2/network/admin下的網絡配置文件(tnsnames.ora,listener.ora),和/oracle/product/10.2/dbs下的密碼文件orapwdbxxx和initdbxxx.ora拷貝scp到備數據庫相同目錄下,scp不行的話用sz下載,rz上傳。
initdbxxx.ora參數配置
注:主備切換對應的名稱正好相反,其他配置一樣
修改initdbxxx.ora文件:
dbxxx.__db_cache_size=66035122176
dbxxx.__java_pool_size=536870912
dbxxx.__large_pool_size=536870912
dbxxx.__oracle_base='/oracle'#ORACLE_BASE set from environment
dbxxx.__pga_aggregate_target=21474836480
dbxxx.__sga_target=83751862272
dbxxx.__shared_io_pool_size=0
dbxxx.__shared_pool_size=15569256448
dbxxx.__streams_pool_size=536870912
*.audit_file_dest='/oracle/admin/dbxxx/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/oracle/oradata/dbxxx/control01.ctl','/oracle/flash_recovery_area/dbxxx/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_files=1000
*.db_name='dbxxx'
*.db_recovery_file_dest='/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=20971520000
*.DB_UNIQUE_NAME='dbxxxdg'
*.diagnostic_dest='/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbxxxXDB)'
*.FAL_CLIENT='dbxxxdg'
*.FAL_SERVER='dbxxxpr'
*.local_listener='for_db'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(dbxxxpr,dbxxxdg)'
*.log_archive_dest_1='location=/oracle/oradata/dbxxx/archivelog'
*.log_archive_dest_2='SERVICE=dbxxxpr LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dbxxxpr'
*.LOG_ARCHIVE_DEST_STATE_2='ENABLE'
*.LOG_ARCHIVE_FORMAT='log%t_%s_%r.arc'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=1000
*.pga_aggregate_target=20971520000
*.processes=1500
*.remote_login_passwordfile='EXCLUSIVE'
*.session_cached_cursors=500
*.sessions=1655
*.sga_target=83751862272
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.undo_tablespace='UNDOTBS1'
創建相關目錄
mkdir -p /oracle/fast_recovery_area/dbxxx
mkdir -p /oracle/admin/dbxxx
cd /oracle/admin/dbxxx
mkdir -p adump dpdump pfile
mkdir -p /oracle/oradata/dbxxx/
mkdir -p /oracle/oradata/dbxxx/archivelog
tns文件配置
修改/oracle/product/10.2/network/admin目錄下的tnsnames.ora文件,配置如下:
dbxxxdg =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server174)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbxxx)
)
)
dbxxxpr =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.173)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbxxx)
)
)
listener文件配置
vi $ORACLE_HOME/network/admin/tnsnames.ora ,配置如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dbxxx)
(ORACLE_HOME = /oracle/product/10.2)
(SID_NAME = dbxxx)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = server174)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /oracle
啓動備庫到nomount
SQL> conn /as sysdba
SQL> create spfile from pfile='/oracle/product/11.2.0/dbs/initgdqxt.ora';
SQL> startup nomount
備數據庫還原
[oracle@server174 ~]$ rman target sys/****@dbxxxpr auxiliary sys/****@dbxxxdg
RMAN> duplicate target database for standby nofilenamecheck from active database;
切換到同步模式
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;