DATA GRARD安装配置、维护、切换
来源:互联网 发布:平板windows系统 编辑:程序博客网 时间:2024/05/16 03:58
I 配置DATA GRARD
I.1 database环境检测
主机名
public IP
VIP
PRIVATE IP
SCAN IP
instance
scan instance
RAC01
192.168.10.10
192.168.10.101
192.168.20.10
192.168.10.100
MAPP1
mapp
RAC02
192.168.10.20
192.168.10.102
192.168.20.20
MAPP2
RACJL01
192.168.10.15
192.168.10.203
192.168.10.15
192.168.10.119
MAPP1
mappjl
RACJL02
192.168.10.25
192.168.10.202
192.168.10.25
MAPP2
存储01
192.168.10.201,为mapp提供存储
存储02
192.168.10.199,为mappjl提供存储
1. 在sysctl.conf中修改如下参数
# Added for ORACLE Real Application Cluster
net.ipv4.conf.eth5.rp_filter = 2
net.ipv4.conf.eth4.rp_filter = 2
# oracle-rdbms-server-11gR2-preinstall setting for fs.file-max is 6815744
fs.file-max = 6815744
# oracle-rdbms-server-11gR2-preinstall setting for kernel.sem is'250 32000 100 128'
kernel.sem = 250 32000 100 128
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmni is4096
kernel.shmmni = 4096
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmall is1073741824 on x86_64
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmall is2097152 on i386
kernel.shmall = 1073741824
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmax is4398046511104 on x86_64
# oracle-rdbms-server-11gR2-preinstall setting for kernel.shmmax is4294967295 on i386
kernel.shmmax = 4398046511104
# oracle-rdbms-server-11gR2-preinstall setting fornet.core.rmem_default is 262144
net.core.rmem_default = 262144
# oracle-rdbms-server-11gR2-preinstall setting for net.core.rmem_maxis 4194304
net.core.rmem_max = 4194304
# oracle-rdbms-server-11gR2-preinstall setting fornet.core.wmem_default is 262144
net.core.wmem_default = 262144
# oracle-rdbms-server-11gR2-preinstall setting for net.core.wmem_maxis 1048576
net.core.wmem_max = 1048576
# oracle-rdbms-server-11gR2-preinstall setting for fs.aio-max-nr is1048576
fs.aio-max-nr = 1048576
# oracle-rdbms-server-11gR2-preinstall setting fornet.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500
#hugepages
vm.nr_hugepages = 29669
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
2. 完成以下参数修改,也可在安装过程中通过fixup脚本完成
Parameter
Modfied Value
Comment
semmsl
250
/proc/sys/kernel/sem
semmns
32000
semopm
100
semmni
128
shmmax
68719476736
/proc/sys/kernel/shmmax
shmmni
4096
/proc/sys/kernel/shmmni
shmall
4294967296
/proc/sys/kernel/shmall
file-max
6815744
/proc/sys/fs/file-max
ip_local_port_range
9000
/proc/sys/net/ipv4/ip_local_port_range
65500
rmem_default
262144
/proc/sys/net/core/rmem_default
rmem_max
4194304
/proc/sys/net/core/rmem_max
wmem_default
262144
/proc/sys/net/core/wmem_default
wmem_max
2097152
/proc/sys/net/core/wmem_max
aio-max-nr
1048576
/proc/sys/fs/aio-max-nr
1.2检验组和用户设置
Name
Type
GID/UID
Group Member
oinstall
group
501
dba
group
502
oper
group
503
asmadmin
group
504
asmdba
group
506
asmoper
group
507
grid
User
501
oinstall,asmadmin,asmdba,asmoper,dba
oracle
User
502
oinstall,dba,asmdba
按上表规划在两个节点上都创建组和用户
1. 校验组
#cat /etc/group
oinstall:x:501:
dba:x:502:oracle,grid
oper:x:503:grid,oracle
asmadmin:x:504:grid
asmdba:x:506:grid,oracle
asmoper:x:507:grid
2. 检验用户设置
# id grid
uid=501(grid) gid=501(oinstall)groups=501(oinstall),502(dba),503(oper),
504(asmadmin),506(asmdba),507(asmoper)
# id oracle
uid=502(oracle) gid=501(oinstall)groups=501(oinstall),502(dba),503(oper),506(asmdba)
3. 校验/etc/security/limits.conf文件
# Added for RAC
# oracle-rdbms-server-11gR2-preinstall setting for nofile soft limitis 1024
oracle soft nofile 1024
# oracle-rdbms-server-11gR2-preinstall setting for nofile hard limitis 65536
oracle hard nofile 65536
# oracle-rdbms-server-11gR2-preinstall setting for nproc soft limitis 2047
oracle soft nproc 2047
# oracle-rdbms-server-11gR2-preinstall setting for nproc hard limitis 16384
oracle hard nproc 16384
# oracle-rdbms-server-11gR2-preinstall setting for stack soft limitis 10240KB
oracle soft stack 10240
# oracle-rdbms-server-11gR2-preinstall setting for stack hard limitis 32768KB
oracle hard stack 32768
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
# End of file
4. 校验文件/etc/profile
在/etc/profile文件中添加如下信息
# Added for RAC
if [ $USER = "oracle" ] || [ $USER = "grid" ];then
if [ $SHELL ="/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
1.3检验相关目录
1. 校验OracleInventory
# cat/etc/oraInst.loc
inventory_loc=/oracle/app/oraInventory
inst_group=oinstall
2. 校验ClusterwareInfrastructure产品路径
# su - grid
$echo $ORACLE_HOME
/oracle/11.2.0/grid
#echo $ORACLE_BASE
/u01/app/asmuser
3. 创建ORACLEDatabase产品路径
# su – oracle
$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1
$echo $ORACLE_BASE
/oracle/app/oracle
1.4配置NTP服务
1. 修改NTP配置文件/etc/ntp.conf
添加如下条目
# Added for RAC
server 10.33.176.66 prefer
server 10.33.176.67
2. 编辑/etc/sysconfig/ntpd文件
添加-x标识,防止时间向回调整,如下所示:
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no
# Additional options for ntpdate
NTPDATE_OPTIONS=
3. 启动或重新NTP服务
# service ntpd start
# service ntpd restart
4. 设置开启器启动NTP服务
#chkconfig ntpd on
5. 校验NTP服务
# ntpq –p
1.5primary检验集群配置
检查总体状态
[grid@RACJL02~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ARCH.dg
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
ora.CRS_VOTE.dg
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
ora.DATA.dg
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
ora.LISTENER.lsnr
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
ora.REDO.dg
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
ora.asm
ONLINE ONLINE racjl01 Started
ONLINE ONLINE racjl02 Started
ora.gsd
OFFLINE OFFLINE racjl01
OFFLINE OFFLINE racjl02
ora.net1.network
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
ora.ons
ONLINE ONLINE racjl01
ONLINE ONLINE racjl02
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE racjl02
ora.cvu
1 ONLINE ONLINE racjl02
ora.mappjl.db
1 ONLINE ONLINE racjl01 Open,Readonly
2 ONLINE ONLINE racjl02 Open,Readonly
ora.oc4j
1 ONLINE ONLINE racjl02
ora.racjl01.vip
1 ONLINE ONLINE racjl01
ora.racjl02.vip
1 ONLINE ONLINE racjl02
ora.scan1.vip
1 ONLINE ONLINE racjl02
检查VOTE disk设置
[grid@RACJL02~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1.ONLINE 074124f08a464ff5bf80cf1f070c6ee9(ORCL:VOTE_CRS01) [CRS_VOTE]
Located 1 voting disk(s).
检查OCR 设置
[grid@RACJL02~]$ ocrcheck -config
Oracle Cluster Registry configuration is :
Device/File Name : +CRS_VOTE
校验集群网络设置
[grid@RACJL02~]$ oifcfg iflist -p -n
eth0 192.168.10.0 PRIVATE 255.255.255.0
eth1 192.168.30.0 PRIVATE 255.255.255.0
eth1 169.254.0.0 UNKNOWN 255.255.0.0
服务器池
[grid@RACJL02~]$ srvctl config srvpool
服务器池名称: Free
重要性: 0, 最小值: 0, 最大值: -1
候选服务器名称:
服务器池名称: Generic
重要性: 0, 最小值: 0, 最大值: -1
候选服务器名称: racjl01,racjl02
监听网络设置
[grid@RACJL02~]$ srvctl config scan_listener
SCAN 监听程序 LISTENER_SCAN1 已存在。端口:TCP:1521
[grid@RACJL02~]$ srvctl config listener -l listener
名称: LISTENER
网络: 1, 所有者: grid
主目录: <CRS home>
端点: TCP:1521
数据库设置
[oracle@RAC01 ~]$ srvctl config database -dmapp
数据库唯一名称: MAPP
数据库名: MAPP
Oracle 主目录:/u01/app/oracle/product/11.2.0/dbhome_1
Oracle 用户: oracle
Spfile: +DATA/MAPP/spfileMAPP.ora
域:
启动选项: open
停止选项: immediate
数据库角色: PRIMARY
管理策略: AUTOMATIC
服务器池: MAPP
数据库实例: MAPP1,MAPP2
磁盘组: DATA,ARCH,REDO
装载点路径:
服务:
类型: RAC
数据库是管理员管理的
检验磁盘多路径设置
#powermt display dev=all
检验ASM Disk Group
[grid@RACJL02~]$ srvctl config asm
ASM 主目录:/u01/11.2.0.3/grid
ASM 监听程序: LISTENER
[grid@RACJL02~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production onTue Oct 6 19:07:59 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production
With the Real Application Clusters andAutomatic Storage Management options
SQL>select name,total_mb,free_mb,cold_used_mb,state from v$asm_diskgroup;
NAME TOTAL_MB FREE_MB COLD_USED_MB STATE
------------------------------ -------------------- ------------ -----------
ARCH 102398 94926 7472 MOUNTED
CRS_VOTE 10238 9840 398 MOUNTED
DATA 102398 99920 2478 MOUNTED
REDO 40958 40626 332 MOUNTED
同步Primary和Standby的hosts信息
192.168.10.100 mapp
192.168.10.200 mappjl
I.2 Primarydatabase环境准备
将主节点数据库置于forcelogging状态
在primary database端检查force logging
SQL>select force_logging fromv$database;
如果不是force logging的,则执行以下命令
启用 force logging
SQL>select force_logging from v$database;
FOR
---
NO
SQL>ALTER DATABASE FORCE LOGGING;
Database altered.
SQL>select force_logging from v$database;
FOR
---
YES
确保数据库是 archivelog 模式
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
在主库查看
SQL>show parameter db_recover;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_recovery_file_dest string +ARCH
db_recovery_file_dest_size big integer 4347M
在Primary database中创建standby log
1. 查看当前Primary database的log状况
SQL>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE#NEXT_TIME
---------- ---------- ---------- -------------------- ---------- --- ---------------- ------------- --------- ---------------------
1 1 67 52428800 512 1 NO CURRENT 466351606-OCT-15 2.8147E+14
2 1 66 52428800 512 1 YES INACTIVE 4586861 06-OCT-15 4663516 06-OCT-15
3 2 39 52428800 512 1 NO CURRENT 466351406-OCT-15 2.8147E+14
4 2 38 52428800 512 1 YES INACTIVE 4528602 06-OCT-15 4663514 06-OCT-15
创建standby日志组(在备库mount状态操作)【数量为(节点数+1)*2个,大小与日志一样(52428800)大约50M】
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 SIZE 50M;
备份主库及归档日志
1、备份数据库
run{
allocatechannel prmy1 type disk;
allocatechannel prmy2 type disk;
allocatechannel prmy3 type disk;
allocatechannel prmy4 type disk;
backupdatabase format '/backup/Full_%U.bak';
releasechannel prmy1;
releasechannel prmy2;
releasechannel prmy3;
releasechannel prmy4;
}
released channel: ORA_DISK_1
allocated channel: prmy1
channel prmy1: SID=64 instance=MAPP1 devicetype=DISK
allocated channel: prmy2
channel prmy2: SID=29 instance=MAPP1 devicetype=DISK
allocated channel: prmy3
channel prmy3: SID=72 instance=MAPP1 devicetype=DISK
allocated channel: prmy4
channel prmy4: SID=76 instance=MAPP1 devicetype=DISK
Starting backup at 09-OCT-15
channel prmy1: starting full datafilebackup set
channel prmy1: specifying datafile(s) inbackup set
input datafile file number=00002name=+DATA/mapp/datafile/sysaux.257.891214313
input datafile file number=00006name=+DATA/mapp/datafile/undotbs2.262.891214993
channel prmy1: starting piece 1 at09-OCT-15
channel prmy2: starting full datafilebackup set
channel prmy2: specifying datafile(s) inbackup set
input datafile file number=00001name=+DATA/mapp/datafile/system.256.891214313
input datafile file number=00004name=+DATA/mapp/datafile/users.259.891214315
channel prmy2: starting piece 1 at09-OCT-15
channel prmy3: starting full datafilebackup set
channel prmy3: specifying datafile(s) inbackup set
input datafile file number=00005name=+DATA/mapp/datafile/example.261.891214601
input datafile file number=00003name=+DATA/mapp/datafile/undotbs1.258.891214315
channel prmy3: starting piece 1 at09-OCT-15
channel prmy4: starting full datafilebackup set
channel prmy4: specifying datafile(s) inbackup set
including current control file in backupset
channel prmy4: starting piece 1 at09-OCT-15
channel prmy4: finished piece 1 at09-OCT-15
piece handle=/backup/Full_0kqj803e_1_1.baktag=TAG20151009T003348 comment=NONE
channel prmy4: backup set complete, elapsedtime: 00:00:03
channel prmy4: starting full datafilebackup set
channel prmy4: specifying datafile(s) inbackup set
including current SPFILE in backup set
channel prmy4: starting piece 1 at09-OCT-15
channel prmy4: finished piece 1 at09-OCT-15
piece handle=/backup/Full_0lqj803p_1_1.baktag=TAG20151009T003348 comment=NONE
channel prmy4: backup set complete, elapsedtime: 00:00:03
channel prmy3: finished piece 1 at09-OCT-15
piece handle=/backup/Full_0jqj803d_1_1.baktag=TAG20151009T003348 comment=NONE
channel prmy3: backup set complete, elapsedtime: 00:00:27
channel prmy2: finished piece 1 at09-OCT-15
piece handle=/backup/Full_0iqj803d_1_1.baktag=TAG20151009T003348 comment=NONE
channel prmy2: backup set complete, elapsedtime: 00:01:56
channel prmy1: finished piece 1 at09-OCT-15
piece handle=/backup/Full_0hqj803d_1_1.baktag=TAG20151009T003348 comment=NONE
channel prmy1: backup set complete, elapsedtime: 00:02:16
Finished backup at 09-OCT-15
released channel: prmy1
released channel: prmy2
released channel: prmy3
released channel: prmy4
2、备份归档日志
RMAN>backup archivelog all format '/backup/ARC_%U.bak';
Starting backup at 09-OCT-15
current log archived
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=64 instance=MAPP1device type=DISK
channel ORA_DISK_1: starting archived logbackup set
channel ORA_DISK_1: specifying archivedlog(s) in backup set
input archived log thread=1 sequence=106RECID=174 STAMP=892600588
input archived log thread=2 sequence=74RECID=175 STAMP=892600590
channel ORA_DISK_1: starting piece 1 at09-OCT-15
channel ORA_DISK_1: finished piece 1 at09-OCT-15
piece handle=/backup/ARC_0mqj808f_1_1.baktag=TAG20151009T003631 comment=NONE
channel ORA_DISK_1: backup set complete,elapsed time: 00:00:01
Finished backup at 09-OCT-15
3、备份控制文件
RMAN>backup device type disk format '/backup/standby_%U.ctl' current controlfile forstandby;
Starting backup at 09-OCT-15
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafilebackup set
channel ORA_DISK_1: specifying datafile(s)in backup set
including standby control file in backupset
channel ORA_DISK_1: starting piece 1 at09-OCT-15
channel ORA_DISK_1: finished piece 1 at09-OCT-15
piecehandle=/backup/standby_0nqj80bh_1_1.ctl tag=TAG20151009T003809 comment=NONE
channel ORA_DISK_1: backup set complete,elapsed time: 00:00:01
Finished backup at 09-OCT-15
将spfile导出为pfile进行修改
SQL> show parameterspfile;
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string +DATA/mapp/spfilemapp.ora
SQL> createpfile='/tmp/pfile.ora' from spfile='+DATA/mapp/spfilemapp.ora'
File created.
将备份的文件拷贝到备库
[oracle@RAC01 dbs]$scp backup/* 192.168.10.15:/backup/
修改Primary Database参数
1、 MAPP主库
DB_UNIQUE_NAME=MAPP
LOG_ARCHIVE_CONFIG='DG_CONFIG=(MAPP,MAPP_JL)'
LOG_ARCHIVE_DEST_1='LOCATION=+ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=MAPP'
LOG_ARCHIVE_DEST_2='SERVICE=MAPP_JL LGWRASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=MAPP_JL'
FAL_SERVER='MAPP_JL'
STANDBY_FILE_MANAGEMENT=auto
修改实例参数如下:
1、启动db接受或发送redodata,包括所有库的db_unique_name
2、主库归档目的地,如果源端有配置此归档目录,此参数建议采用原来配置。
3、当该库充当主库角色时,设置物理备库redodata的传输目的地
4、允许redo传输服务传输数据到目的地,默认是enable
5、允许redo传输服务传输数据到目的地,默认是enable
6、配置网络服务名,假如转换为备库角色时,从这里获取丢失的归档文件
7、配置网络服务名,fal_server拷贝丢失的归档文件到这里
8、auto后当主库的datafiles增删时备库也同样自动操作,且会把日志传送到备库standby_archive_dest参数指定的目录下,确保该目录存在,如果你的存储采用文件系统没有问题,但是如果采用了裸设备,你就必须将该参数设置为manual
使用如下语句进行修改:
altersystem set LOG_ARCHIVE_CONFIG='DG_CONFIG=( MAPP,MAPPJL)' scope=spfile sid='*';
altersystem set LOG_ARCHIVE_DEST_1='LOCATION=+ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=MAPP' scope=spfile sid='*';
altersystem set LOG_ARCHIVE_DEST_2='SERVICE=MAPPJL LGWR ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME= MAPPJL ' scope=spfilesid='*';
altersystem set LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile sid='*';
altersystem set LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile sid='*';
altersystem set LOG_ARCHIVE_MAX_PROCESSES=10 scope=spfile sid='*';
altersystem set FAL_SERVER= MAPPJL scope=spfile sid='*';
altersystem set FAL_CLIENT=MAPP scope=both sid='*';
altersystem set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile sid='*';
配置tnsnames.ora文件
[oracle@RAC01dbs]$ cat ../network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File:/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
MAPP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MAPP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MAPP)
)
)
MAPPJL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mappjl)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mappjl)
)
)
MAPPJL1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mappjl)
(SID=mapp1)
)
)
MAPPJL2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.25)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mappjl)
(SID=mapp2)
)
)
I.3 Standbydatabase环境准备
在Standby Database中创建相关目录结构
在备库创建需要的目录以放置 $ADR_HOME 中的数据文件和跟踪文件。
创建审计日志目录:
#su - oracle
mkdir -p /u01/app/oracle/admin/MAPPJL/adump
在两个节点上都要执行
创建临时监听
初始复制主库至备库需要在备库配置静态注册的监听
1选择一个备用数据库节点empjldbserva,创建临时监听
#su– oracle
$ cd$ORACLE_HOME/network/admin
[oracle@RACJL01admin]$ vi listener.ora
ADMIN_RESTRICTIONS_LISTENER = on
LISTENER_mapp =
(ADDRESS_LIST =
(ADDRESS=
(PROTOCOL = IPC)
(KEY = mapp)
)
(ADDRESS =
(PROTOCOL = TCP)
(HOST = mappjl01vip)
(PORT = 1526)
)
)
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER = 10
TRACE_LEVEL_LISTENER = OFF
SID_LIST_LISTENER_mapp =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = mapp)
(SID_NAME = mapp)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
)
)
[oracle@RACJL01admin]$ cat tnsnames.ora
#tnsnames.ora.racjl01 Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora.racjl01
#Generated by Oracle configuration tools.
~ = ~
MAPP =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MAPP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MAPP)
)
)
MAPPJL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = MAPPJL)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MAPPJL)
)
)
"listener.ora" 147L, 4396C 已写入
配置环境变量
[oracle@RACJL01dbs]$ cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startupprograms
PATH=$PATH:$HOME/bin
export PATH
export TMP=/tmp
export TMPDIR=/tmp
export ORACLE_BASE=/u01/app/oracle
exportORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=MAPP1
export ORACLE_HOSTNAME=RACJL01
export ORACLE_UNQNAME=$ORACLE_SID
exportPATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
创建备将主库的文件拷贝到dbs中,并且对内容进行修改
[oracle@RACJL01backup]$cp pfile.ora /u01/app/oracle/product/11.2.0/dbhome_1/dbs/ initMAPP1.ora
修改和增加一些内容,注意红色部分:
[oracle@RACJL01dbs]$ cat /tmp/pfile.ora
MAPP2.__db_cache_size=872415232
MAPP1.__db_cache_size=654311424
MAPP2.__java_pool_size=16777216
MAPP1.__java_pool_size=16777216
MAPP2.__large_pool_size=16777216
MAPP1.__large_pool_size=16777216
MAPP1.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment
MAPP2.__oracle_base='/u01/app/oracle'#ORACLE_BASEset from environment
MAPP2.__pga_aggregate_target=452984832
MAPP1.__pga_aggregate_target=452984832
MAPP2.__sga_target=1342177280
MAPP1.__sga_target=1342177280
MAPP2.__shared_io_pool_size=0
MAPP1.__shared_io_pool_size=0
MAPP2.__shared_pool_size=419430400
MAPP1.__shared_pool_size=637534208
MAPP2.__streams_pool_size=0
MAPP1.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/MAPPJL/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.0.0'
*.control_files='+REDO/MAPPJL/controlfile/current.265.893020985'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_create_online_log_dest_1='+REDO'
*.db_domain=''
*.db_name='MAPP'
*.db_recovery_file_dest='+ARCH'
*.db_recovery_file_dest_size=4558159872
*.db_unique_name='MAPPJL'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=MAPPXDB)'
*.fal_server='MAPP' #这里要写成主库
MAPP2.instance_number=2
MAPP1.instance_number=1
*.log_archive_config='DG_CONFIG=(MAPP,MAPPJL)'
*.log_archive_dest_1='LOCATION=+ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=MAPPJL'
*.log_archive_dest_2='SERVICE=MAPP LGWRASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=MAPP'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_max_processes=10
*.open_cursors=300
*.pga_aggregate_target=444596224
*.processes=150
*.remote_listener='MAPPJL:1521'
*.remote_login_passwordfile='exclusive'
*.sga_target=1333788672
*.standby_file_management='AUTO'
MAPP2.thread=2
MAPP1.thread=1
MAPP2.undo_tablespace='UNDOTBS2'
MAPP1.undo_tablespace='UNDOTBS1'
将数据库启动到nomount状态
[oracle@RACJL01dbs]$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production onTue Oct 13 23:32:00 2015
Copyright (c) 1982, 2011, Oracle and/or itsaffiliates. All rights reserved.
connected to target database (not started)
RMAN>startup nomountpfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initMAPP1.ora';
Oracle instance started
Total System Global Area 1336176640 bytes
Fixed Size 2228144 bytes
Variable Size 671088720 bytes
Database Buffers 654311424 bytes
Redo Buffers 8548352 bytes
恢复控制文件
RMAN>restorestandby controlfile from '/backup/ standby_0rqjfgoc_1_1.ctl'
将数据库启动成mount状态
RMAN>alterdatabase mount;
恢复数据库文件和归档文件
RMAN>restoredatabase;
RMAN>recover database;
创建备库口令文件
配置DataGuard需要两边数据库密码保持一致,把Primary Database的密码文件分别拷贝到Standby Database 两个节点。
[oracle@RACJL01 admin]$scp orapwMAPP1192.168.10.15:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwMAPP1
[oracle@RACJL01 admin]$scp orapwMAPP1 192.168.10.25:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwMAPP2
检测instance状态
SQL>select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
MAPP1 MOUNTED
SQL>alter database recover managed standby database disconnect from session;
Database altered.
测试应用日志过程,我们手动切换primary site的日志,并观察日志:
SQL>alter system switch logfile;
System altered.
[oracle@RAC01 dbs]$ tail -f/u01/app/oracle/diag/rdbms/mapp/MAPP1/trace/alert_MAPP1.log
Mon Oct 12 01:32:36 2015
Thread 1 advanced to log sequence 134 (LGWRswitch)
Current log# 2 seq# 134 mem# 0:+REDO/mapp/onlinelog/group_2.258.891214581
Mon Oct 12 01:32:36 2015
Archived Log entry 227 added for thread 1sequence 133 ID 0x6e0b1aeb dest 1:
将pfile文件转换成spfile文件
SQL>create spfile='+DATA/MAPPJL/spfilemapp.ora' frompfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initMAPP1.ora';
Filecreated.
ASMCMD> ls DATA/MAPPJL/spfilemapp.ora
spfilemapp.ora
修改init文件
[oracle@RACJL01dbs]$ cat initMAPP1.ora
SPFILE='+DATA/MAPPJL/spfilemapp.ora'
[oracle@RACJL02dbs]$ cat initMAPP2.ora
SPFILE='+DATA/MAPPJL/spfilemapp.ora'
将Standby Database注册到OCR里
[oracle@RACJL01 ~]$ srvctl add database -d mappjl -nmapp -o $ORACLE_HOME -m mappjl -p +DATA/MAPPJL/spfilemapp.ora -rphysical_standby -a +DATA,+ARCH,+CRS_VOTE,+REDO
参照:
[oracle@RACJL01~]$ srvctl -h|grep add
用法: srvctl adddatabase -d <db_unique_name> -o <oracle_home> [-c {RACONENODE | RAC| SINGLE} [-e <server_list>] [-i <inst_name>] [-w <timeout>]][-m <domain_name>] [-p <spfile>] [-r {PRIMARY | PHYSICAL_STANDBY |LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s <start_options>] [-t<stop_options>] [-n <db_name>] [-y {AUTOMATIC | MANUAL}] [-g"<serverpool_list>"] [-x <node_name>] [-a"<diskgroup_list>"] [-j "<acfs_path_list>"]
将Standby Database注册到OCR里
[oracle@RACJL01admin]$ srvctl add instance -d mappjl -i MAPP1 -n racjl01
[oracle@RACJL01admin]$ srvctl add instance -d mappjl -i MAPP2 -n racjl02
[oracle@RACJL01 ~]$ srvctl config database -d mappjl
数据库唯一名称: mappjl
数据库名: mapp
Oracle 主目录: /u01/app/oracle/product/11.2.0/dbhome_1
Oracle 用户: oracle
Spfile:+DATA/MAPPJL/spfilemapp.ora
域:
启动选项: open
停止选项: immediate
数据库角色:PHYSICAL_STANDBY
管理策略: AUTOMATIC
服务器池: mappjl
数据库实例: MAPP1,MAPP2
磁盘组: DATA,REDO
装载点路径:
服务:
类型: RAC
数据库是管理员管理的
启动Active Dataguard
重新启动Standby Database
在mappjl01上执行
SQL>alterdatabase recover managed mappjl database cancel;
重启数据
[oracle@RACJL01admin]$ srvctl stop instance -d mappjl -i mapp1
[oracle@RACJL01admin]$ srvctl start database -d mappjl
查看集群数据库状态
SQL>select name,database_role,open_mode from gv$database;
NAME DATABASE_ROLE OPEN_MODE
--------- ------------------------------------
MAPP PHYSICAL STANDBY READ ONLY
MAPP PHYSICAL STANDBY READ ONLY
启动Managed Recovery Process
在备库应用日志:
SQL>alter database recover managed standby database disconnect from session;
Database altered.
I.4 修改DATAGUARD保护模式
DG有三种模式:
在Maximumprotection下, 可以保证从库和主库数据完全一样,做到zero data loss.事务同时在主从两边提交完成,才算事务完成。如果从库宕机或者网络出现问题,主从库不能通讯,主库也立即宕机。在这种方式下,具有最高的保护等级。但是这种模式对主库性能影响很大,要求高速的网络连接。
在Maximum availability模式下,如果和从库的连接正常,运行方式等同Maximumprotection模式,事务也是主从库同时提交。如果从库和主库失去联系,则主库自动切换到Maximumperformance模式下运行,保证主库具有最大的可用性。
在Maximum performance,主库把归档的 archived log通过arch进程传递给从库,在这种方式下,主库运行性能最高,但是不能保证数据不丢失,且丢失的数据受redo log的大小影响。在redo log过大的情况下,可能一天都没有归档一个日志,可以通过手工切换日志的方式来减小数据的丢失。
最大保护
最大可用
最大性能
数据一致性
完全一致
尽量的避免数据丢失,但不能绝对保证数据完全一致。
可以异步REDO日志
日志传输方式
Primary Database必须使用LGWR、SYNC、AFFIRM
Primary Database必须配置为LGWR、SYNC、AFFIRM方式归档。
通过LGWR ASYNC或者ARCH实现
COMMIT提交条件
Primary Database上的每个事务的Redo日志必须在本地和Standby Database上都写入日志文件后才能提交(如果不能写入STANDBY DATABASE,PRIMARY DATABASE 自动挂起,防止丢数据)
Primary Database每个事务的Redo日志要写到本地和Standby Database中才能提交(与最大保护不同的是:写入STANDBY DATABASE失败,PRIMARY DATABASE不会挂起,会自动转成最大性能模式,等待问题解决后自动转成最大可用模式)
Primary Database上的事务的Redo日志只要写到本地日志文件就可以提交,不必等待到Standby Database的传递完成。
Standby redo log
需要
需要
不需要
缺省模式
是
PRIMAYR DATABASE影响最小
最大,保护数据时时同步
一般,保护数据同步中等
不影响,但是保护数据也是最弱的
最高可用性MAXIMUM AVAILABILITY
查看当前保护模式:
在主库上操作:
SQL>select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
SQL> select dest_id,database_mode,recovery_mode,protection_mode fromv$archive_dest_status where dest_id=2;
DEST_IDDATABASE_MODE RECOVERY_MODE PROTECTION_MODE
---------- --------------- -------------------------------------------
2OPEN_READ-ONLY IDLE MAXIMUM PERFORMANCE
查看备库是否正在应用日志进行恢复
SQL>select process,status,thread#,sequence# from v$managed_standby order by 3,1;
PROCESS STATUS THREAD# SEQUENCE#
--------- ------------ --------------------
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
ARCH CONNECTED 0 0
RFS IDLE 0 0
PROCESS STATUS THREAD# SEQUENCE#
--------- ------------ --------------------
RFS IDLE 0 0
RFS IDLE 0 0
RFS IDLE 0 0
RFS IDLE 0 0
RFS IDLE 1 203
MRP0 WAIT_FOR_LOG 2 148
RFS IDLE 2 148
18 rows selecte
最大保护MAXIMUM availability
停止redo apply
在RACJL01上:
SQL>alter database recover managed standby database cancel;
Database altered.
在RAC01上
alter system set log_archive_dest_2='SERVICE=MAPPJL LGWR SYNC AFFIRMVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=MAPPJL' scope=bothsid='*';
将dg模式改成Maximum availability
在RAC01的mount状态下进行配置
[oracle@RAC01~]$ srvctl stop database -d mapp
[oracle@RAC01~]$ srvctl start database -d mapp -o nomount;
SQL>alter database set standby database to maximize availability;
Database altered.
SQL>alter database open ;
Database altered.
I.5 主从切换
检查没有日志传输错误
主库
SQL>SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
STATUS GAP_STATUS
--------- ------------------------
VALID NO GAP
备库
SQL>SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;
STATUS GAP_STATUS
--------- ------------------------
VALID NO GAP
评估切换时间
脚本
columnname format a24;
columnvalue format a16;
columndatum_time format a24;
selectname,value datum_time from v$dataguard_stats;
SQL>column name format a24;
SQL>column value format a16;
SQL>column datum_time format a24;
SQL>select name,value datum_time from v$dataguard_stats;
NAME DATUM_TIME
------------------------ ------------------------
transport lag +00 00:00:00
apply lag +00 00:00:00
apply finish time +00 00:00:00.000
estimated startup time 23
校验主库状态
主库:
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO STANDBY
备库:
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
有时候会显示 SESSION ACTIVE,这表示当前还有活动的会话连接。
关闭一个实例,防止产生ORA-01105
SQL>alter database commit to switchover to physical standby with session shutdown;
alter database commit to switchover tophysical standby with session shutdown
*
ERROR at line 1:
ORA-01105: mount is incompatible withmounts by other instances
首先关闭一个实例
[oracle@RAC01~]$ srvctl stop instance -d MAPP -i MAPP2
[oracle@RAC01~]$ srvctl status database -d mapp
实例 MAPP1 正在节点 rac01 上运行
实例 MAPP2 没有在 rac02 节点上运行
[oracle@RACJL01tmp]$ srvctl stop instance -d mappjl -i MAPP2
[oracle@RACJL01tmp]$ srvctl status database -d mappjl
实例 MAPP1 正在节点 racjl01 上运行
实例 MAPP2 没有在 racjl02 节点上运行
主库切换为备库角色
如果主库SELECTSWITCHOVER_STATUS FROM V$DATABASE;的显示为SESSION ACTIVE表示会话还有连接,则需要使用
alter database commit toswitchover to physical standby with session shutdown;
如果不是则使用
alter database commit to switchoverto pyhsical standby;
SQL>alter database commit to switchover to physical standby with session shutdown;
Database altered.
登陆到备库检查
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
确保状态会SESSION_ACTIVE或者TO PRIMARY.
启动MAPP(原来主库)到mount状态
SQL> startup mount;
切换备库至主角色
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TOPRIMARY WITH SESSION SHUTDOWN;
Database altered.
启动数据库
II DATA GUARD日常维护
数据库监听
在备用数据库中检查监听
[oracle@RACJL01~]$ srvctl status listener -l listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: racjl01,racjl02
登录主库节点,测试监听连通性
在备库操作
[oracle@RACJL01~]$ tnsping mapp 3
TNS Ping Utility for Linux: Version11.2.0.3.0 - Production on 19-OCT-2015 23:45:20
Copyright (c) 1997, 2011, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = MAPP)(PORT = 1521)) (CONNECT_DATA = (SERVER= DEDICATED) (SERVICE_NAME = MAPP)))
OK (0 msec)
OK (10 msec)
OK (0 msec)
在主库操作
[oracle@RAC01~]$ tnsping mappjl 3
TNS Ping Utility for Linux: Version11.2.0.3.0 - Production on 17-OCT-2015 23:36:55
Copyright (c) 1997, 2011, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = MAPPJL)(PORT = 1521)) (CONNECT_DATA =(SERVER = DEDICATED) (SERVICE_NAME = MAPPJL)))
OK (0 msec)
OK (10 msec)
OK (0 msec)
启动和关闭监听命令:
主库备库均可操作
[grid@RAC01~]$ srvctl stop listener -l listener
[grid@RAC01~]$ srvctl start listener -l listener
配置日志传输服务
MAPP主库实例参数:
log_archive_dest_2=‘SERVICE=MAPPJL
LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=MAPPJL’
log_archive_dest_state_2=enable
启动和关闭日志传输服务
登录主数据库:
启动命令:
altersystem set log_archive_dest_state_2=’enable’ sid=’*’;
关闭命令:
altersystem set log_archive_dest_state_2=defer sid=’*’;
监控日志传输状态
主库
SQL> SELECT MAX(SEQUENCE#),THREAD# FROMV$ARCHIVED_LOG WHERE RESETLOGS_CHANGE# = (SELECT MAX(RESETLOGS_CHANGE#) FROMV$ARCHIVED_LOG) GROUP BY THREAD#;
MAX(SEQUENCE#) THREAD#
-------------- ----------
717 1
644 2
备库
SQL> SELECT MAX(SEQUENCE#),THREAD# FROMV$ARCHIVED_LOG WHERE RESETLOGS_CHANGE# = (SELECT MAX(RESETLOGS_CHANGE#) FROMV$ARCHIVED_LOG) GROUP BY THREAD#;
MAX(SEQUENCE#) THREAD#
-------------- ----------
717 1
644 2
主库
SQL> col destination for a20;
SQL>SELECT DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ# FROMGV$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <>'INACTIVE';
DESTINATION STATUS ARCHIVED_THREAD# ARCHIVED_SEQ#
-------------------- ------------------------- -------------
+ARCH VALID 2 644
MAPPJL VALID 2 717
+ARCH VALID 1 717
MAPPJL VALID 2 717
备库
SQL> col destination for a20;
SQL> SELECTDESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ# FROMGV$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <>'INACTIVE';
DESTINATION STATUS ARCHIVED_THREAD# ARCHIVED_SEQ#
-------------------- ------------------------------------ -------------
+ARCH VALID 0 0
MAPP VALID 0 0
+ARCH VALID 2 638
+ARCH VALID 1 717
MAPP VALID 0 0
+ARCH VALID 1 717
6 rows selected
启动实时日志应用服务:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASEUSING CURRENT LOGFILE
disconnect;
关闭日志应用服务:
SQL> ALTER DATABASE RECOVER MANAGED STANDBYDATABASE CANCEL;
查看是主备
主库
SQL>SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PRIMARY
备库
SQL>SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
监控日志应用服务
SQL>SELECT THREAD#,SEQUENCE#,APPLIED FROMV$ARCHIVED_LOG
ORDER BY SEQUENCE#
SQL> SELECT PROCESS, STATUS, THREAD#,SEQUENCE#,BLOCK#,BLOCKS FROM V$MANAGED_STANDBY;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS
--------- ------------ -------------------- ---------- ----------
ARCH CONNECTED 0 0 0 0
ARCH CLOSING 1 230 1 1
ARCH CONNECTED 0 0 0 0
ARCH CLOSING 1 250 1 568
ARCH CLOSING 1 249 1 862
ARCH CLOSING 1 245 1 9
ARCH CLOSING 1 246 1 774
ARCH CLOSING 1 247 1 764
ARCH CLOSING 1 237 100353 1600
ARCH CLOSING 1 238 12288 1085
10 rows selected.
SQL>SELECT THREAD#, SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE# FROM V$ARCHIVED_LOG;
SQL>SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#,NEXT_CHANGE#FROM V$LOG_HISTORY;
SQL>SELECT MESSAGE FROM V$DATAGUARD_STATUS;
- DATA GRARD安装配置、维护、切换
- mongoDB安装配置维护
- RHCS经典安装配置维护三部曲
- hadoop安装和维护03--配置ssh
- Linux DNS 服务器安装、配置和维护
- drbd安装配置和切换
- Heartbeat3.x应用全攻略之:安装、配置、维护
- Solaris下Informix安装配置维护升级基础测试
- Heartbeat3.x应用全攻略之:安装、配置、维护
- Heartbeat3.x应用全攻略之:安装、配置、维护
- Heartbeat 3.x应用全攻略之:安装、配置、维护
- hadoop安装和维护04--NTP服务器,SELinux,防火墙配置
- hadoop安装和维护05--配置yum源
- hadoop安装和维护06--配置yum源实战
- Oracle Data Integrater——安装、配置
- hortonworks data platform 安装配置文档
- Keepalievd的安装配置跟切换模拟
- python 安装配置及切换版本
- oracle修改锁编辑查询结果
- Site Template
- 安卓集成支付宝支付功能
- Java基础知识总结(二)——NIO
- Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
- DATA GRARD安装配置、维护、切换
- Android_07_开机自启动
- 《细说PHP—第三版》新书出台啦
- Linux下ps命令实现
- 麻省理工免费在线课程首次可以获取学位
- Hive中的.hiverc文件及命令运行方式
- List遍历中删除元素
- HDOJ 1166 敌兵布阵(线段树or树状数组—区间求和与单点值加减更新)
- android service 详解