第二章:安装ogg&单向复制测试(典型的配置)
来源:互联网 发布:淘宝ps4游戏商店 编辑:程序博客网 时间:2024/05/02 02:52
1.安装环境说明
os: redhat linux 5.564bit
db:Oracle 11.2.0.364bit
采用goldengate典型的配置:
在source端,配置一个管理进程,添加一个Extract进程,添加一个本地队列路径,定义一个远端接受路径.
在target端,配置一个管理进程和添加一个Replicat进程,指定一个应用队列,即抽取进程定义的远端队列。
注意:这种配置没有Data Pump进程,数据直接从源端又Ext进程刷新到target端的trail中,因此存在一定的风险。
(经典的生产一半不能用)进程容易中断
db:Oracle 11.2.0.364bit
采用goldengate典型的配置:
在source端,配置一个管理进程,添加一个Extract进程,添加一个本地队列路径,定义一个远端接受路径.
在target端,配置一个管理进程和添加一个Replicat进程,指定一个应用队列,即抽取进程定义的远端队列。
注意:这种配置没有Data Pump进程,数据直接从源端又Ext进程刷新到target端的trail中,因此存在一定的风险。
(经典的生产一半不能用)进程容易中断
2.配置ORACLE_HOME 和 ORACLE_SID
如果系统上只有一个单实例,那么可以在操作系统级别设置ORACLE_HOME和ORACLE_SID变量。
如果有多个instance,那么可以再Extrace和Replicat group 中设置setenv变量,这种session级别的设置会覆盖操作系统的设置。
如果有多个实例,那么可以分别配置同步的Extrace groups,那么参数文件可以按照如下进行配置:
group 1:
extract ora9a
setenv (ORACLE_HOME="/u01/app/product")
setenv("ORACLE_SID="oraa")
useridalias tiger1
rmhost sysb
rmttrail /u01/ggs/dirdat/rt
table hr.emp;
table hr.salary;
group 2:
extract orab
setenv (ORACLE_HOME="/u01/app/product")
setenv("ORACLE_SID="orab")
useridalias tiger1
rmhost sysb
rmttrail /u01/ggs/dirdat/st
table fin.sales;
table fin.cust;
3.设置library路径
ogg使用共享的library.所以在linux上运行ogg之前,必须先配置好library路径。
假设ogg的安装目录是/u01/ggs,那么在/home/oracle/.bash_profile文件里添加如下内容:
export PATH=/u01/ggs:$PATH
export LD_LIBRARY_PATH=/u01/ggs:$LD_LIBRARY_PATH
4.安装ogg
在ogg11中,直接解压缩安装文件就行了,到了ogg12c的版本,ogg使用oui来进行安装。
[oracle@ogg2 Disk1]$ pwd
/u01/software/fbo_ggs_Linux_x64_shiphome/Disk1
[oracle@ogg2 Disk1]$ ls
install response runInstaller stage
[oracle@ogg2 Disk1]$
/u01/software/fbo_ggs_Linux_x64_shiphome/Disk1
[oracle@ogg2 Disk1]$ ls
install response runInstaller stage
[oracle@ogg2 Disk1]$
运行RunInstaller:
如果数据库版本是12c,就选择12c;如果数据库是11g,就选择11g的。software location 选择ogg的解压安装目录
进入ogg安装目录,运行如下命令:
ldd ggsci
[oracle@ogg1 ggs]$ ldd -version
[oracle@ogg1 ggs]$ldd ggsci --查看需要的安装包
librt.so.1=>/lib64/librt.so.1 (0x0000003dafe00000)
libdl.so.2=>/lib64/libdl.so.2 (0x0000003daf200000)
libgglog.so =>/u01/zw/libgglog.so (0x00002b9d080f3000)
libggrepo.so =>/u01/zw/libggrepo.so (0x00002b9d0849c000)
libdb-5.2.so=>/u01/zw/libdb-5.2.so (0x00002b9d08707000)
libggperf.so =>/u01/zw/libggperf.so (0x00002b9d089a2000)
libicui18n.so.48=>/u01/zw/libicui18n.so.48 (0x00002b9d08bd1000)
libicuuc.so.48=>/u01/zw/libicuuc.so.48 (0x00002b9d08edf000)
libicudata.so.48=>/u01/zw/libicudata.so.48 (0x00002b9d0915d000)
libpthread.so.0=>/lib64/libpthread.so.0 (0x0000003daf600000)
libxerces-c.so.28=>/u01/zw/libxerces-c.so.28 (0x00002b9d0a823000)
libantlr3c.so =>/u01/zw/libantlr3c.so (0x00002b9d0ad3a000)
libnnz11.so => not found
libclntsh.so.11.1 =>not found
libggnnzitp.so => not found
libstdc++.so.6=>/usr/lib64/libstdc++.so.6 (0x0000003dc1000000)
libm.so.6=>/lib64/libm.so.6 (0x0000003daee00000)
libgcc_s.so.1=>/lib64/libgcc_s.so.1 (0x0000003dbd400000)
libc.so.6=>/lib64/libc.so.6 (0x0000003daea00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003dae600000)
libnsl.so.1=>/lib64/libnsl.so.1 (0x0000003db2e00000)
libaio.so.1=>/usr/lib64/libaio.so.1 (0x00002b9d0e305000)
少包了,解决办法。
[oracle@ogg02 ggs]$ find /u01-name libons.so 或 find/ -name libons.so
[oracle@ogg02 ggs]$ ln -s/u01/app/oracle/product/11.2.0.3/db_1/lib/libons.so
假设OGG的安装目录是/u01/ggs,那么在/home/oracle/.bash_profile文件里添加如下内容:
export PATH=/u01/ggs:$PATH
export LD_LIBRARY_PATH=/u01/ggs:$LD_LIBRARY_PATH
--source 使修改生效:
[oracle@ogg1 u01]$ source ~/.bash_profile
[oracle@ogg02 ggs] cd /u01/ggs
[oracle@ogg02 ggs] ggsci
GGSCI (ogg1) 1>info manager
在 Oracle 11g中,安装完后,需要ggsci执行create subdirs创建ogg的目录,到了12c,就不用创建了。
5.开启归档模式、强制日志、附加日志
5.1 开规档
ldd ggsci
[oracle@ogg1 ggs]$ ldd -version
[oracle@ogg1 ggs]$ldd ggsci --查看需要的安装包
librt.so.1=>/lib64/librt.so.1 (0x0000003dafe00000)
libdl.so.2=>/lib64/libdl.so.2 (0x0000003daf200000)
libgglog.so =>/u01/zw/libgglog.so (0x00002b9d080f3000)
libggrepo.so =>/u01/zw/libggrepo.so (0x00002b9d0849c000)
libdb-5.2.so=>/u01/zw/libdb-5.2.so (0x00002b9d08707000)
libggperf.so =>/u01/zw/libggperf.so (0x00002b9d089a2000)
libicui18n.so.48=>/u01/zw/libicui18n.so.48 (0x00002b9d08bd1000)
libicuuc.so.48=>/u01/zw/libicuuc.so.48 (0x00002b9d08edf000)
libicudata.so.48=>/u01/zw/libicudata.so.48 (0x00002b9d0915d000)
libpthread.so.0=>/lib64/libpthread.so.0 (0x0000003daf600000)
libxerces-c.so.28=>/u01/zw/libxerces-c.so.28 (0x00002b9d0a823000)
libantlr3c.so =>/u01/zw/libantlr3c.so (0x00002b9d0ad3a000)
libnnz11.so => not found
libclntsh.so.11.1 =>not found
libggnnzitp.so => not found
libstdc++.so.6=>/usr/lib64/libstdc++.so.6 (0x0000003dc1000000)
libm.so.6=>/lib64/libm.so.6 (0x0000003daee00000)
libgcc_s.so.1=>/lib64/libgcc_s.so.1 (0x0000003dbd400000)
libc.so.6=>/lib64/libc.so.6 (0x0000003daea00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003dae600000)
libnsl.so.1=>/lib64/libnsl.so.1 (0x0000003db2e00000)
libaio.so.1=>/usr/lib64/libaio.so.1 (0x00002b9d0e305000)
少包了,解决办法。
[oracle@ogg02 ggs]$ find /u01-name libons.so 或 find/ -name libons.so
[oracle@ogg02 ggs]$ ln -s/u01/app/oracle/product/11.2.0.3/db_1/lib/libons.so
假设OGG的安装目录是/u01/ggs,那么在/home/oracle/.bash_profile文件里添加如下内容:
export PATH=/u01/ggs:$PATH
export LD_LIBRARY_PATH=/u01/ggs:$LD_LIBRARY_PATH
--source 使修改生效:
[oracle@ogg1 u01]$ source ~/.bash_profile
[oracle@ogg02 ggs] cd /u01/ggs
[oracle@ogg02 ggs] ggsci
GGSCI (ogg1) 1>info manager
在 Oracle 11g中,安装完后,需要ggsci执行create subdirs创建ogg的目录,到了12c,就不用创建了。
5.开启归档模式、强制日志、附加日志
5.1 开规档
SQL> alter system set log_archive_dest_1='location=/oradata/arch' scope=both;
SQL> alter database archivelog;
SQL> archive log list;
5.2 添加附加日志
SQL> alter database add supplemental log data;
5.3 强制日志
SQL> alter database force logging;
--确认修改:
SQL> select LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN,FORCE_LOGGING from v$database;
6.启用DDL支持
ogg可以配置支持ddl的同步,对ddl的支持是通过创建一些table来保存这些ddl的信息,并且有一些限制。
6.1.禁用recycel bin
SQL> alter system set recyclebin=off scope=spfile;
6.2. 创建存放DDL 信息的user并赋权
创建GG的表空间:(source和target端都要创建)
SQL> create tablespace ggs datafile '/oradata/ggs01.dbf' size 200m autoextend off;
这里的表空间不能自动扩展。ogg11g可以使用默认的user表空间,12c需要独立的表空间,否则报错。
SQL> create user ggs identified by ggs default tablespace ggs temporary tablespace temp;
SQL> grant connect,resource to ggs;
SQL> grant execute on utl_file to ggs;
退出oracle的所有session,然后用sysdba权限执行以下脚本
注意:要先进入/u01/ggs,再执行脚本
[oracle@ogg02 ggs]cd /u01/ggs
[oracle@ogg02 ggs] sqlplus / as sysdba
6.3执行脚本
(1)创建DDL标记表
SQL> @/u01/zt/marker_setup.sql; (这里会提示要输入ggs用户)
(2)将在数据库中创建捕获DDL语句的Trigger等必要组件 (这里会提示要输入ggs用户)
SQL> @/u01/zt/ddl_setup.sql;
注意:(1)执行时必须断开GGSCI连接,否则报错
(2)执行的时候不用选择操作类型了。在11g中需要选择initialsetup选项。
(3) 创建GGS_GGSUSER_ROLE角色 ( 这里会提示要输入ggs用户)
SQL> @/u01/zt/role_setup.sql;
(4) 授予给extract group参数中定义的userid用户
SQL> grant GGS_GGSUSER_ROLE to ggs;
(5) 启用ddl捕获触发器:
SQL> @/u01/zt/ddl_enable.sql;
还有两个可选的脚本,用来提高ddl复制性能:
@?/rdbms/admin/dbmspool ---创建DBMS_SHARED_POOL包
@/u01/ggs/ddl_pin.sql
--通过DBMS_SHARED_POOL.keep存储过程将DDLReplication相关对象keep在共享池中,保证这些对象不要reload,提升性能。
注意,在oracle 11.2.0.4 中需要配置;
SQL> alter system set enable_goldengate_replication=true;
System altered.
7.检查点表配置
goldengate 的检查点表示 目标端 的一个可选的配置,默认情况下,goldengate不会设置检查点表机制,而依耐于文件系统的保证,相对于后者,检查点表机制更可靠,且便于日常维护。
建议在首次配置目标库的时候,在全局变量中设置检查点表,并创建,这样做的话,以后所有的replicat进程默认情况下均会使用这个检查点表。
配置检查点表后,goldengate日常维护的操作区别在于,所有replicate进程的添加删除前均需要从ggsci中登录数据。
配置步骤如下:
1. 登录ggsci界面,在./GLOBALS文件里添加checkpoint表名
checkpointtable owner.table --指定的检查点记录表
2.连上db,创建checkpoint表
dblogin sourcedb dbname,userid db_user,password pw
add checkpointtable ggs.checkpoint --生成一个检查点记录表
这里不做配置,直接在后面测试中配置。
8.OGG单向复制测试
注意三点: (1)目标库的用户名和对象名称可以和源端不同,关键在于配置文件中能够正确匹配。
(2)配置源端和目标端tnsnames,保持互联互通。
(3)对于采用oralce asm的实例,还需要配置监听,使得goldengate能够连接到对应的asm实例上,访问redo日志。
可以通过lsnrctl status 命令查看监听器状态,看看能否找到asm实例的信息,默认情况下asm实例已经注册,信息类似
service "+ASM" has 1 instance(s)
8.1在source和target database 上创建测试用户
--source database
SQL> create user sender identified by oracle default tablespace users temporary tablespace temp; --创建用户
User created.
SQL> grant connect,resource,dba to sender;
Grant succeeded.
2. --target database
SQL> create user receiver identified by oracle default tablespace users temporary tablespace temp; --创建用户
User created.
SQL> grant connect,resource,dba to receiver;
Grant succeeded.
8.2在source和target上配置manager
cd/u01/ogg
ggsci
info all
edit params mgr --编辑manager参数
port 7809 --这里指定了端口,保存退出
start manager mgr --启动manager
8.3配置sourcedb的复制队列
8.3.1 连接到数据库,测试连接
dblogin userid ggs@ogg02,password ggs
8.3.2 增加一个抽取 添加 extract 进程
GGSCI (ogg1) 10> add extract ext1, tranlog, begin now
ext1 :是 extract进程名称
begin now: 从现在开始捕获事务日志
GGSCI (ogg1) 11> add exttrail/u01/zt/dirdat/lt, extract ext1
exttrail :trail 文件所在目录,以及命名规则;extract ext1
修改抽取进程ext1参数:
GGSCI (ogg1) 13> edit params ext1
extract ext1
userid ggs@ogg02, password ggs
rmthost 192.168.56.23, mgrport7809
rmttrail /u01/zt/dirdat/lt 本地
ddl include mapped objname sender.*; ddl 和 sender用户
table sender.*;
info all
8.4 配置targetdb 同步队列
8.4.11. 在Target 端添加checkpoint表
GGSCI (gg4) 6> edit params ./GLOBAL --在./GLOBAL文件里添加checkpoint表名
GGSCHEMA ggs --DDL同步必须指定,DML同步不需要
CHECKPOINTTABLE ggs.checkpoint --指定的检查点记录表
GGSCI (ogg4) 1> dblogin userid ggs@ogg04,password ggs --连上db
Successfully logged into database.
GGSCI (ogg4) 2> add checkpointtable ggs.checkpoint ----生成一个检查点记录表checkpoint
8.4.2 创建同步队列 (添加repliact进程)
GGSCI (ogg2) 3> add replicat rep1,exttrail/u01/zt/dirdat/lt, checkpointtable ggs.checkpoint
REPLICAT added.
GGSCI (ogg2) 4> edit params rep1
replicat rep1
ASSUMETARGETDEFS
userid ggs@ogg04,password ggs
discardfile /u01/zt/dirdat/rep1_discard.txt,append, megabytes100 --megabytes100单个trail文件100M
ddl
map sender.*, target receiver.*;
sender 用户下的表,映射到target receiver用户下
discardfile : 同步不了的数据,放到 /u01/ggs/dirdat/rep1_discard.txt
8.5 开启同步
8.5.1 sourcedb:
info all
start extract ext1
into all
8.5.2 targetdb
info all
start replicat rep1
info all
8.6 测试data复制
我们在sourcedb 上 的sender用户下创建一张表,然后看这张表是否同步到了target db的receiver用户下。
sourcedb
conn sender/oracle;
create table zw as select * from sys.all_users;
targetdb
conn receiver/oracle;
select count(*) from zw;
数据同步过来了,因为我们启用了ddl的支持。
删除的步骤如下:
1. 登陆GGSCI
2. 用dblogin 登陆数据库。
3. 停止Extract 或者 Replicat 进程
4. 执行删除操作
DELETE EXTRACT group_name
DELETE REPLICAT group_name
SQL> alter database archivelog;
SQL> archive log list;
5.2 添加附加日志
SQL> alter database add supplemental log data;
5.3 强制日志
SQL> alter database force logging;
--确认修改:
SQL> select LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN,FORCE_LOGGING from v$database;
6.启用DDL支持
ogg可以配置支持ddl的同步,对ddl的支持是通过创建一些table来保存这些ddl的信息,并且有一些限制。
6.1.禁用recycel bin
SQL> alter system set recyclebin=off scope=spfile;
6.2. 创建存放DDL 信息的user并赋权
创建GG的表空间:(source和target端都要创建)
SQL> create tablespace ggs datafile '/oradata/ggs01.dbf' size 200m autoextend off;
这里的表空间不能自动扩展。ogg11g可以使用默认的user表空间,12c需要独立的表空间,否则报错。
SQL> create user ggs identified by ggs default tablespace ggs temporary tablespace temp;
SQL> grant connect,resource to ggs;
SQL> grant execute on utl_file to ggs;
退出oracle的所有session,然后用sysdba权限执行以下脚本
注意:要先进入/u01/ggs,再执行脚本
[oracle@ogg02 ggs]cd /u01/ggs
[oracle@ogg02 ggs] sqlplus / as sysdba
6.3执行脚本
(1)创建DDL标记表
SQL> @/u01/zt/marker_setup.sql; (这里会提示要输入ggs用户)
(2)将在数据库中创建捕获DDL语句的Trigger等必要组件 (这里会提示要输入ggs用户)
SQL> @/u01/zt/ddl_setup.sql;
注意:(1)执行时必须断开GGSCI连接,否则报错
(2)执行的时候不用选择操作类型了。在11g中需要选择initialsetup选项。
(3) 创建GGS_GGSUSER_ROLE角色 ( 这里会提示要输入ggs用户)
SQL> @/u01/zt/role_setup.sql;
(4) 授予给extract group参数中定义的userid用户
SQL> grant GGS_GGSUSER_ROLE to ggs;
(5) 启用ddl捕获触发器:
SQL> @/u01/zt/ddl_enable.sql;
还有两个可选的脚本,用来提高ddl复制性能:
@?/rdbms/admin/dbmspool ---创建DBMS_SHARED_POOL包
@/u01/ggs/ddl_pin.sql
--通过DBMS_SHARED_POOL.keep存储过程将DDLReplication相关对象keep在共享池中,保证这些对象不要reload,提升性能。
注意,在oracle 11.2.0.4 中需要配置;
SQL> alter system set enable_goldengate_replication=true;
System altered.
7.检查点表配置
goldengate 的检查点表示 目标端 的一个可选的配置,默认情况下,goldengate不会设置检查点表机制,而依耐于文件系统的保证,相对于后者,检查点表机制更可靠,且便于日常维护。
建议在首次配置目标库的时候,在全局变量中设置检查点表,并创建,这样做的话,以后所有的replicat进程默认情况下均会使用这个检查点表。
配置检查点表后,goldengate日常维护的操作区别在于,所有replicate进程的添加删除前均需要从ggsci中登录数据。
配置步骤如下:
1. 登录ggsci界面,在./GLOBALS文件里添加checkpoint表名
checkpointtable owner.table --指定的检查点记录表
2.连上db,创建checkpoint表
dblogin sourcedb dbname,userid db_user,password pw
add checkpointtable ggs.checkpoint --生成一个检查点记录表
这里不做配置,直接在后面测试中配置。
8.OGG单向复制测试
注意三点: (1)目标库的用户名和对象名称可以和源端不同,关键在于配置文件中能够正确匹配。
(2)配置源端和目标端tnsnames,保持互联互通。
(3)对于采用oralce asm的实例,还需要配置监听,使得goldengate能够连接到对应的asm实例上,访问redo日志。
可以通过lsnrctl status 命令查看监听器状态,看看能否找到asm实例的信息,默认情况下asm实例已经注册,信息类似
service "+ASM" has 1 instance(s)
8.1在source和target database 上创建测试用户
--source database
SQL> create user sender identified by oracle default tablespace users temporary tablespace temp; --创建用户
User created.
SQL> grant connect,resource,dba to sender;
Grant succeeded.
2. --target database
SQL> create user receiver identified by oracle default tablespace users temporary tablespace temp; --创建用户
User created.
SQL> grant connect,resource,dba to receiver;
Grant succeeded.
8.2在source和target上配置manager
cd/u01/ogg
ggsci
info all
edit params mgr --编辑manager参数
port 7809 --这里指定了端口,保存退出
start manager mgr --启动manager
8.3配置sourcedb的复制队列
8.3.1 连接到数据库,测试连接
dblogin userid ggs@ogg02,password ggs
8.3.2 增加一个抽取 添加 extract 进程
GGSCI (ogg1) 10> add extract ext1, tranlog, begin now
ext1 :是 extract进程名称
begin now: 从现在开始捕获事务日志
GGSCI (ogg1) 11> add exttrail/u01/zt/dirdat/lt, extract ext1
exttrail :trail 文件所在目录,以及命名规则;extract ext1
修改抽取进程ext1参数:
GGSCI (ogg1) 13> edit params ext1
extract ext1
userid ggs@ogg02, password ggs
rmthost 192.168.56.23, mgrport7809
rmttrail /u01/zt/dirdat/lt 本地
ddl include mapped objname sender.*; ddl 和 sender用户
table sender.*;
info all
8.4 配置targetdb 同步队列
8.4.11. 在Target 端添加checkpoint表
GGSCI (gg4) 6> edit params ./GLOBAL --在./GLOBAL文件里添加checkpoint表名
GGSCHEMA ggs --DDL同步必须指定,DML同步不需要
CHECKPOINTTABLE ggs.checkpoint --指定的检查点记录表
GGSCI (ogg4) 1> dblogin userid ggs@ogg04,password ggs --连上db
Successfully logged into database.
GGSCI (ogg4) 2> add checkpointtable ggs.checkpoint ----生成一个检查点记录表checkpoint
8.4.2 创建同步队列 (添加repliact进程)
GGSCI (ogg2) 3> add replicat rep1,exttrail/u01/zt/dirdat/lt, checkpointtable ggs.checkpoint
REPLICAT added.
GGSCI (ogg2) 4> edit params rep1
replicat rep1
ASSUMETARGETDEFS
userid ggs@ogg04,password ggs
discardfile /u01/zt/dirdat/rep1_discard.txt,append, megabytes100 --megabytes100单个trail文件100M
ddl
map sender.*, target receiver.*;
sender 用户下的表,映射到target receiver用户下
discardfile : 同步不了的数据,放到 /u01/ggs/dirdat/rep1_discard.txt
8.5 开启同步
8.5.1 sourcedb:
info all
start extract ext1
into all
8.5.2 targetdb
info all
start replicat rep1
info all
8.6 测试data复制
我们在sourcedb 上 的sender用户下创建一张表,然后看这张表是否同步到了target db的receiver用户下。
sourcedb
conn sender/oracle;
create table zw as select * from sys.all_users;
targetdb
conn receiver/oracle;
select count(*) from zw;
数据同步过来了,因为我们启用了ddl的支持。
删除的步骤如下:
1. 登陆GGSCI
2. 用dblogin 登陆数据库。
3. 停止Extract 或者 Replicat 进程
4. 执行删除操作
DELETE EXTRACT group_name
DELETE REPLICAT group_name
0 0
- 第二章:安装ogg&单向复制测试(典型的配置)
- 【OGG】OGG的单向复制配置-支持DDL(二)
- 【OGG】OGG的单向DML复制配置(一)
- 【Oracle】OGG单向复制配置
- (一)OGG的安装与配置,并实现单向DML复制操作
- 一次完整的单向dml复制OGG配置
- OGG实战 单向复制
- ogg单向DDL复制
- OGG单向复制搭建
- MYSQL手把手教你安装和配置OGG,并实现单向DML复制技术
- OGG配置DML单向复制一例及错误分析
- Oracle GoldenGate学习之windows下ogg单向复制配置
- Oracle GoldenGate学习之windows下ogg单向复制配置
- Oracle GoldenGate学习之windows下ogg单向复制配置
- OGG学习笔记02-单向复制配置实例
- OGG单向复制(支持DDL)
- OGG单向复制(支持DDL复制)
- ogg单向DML同步配置
- java pgAdmin数据库连接
- 黑马程序员-IO(二)
- 基于mob平台,手机短信验证码实现登录功能
- Android实战简易教程-第十八枪(ViewPager组件详解)
- JQuery常用的几种显示隐藏的方法
- 第二章:安装ogg&单向复制测试(典型的配置)
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- 黑马程序员-File类+递归的简单应用
- 移动端select菜单无法修改默认样式
- 杭电ACM 动态规划 1 数塔
- 05-图3. 六度空间 (30)
- 数据库Number类型的学习
- ShareSDK
- JPA 存储过程 事务 statement is closed.