采用OGG12.2同步MySQL5.7数据至Oracle11g
2023-06-13 09:16:45 时间
参考文档:
http://blog.itpub.net/31374736/viewspace-2871626/
https://www.codepeople.cn/2019/06/05/MySqltoOracle-ogg-conf/
测试实施:盛夏光年
第一步: 测试环境概述
实验环境 | 源端软件版本 | 目标端软件版本 |
---|---|---|
操作系统 | Red Hat Enterprise Linux Server release 6.5 | Red Hat Enterprise Linux Server release 6.5 |
IP地址 | 192.168.100.8 7809 | 192.168.100.8 7909 |
数据库版本 | 5.7.25-log MySQL Community Server (GPL) | Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 |
OGG管理用户 | oggtest/mysql | goldengate/Ora_1234 |
同步数据 | DEPT,EMP,SALGRADE(OGGTEST数据库) | DEPT,EMP,SALGRADE(OGGTEST用户) |
GoldenGate |
第二步:MySQL/Oracle安装部署
略
第三步:源端配置(MySQL)
1. 修改MySQL的配置文件my.cnf,mysql必须要要开启log-bin并且binlog必须为row模式。
binlog_format=ROW
log_bin=ON
log_bin_basename=/mysql/log/3306/binlog/studydb-binlog
log_bin_index=/mysql/log/3306/binlog/studydb-binlog.index
# enable binlog must set server-id, you can modify if there are multiple services
server-id=1
2. 创建测试数据
create database oggtest;
use oggtest;
create table DEPT (
DEPTNO int(2) not null,
DNAME varchar(14),
LOC varchar(13)
);
alter table DEPT add constraint PK_DEPT primary key (DEPTNO);
create table EMP (
EMPNO int(4) not null,
ENAME varchar(10),
JOB varchar(9),
MGR int(4),
HIREDATE date,
SAL int(7 ),
COMM int(7 ),
DEPTNO int(2)
);
alter table EMP add constraint PK_EMP primary key (EMPNO);
alter table EMP add constraint FK_DEPTNO foreign key (DEPTNO) references DEPT (DEPTNO);
insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');
insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');
insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');
insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
commit;
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7369, 'SMITH', 'CLERK', 7902, str_to_date('17-12-1980', '%d-%m-%Y'), 800, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7499, 'ALLEN', 'SALESMAN', 7698, str_to_date('20-02-1981', '%d-%m-%Y'), 1600, 300, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7521, 'WARD', 'SALESMAN', 7698, str_to_date('22-02-1981', '%d-%m-%Y'), 1250, 500, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7566, 'JONES', 'MANAGER', 7839, str_to_date('02-04-1981', '%d-%m-%Y'), 2975, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7654, 'MARTIN', 'SALESMAN', 7698, str_to_date('28-09-1981', '%d-%m-%Y'), 1250, 1400, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7698, 'BLAKE', 'MANAGER', 7839, str_to_date('01-05-1981', '%d-%m-%Y'), 2850, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7782, 'CLARK', 'MANAGER', 7839, str_to_date('09-06-1981', '%d-%m-%Y'), 2450, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7788, 'SCOTT', 'ANALYST', 7566, str_to_date('19-04-1987', '%d-%m-%Y'), 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7839, 'KING', 'PRESIDENT', null, str_to_date('17-11-1981', '%d-%m-%Y'), 5000, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7844, 'TURNER', 'SALESMAN', 7698, str_to_date('08-09-1981', '%d-%m-%Y'), 1500, 0, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7876, 'ADAMS', 'CLERK', 7788, str_to_date('23-05-1987', '%d-%m-%Y'), 1100, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7900, 'JAMES', 'CLERK', 7698, str_to_date('03-12-1981', '%d-%m-%Y'), 950, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7902, 'FORD', 'ANALYST', 7566, str_to_date('03-12-1981', '%d-%m-%Y'), 3000, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (7934, 'MILLER', 'CLERK', 7782, str_to_date('23-01-1982', '%d-%m-%Y'), 1300, null, 10);
commit;
CREATE TABLE salgrade (
grade INT PRIMARY KEY,
losal INT,
hisal INT
);
INSERT INTO salgrade VALUES(1,700,1200);
INSERT INTO salgrade VALUES(2,1201,1400);
INSERT INTO salgrade VALUES(3,1401,2000);
INSERT INTO salgrade VALUES(4,2001,3000);
INSERT INTO salgrade VALUES(5,3001,9999);
commit;
3. 创建同步用户
mysql> create user oggtest@'%' identified by 'mysql';
mysql> grant all privileges on oggtest.* to oggtest@'%';
mysql> flush privileges;
4. 源端ogg软件安装
mkdir -p /ogg/gg21c
tar -xvf ggs_Linux_x64_MySQL_64bit.tar
chown -R mysql:mysql /ogg/
cd /ogg/gg21c
./ggsci
create subdirs
GGSCI (performance) 2> create subdirs
Creating subdirectories under current directory /ogg/gg12c
Parameter files /ogg/gg12c/dirprm: created
Report files /ogg/gg12c/dirrpt: created
Checkpoint files /ogg/gg12c/dirchk: created
Process status files /ogg/gg12c/dirpcs: created
SQL script files /ogg/gg12c/dirsql: created
Database definitions files /ogg/gg12c/dirdef: created
Extract data files /ogg/gg12c/dirdat: created
Temporary files /ogg/gg12c/dirtmp: created
Credential store files /ogg/gg12c/dircrd: created
Masterkey wallet files /ogg/gg12c/dirwlt: created
Dump files /ogg/gg12c/dirdmp: created
5. 配置mgr管理进程
dblogin sourcedb oggtest@192.168.100.8:3306 userid oggtest password mysql
注释:oggtest这个是数据库库名称 userid 是指登录账号 password 是指登录密码
GGSCI (performance) 4> view param mgr
port 7809
dynamicportlist 7800-7900
purgeoldextracts ./dirdat/*,usecheckpoints, minkeepdays 7
6. 配置抽取进程
add extract e_mysql,tranlog,begin now
add exttrail ./dirdat/my,extract e_mysql,MEGABYTES 500
GGSCI (performance) 6> view param e_mysql
extract e_mysql
setenv (MYSQL_HOME="/mysql/app/mysql/")
tranlogoptions altlogdest /mysql/log/3306/binlog/studydb-binlog.index
sourcedb oggtest@192.168.100.8:3306, userid oggtest,password mysql
exttrail ./dirdat/my,FORMAT RELEASE 12.2
discardfile ./dirrpt/emy.dsc,append,megabytes 1024
dynamicresolution
gettruncates
TABLE oggtest.*;
注释:MYSQL_HOME是指你自己的MYSQL安装目录,FORMAT RELEASE 12.2是指支持的ogg版本是12.2可以删除。
7. 配置投递进程
ggsci-> ADD EXTRACT p_mysql, EXTTRAILSOURCE ./dirdat/my
ggsci-> ADD RMTTRAIL ./dirdat/or, EXTRACT p_mysql, MEGABYTES 500
GGSCI (performance) 8> view param p_mysql
extract p_mysql
rmthost 192.168.100.8,mgrport 7909
rmttrail ./dirdat/or
passthru
gettruncates
TABLE oggtest.*;
8. 异构平台配置defgen
root@performance dirprm# cat mydef.prm
defsfile ./dirdef/defgen.prm
sourcedb oggtest@192.168.100.8:3306 userid oggtest password mysql
TABLE oggtest.*;
./defgen paramfile dirprm/mydef.prm
将生成的def传送到目标端,ogg软件dirdef目录下,由于测试环境在一台机器,此处直接cp。
cp defgen.prm /oracleogg/gg12c/dirdef
第四步:目标端配置(Oracle)
1. ogg软件安装部署(略)
2. 创建测试用户,并同步源端测试数据
create user oggtest identified by Ora_1234 default tablespace TBS_OGG temporary tablespace TEMP quota unlimited on TBS_OGG;
--同步源端测试数据
DROP TABLE OGGTEST.DEPT;
CREATE TABLE OGGTEST.DEPT (
DEPTNO NUMBER(11,0) NOT NULL,
DNAME NVARCHAR2(14),
LOC NVARCHAR2(13)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 1048576
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
-- ----------------------------
-- RECORDS OF DEPT
-- ----------------------------
INSERT INTO OGGTEST.DEPT VALUES ('10', 'ACCOUNTING', 'NEW YORK');
INSERT INTO OGGTEST.DEPT VALUES ('20', 'RESEARCH', 'DALLAS');
INSERT INTO OGGTEST.DEPT VALUES ('30', 'SALES', 'CHICAGO');
INSERT INTO OGGTEST.DEPT VALUES ('40', 'OPERATIONS', 'BOSTON');
-- ----------------------------
-- TABLE STRUCTURE FOR EMP
-- ----------------------------
DROP TABLE OGGTEST.EMP;
CREATE TABLE OGGTEST.EMP (
EMPNO NUMBER(11,0) NOT NULL,
ENAME NVARCHAR2(10),
JOB NVARCHAR2(9),
MGR NUMBER(11,0),
HIREDATE DATE,
SAL NUMBER(11,0),
COMM NUMBER(11,0),
DEPTNO NUMBER(11,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 1048576
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
-- ----------------------------
-- RECORDS OF EMP
-- ----------------------------
INSERT INTO OGGTEST.EMP VALUES ('7369', 'SMITH', 'CLERK', '7902', TO_DATE('1980-12-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '800', NULL, '20');
INSERT INTO OGGTEST.EMP VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', TO_DATE('1981-02-20 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1600', '300', '30');
INSERT INTO OGGTEST.EMP VALUES ('7521', 'WARD', 'SALESMAN', '7698', TO_DATE('1981-02-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1250', '500', '30');
INSERT INTO OGGTEST.EMP VALUES ('7566', 'JONES', 'MANAGER', '7839', TO_DATE('1981-04-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '2975', NULL, '20');
INSERT INTO OGGTEST.EMP VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', TO_DATE('1981-09-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1250', '1400', '30');
INSERT INTO OGGTEST.EMP VALUES ('7698', 'BLAKE', 'MANAGER', '7839', TO_DATE('1981-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '2850', NULL, '30');
INSERT INTO OGGTEST.EMP VALUES ('7782', 'CLARK', 'MANAGER', '7839', TO_DATE('1981-06-09 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '2450', NULL, '10');
INSERT INTO OGGTEST.EMP VALUES ('7788', 'SCOTT', 'ANALYST', '7566', TO_DATE('1987-04-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '3000', NULL, '20');
INSERT INTO OGGTEST.EMP VALUES ('7839', 'KING', 'PRESIDENT', NULL, TO_DATE('1981-11-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '5000', NULL, '10');
INSERT INTO OGGTEST.EMP VALUES ('7844', 'TURNER', 'SALESMAN', '7698', TO_DATE('1981-09-08 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1500', '0', '30');
INSERT INTO OGGTEST.EMP VALUES ('7876', 'ADAMS', 'CLERK', '7788', TO_DATE('1987-05-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1100', NULL, '20');
INSERT INTO OGGTEST.EMP VALUES ('7900', 'JAMES', 'CLERK', '7698', TO_DATE('1981-12-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '950', NULL, '30');
INSERT INTO OGGTEST.EMP VALUES ('7902', 'FORD', 'ANALYST', '7566', TO_DATE('1981-12-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '3000', NULL, '20');
INSERT INTO OGGTEST.EMP VALUES ('7934', 'MILLER', 'CLERK', '7782', TO_DATE('1982-01-23 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), '1300', NULL, '10');
-- ----------------------------
-- TABLE STRUCTURE FOR SALGRADE
-- ----------------------------
DROP TABLE OGGTEST.SALGRADE;
CREATE TABLE OGGTEST.SALGRADE (
GRADE NUMBER(11,0) NOT NULL,
LOSAL NUMBER(11,0),
HISAL NUMBER(11,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 1048576
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
-- ----------------------------
-- RECORDS OF SALGRADE
-- ----------------------------
INSERT INTO OGGTEST.SALGRADE VALUES ('1', '700', '1200');
INSERT INTO OGGTEST.SALGRADE VALUES ('2', '1201', '1400');
INSERT INTO OGGTEST.SALGRADE VALUES ('3', '1401', '2000');
INSERT INTO OGGTEST.SALGRADE VALUES ('4', '2001', '3000');
INSERT INTO OGGTEST.SALGRADE VALUES ('5', '3001', '9999');
-- ----------------------------
-- PRIMARY KEY STRUCTURE FOR TABLE DEPT
-- ----------------------------
ALTER TABLE OGGTEST.DEPT ADD CONSTRAINT SYS_C006187 PRIMARY KEY (DEPTNO);
-- ----------------------------
-- CHECKS STRUCTURE FOR TABLE DEPT
-- ----------------------------
ALTER TABLE OGGTEST.DEPT ADD CONSTRAINT SYS_C006184 CHECK (DEPTNO IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- PRIMARY KEY STRUCTURE FOR TABLE EMP
-- ----------------------------
ALTER TABLE OGGTEST.EMP ADD CONSTRAINT SYS_C006189 PRIMARY KEY (EMPNO);
-- ----------------------------
-- CHECKS STRUCTURE FOR TABLE EMP
-- ----------------------------
ALTER TABLE OGGTEST.EMP ADD CONSTRAINT SYS_C006185 CHECK (EMPNO IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- INDEXES STRUCTURE FOR TABLE EMP
-- ----------------------------
CREATE INDEX OGGTEST.FK_DEPTNO
ON OGGTEST.EMP (DEPTNO ASC)
LOGGING
VISIBLE
PCTFREE 10
INITRANS 2
STORAGE (
INITIAL 1048576
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
);
-- ----------------------------
-- PRIMARY KEY STRUCTURE FOR TABLE SALGRADE
-- ----------------------------
ALTER TABLE OGGTEST.SALGRADE ADD CONSTRAINT SYS_C006188 PRIMARY KEY (GRADE);
-- ----------------------------
-- CHECKS STRUCTURE FOR TABLE SALGRADE
-- ----------------------------
ALTER TABLE OGGTEST.SALGRADE ADD CONSTRAINT SYS_C006186 CHECK (GRADE IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
3. 修改数据库参数并创建复制用户
create user goldengate identified by Ora_1234 default tablespace TBS_OGG temporary tablespace TEMP quota unlimited on TBS_OGG;
GRANT CONNECT TO GOLDENGATE;
GRANT ALTER ANY TABLE TO GOLDENGATE;
GRANT ALTER SESSION TO GOLDENGATE;
GRANT CREATE SESSION TO GOLDENGATE;
GRANT FLASHBACK ANY TABLE TO GOLDENGATE;
GRANT SELECT ANY DICTIONARY TO GOLDENGATE;
GRANT SELECT ANY TABLE TO GOLDENGATE;
GRANT RESOURCE TO GOLDENGATE;
GRANT DROP ANY TABLE TO GOLDENGATE;
GRANT DBA TO GOLDENGATE;
GRANT EXECUTE ON DBMS_FLASHBACK TO GOLDENGATE;
GRANT EXECUTE ON DBMS_FLASHBACK TO GOLDENGATE;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('GOLDENGATE');
参数修改:
alter system set enable_goldengate_replication=true;(11.2.0.4及以后版本)
如不设置复制进程将会挂起:
2022-06-02 17:50:54 ERROR OGG-02091 Oracle GoldenGate Delivery for Oracle, r_mysql.prm: Operation not supported because enable_goldengate_replication is not set to true.
2022-06-02 17:50:54 ERROR OGG-01668 Oracle GoldenGate Delivery for Oracle, r_mysql.prm: PROCESS ABENDING.
4. 配置mgr管理进程
dblogin userid goldengate,password Ora_1234
GGSCI (performance) 4> view param mgr
port 7909
dynamicportlist 7909-8000
purgeoldextracts ./dirdat/*,usecheckpoints, minkeepdays 7
5. 配置复制进程
ADD CHECKPOINTTABLE GOLDENGATE.CHKPTAB
add replicat r_mysql,exttrail ./dirdat/or,checkpointtable GOLDENGATE.CHKPTAB
GGSCI (performance) 2> view param r_mysql
replicat r_mysql
sourcedefs ./dirdef/defgen.prm
userid goldengate,password Ora_1234
reperror default,discard
discardfile ./dirrpt/repmy.dsc,append,megabytes 500
dynamicresolution
map oggtest.emp, target oggtest.emp;
map oggtest.dept, target oggtest.dept;
map oggtest.salgrade, target oggtest.salgrade;
第五步:启动所有OGG进程并检查状态
GGSCI (performance) 10> info all
---MySQL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING E_MYSQL 00:00:00 00:00:05
EXTRACT RUNNING P_MYSQL 00:00:00 00:00:06
GGSCI (performance as goldengate@orcl) 42> info all
---Oracle
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING R_MYSQL 00:00:00 00:00:03
第六步:验证同步是否正常
源端做增删改操作验证目标端数据是否同步变更:
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (10000, 'BIUBIUBIU', 'CLERK', 8888, str_to_date('18-08-1995', '%d-%m-%Y'), 2000, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (10086, 'YIDONG', 'DBA', 8889, str_to_date('16-06-1996', '%d-%m-%Y'), 3000, null, 40);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) values (10010, 'LIANTONG', 'Developer', 8890, str_to_date('18-08-1998', '%d-%m-%Y'), 4000, null, 10);
mysql> insert into dept values (50,'DBA','NANKING');
mysql> commit;
mysql> update dept set dname='TESTDBA' where deptno=50;
mysql> commit;
mysql> delete from dept where deptno=50;
mysql> commit;
至此:采用OGG12.2同步MySQL数据至Oracle实施完成。(测试环境仅供参考)
相关文章
- 11-Elasticsearch-logstash数据同步[Mysql->Logstash->Es]
- sqlserver表结构不同实现数据同步
- 多线程同步中sleep与wait区别详解编程语言
- Oracle数据定时同步实现提高效率(oracle定时同步数据)
- 进行MySQL查询与修改同步实现(mysql查询修改同时)
- 同步MySQL多服务器:构建完美的数据架构(mysql多服务器的同步)
- 利用 Oracle 快速实现表数据同步(oracle表数据同步)
- Redis分布式集群实现数据同步(redis集群数据同步)
- Redis同步命令:实现快速数据同步(redissync命令)
- Linux互斥锁:解决多线程同步问题(linux互斥锁使用)
- MySQL表格数据同步实战(mysql表数据同步)
- MySQL实现双主同步,实现数据永不掉线(mysql双主同步)
- 使用Linux下的btsync轻松实现数据同步(linuxbtsync)
- Oracle11g 闪回:快速恢复误删数据的秘诀(oracle11g闪回)
- MongoDB实现数据同步的优势(mongodb的数据同步)
- 如何跳过 MySQL 主从同步中的某些操作?(mysql主从跳过)
- Oracle11g 运行数据的活跃泵浦(oracle11g数据泵)
- 【SQL Server表数据同步实现指南】(sqlserver表同步)
- Mysql实现自动数据同步(mysql 自动同步)
- MySQL数据同步出现问题,无法实现互通(mysql不互通同步)
- 解决Redis集群间数据同步问题(redis集群间同步)
- 如何高效率利用Oracle实现数据同步(oracle中数据同步)
- 基于Redis实现远端服务器间数据同步(redis连服务器)
- 据同步实现Redis跨机房的数据同步(redis跨机房数)
- Redis计数建立同步数据的持久化(redis 计数与同步)
- 利用Oracle11g深入了解数据统计(oracle11g统计)
- Oracle11g数据棒打造高性能超级数据库(oracle11g数据棒)
- Oracle11g帮助你轻松导入数据(oracle11g导数据)
- node.js中的forEach()是同步还是异步呢