oracle之安装data gaurd集群
####################
oracle中日志文件分为:
- 在线日志文件(即联机重做日志),用于记录对数据库所做的修改,包括对表进行的DML操作以及DDL操作、对系统所做的改变等;
- 归档日志两类。归档日志是对在线日志文件的历史备份。
查看归档模式:
select log_mode from v$database; # 或者 archive log list
开启归档日志:
shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list # 更改归档目录路径log_archive_dest_n alter system set log_archive_dest_1='location=D:\software\arch1\'; #手动切换日志 alter system switch logfile;
关闭归档日志:
shutdown immediate; startup mount; alter database noarchivelog; alter database open;
在线日志按照组来工作,每一个组有多个文件。日志组按照循环方式进行工作,在oracle中至少有2个日志组。
当一个联机重做日志组1被写满时,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又发生日志切换,去写联机重做日志组1,循环往复。
由于联机重做日志文件的重要性,因此以组的方式管理日志文件,数据库中至少有2个日志文件组,每个日志组中所有日志成员的内容完全相同
如果一个日志文件损坏,只要组内的其他日志文件仍然可用,该组依然对外提供日志操作,不会宕机。
- 若数据库处于非归档模式,联机重做日志在切换时就会丢弃。
- 只有数据库运行在归档模式并且初始化参数ARCHIVE_LOG_START等于TRUE时,ARCn进程才能被启动,进行自动归档。,当发生日志切换的时候, arch进程会把被切换的日志进行归档。该模式下才可以进行灾难性恢复,在生产环境中必须启用归档模式。
- 如果数据库运行在归档模式但ARCHIVE_LOG_START等于FALSE时,需要DBA手工归档。
- 不管数据库是否是归档模式,重做日志是肯定要写的。而只有数据库在归档模式下,重做日志才会备份,形成归档日志。
-
重做日志是循环使用的。比如说,有三个重做日志组A、B、C。那么,当A写满后,系统就调用ARCn进程,将A备份为归档日志,同时B已经开始使用了。
假设你只有两个组A、B,如果某种情况下,A正在备份,未结束,还不能继续使用,而B也写满了,这个时候,数据库就会出现挂起的情况。所以一般情况下,重做日志最好是三个组或者再多一点,而且大小要适当。
联机日志文件组:REDO01.LOG,REDO02.LOG,REDO03.LOG
一个联机日志文件组内可有多个文件
查看联机日志文件的状态:
select *from v$log ;
- current:表示当前使用的联机日志文件组;
- active:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块还没有被完全写入数据文件中,实例恢复时需要这组日志;(database buffer cache做了修改但还没有写到datafile的数据,只要没有写入数据文件,不管是否提交,都可以称为脏数据)
- inactive:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块已经被写入到数据文件中,实例恢复时不需要这组日志;
- unused:表示还没有被使用过
查看联机日志文件组:
select *from v$logfile;
创建日志文件组:
alter database add logfile group 4 'D:\software\oracle\oradata\orcl\redo04.log' size 10m;
给某个联机日志文件组添加文件:
alter database add logfile member 'D:\software\oracle\oradata\orcl\redo02a.log' to group 2;
清楚某个日志文件组:
alter database clear logfile group 1;
select * from dba_users; 查看数据库所有用户 select * from v$logfile ; 查看联机日志情况; select * from v$instance ; 查看所有实例信息; select * from v$dba_data_files ;数据文件表,可查看表空间信息
主库操作:
1.开启归档模式
1)查看是否开启了归档模式,以下两种方式均可查看
archive log list select log_mode from v$database;
2)开启归档模式
shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list
2.开启日志
# 查看主库是否开启日志 select force_logging from v$database; # 若没有开启,则强制记录日志 alter database force logging;
3.配置主库参数
show parameter log_archive_config;
alter system set log_archive_config='dg_config=(testdb,testdb_dg)'; alter system set log_archive_dest_1='LOCATION=/u01/app/oradata/testdb/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testdb'; alter system set log_archive_dest_2='service=testdb_dg lgwr async valid_for=(all_logfiles,primary_role) db_unique_name=testdb_dg'; alter system set LOG_ARCHIVE_DEST_STATE_1=enable scope=both; alter system set LOG_ARCHIVE_DEST_STATE_2=enable scope=both; alter system set LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
standby logfile日志与联机日志文件大小一致:
alter database add standby logfile group 4 '/u01/app/oradata/testdb/redo04.log' size 50m; alter database add standby logfile group 5 '/u01/app/oradata/testdb/redo05.log' size 50m; alter database add standby logfile group 6 '/u01/app/oradata/testdb/redo06.log' size 50m; alter database add standby logfile group 7 '/u01/app/oradata/testdb/redo07.log' size 50m;
alter system set standby_file_management=auto;
DB_FILE_NAME_CONVERT、LOG_FILE_NAME_CONVERT,例如: log_file_name_convert='主库路径','备库路径','主库路径','备库路径',... db_file_name_convert='主库路径','备库路径','主库路径','备库路径',...
Alter system set fal_server='testdb_dg';
testdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.107)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb) ) ) testdb_dg = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.108)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb_dg) ) )
orapwd file=/u01/app/product/11.2.0/dbhome_1/dbs/orapwtestdb password=oracle ignorecase=y
登录主库创建一个pfile,并作修改 create pfile='temp.ora' from spfile; 修改如下: testdb.__db_cache_size=352321536 testdb.__java_pool_size=4194304 testdb.__large_pool_size=4194304 testdb.__oracle_base='/u01/app' testdb.__pga_aggregate_target=209715200 testdb.__sga_target=524288000 testdb.__shared_io_pool_size=0 testdb.__shared_pool_size=150994944 testdb.__streams_pool_size=0 *.audit_file_dest='/u01/app/admin/testdb/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oradata/testdb/control01.ctl','/u01/app/oradata/testdb/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='testdb' *.diagnostic_dest='/u01/app' *.dispatchers='(PROTOCOL=TCP) (SERVICE=testdbXDB)' *.open_cursors=300 *.pga_aggregate_target=209715200 *.processes=150 *.sga_target=524288000 *.remote_login_passwordfile='EXCLUSIVE' *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1' *.fal_server='testdb' *.log_archive_config='dg_config=(testdb,testdb_dg)' *.log_archive_dest_1='LOCATION=/u01/app/oradata/testdb/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=testdb_dg' *.log_archive_dest_2='service=testdb lgwr async valid_for=(all_logfiles,primary_role) db_unique_name=testdb' *.log_archive_dest_state_1='ENABLE' *.log_archive_format='%t_%s_%r.arc' *.DB_UNIQUE_NAME=testdb_dg
#有必要的话还需要添加log_file_name_convert,db_file_name_convert参数设置
#将其拷至备库,创建pfiletestdb.ora,同时以oracle用户创建目录:/u01/app/admin/testdb/adump,/u01/app/oradata/testdb,最后将数据库启至nomount状态:
export ORACLE_SID=testdb
create spfile from pfile='/u01/app/product/11.2.0/dbhome_1/dbs/pfiletestdb.ora';
创建密码文件
orapwd file=/u01/app/product/11.2.0/dbhome_1/dbs/orapwtestdb password=oracle ignorecase=y
在$ORACLE_HOME/network/admin目录下创建listener.ora,内容如下:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME =/u01/app/product/11.2.0/dbhome_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = testdb_dg) (ORACLE_HOME = /u01/app/product/11.2.0/dbhome_1) (SID_NAME = testdb) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.108)(PORT = 1521)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) ) )
在tnsnames.ora中添加如下配置 testdb = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.107)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb) ) ) testdb_dg = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.110.108)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testdb_dg) ) )
从库操作:
###################
igoodful@qq.com