ogg根據scn同步數據,源庫零停機時間
本次實驗與上次的區別:更加注重細節,幾乎包含所有步驟,把我越到的坑都作出了說明。並且同步是由10g向11g進行同步,更加符合升級遷移需求。
如下是主要步驟:
1. 配置好ogg源端的mgr、抓取和傳送進程,並啟動。
2. 配置好ogg目標端的mgr、復制進程,僅啟動mgr。
3. 源端可自由進行交易,此時觀察源與目標的trail文件是否都正常。
4. 查詢源端此時的scn,並按照參數flashbask_scn進行expdp。
5. 目標端impdp導入。
6. 目標端start replicat xxx,aftercsn xxxxx
GoldenGate重要進程介紹:
1、Manager管理進程在兩端開啟,監控和重啟其他進程;分配數據存儲和報告錯誤及事件;
2、Extract進程從日志中抓取並傳輸到target端事務數據;
3、Server Collector進程在target(接受)端接受數據並寫入trail文件;
4、Replicat進程讀取trail文件,並應用到traget數據庫;
5、trail文件時gg自己抓捕信息的文件,是一個OS文件,存放在./dirdat/下,以X00000命名,N順序1,2,3…此文件用完可配置參數自動刪除。
一、環境准備並安裝GoldenGate
1. 數據庫准備情況
1) 源服務器
hostname:ogg1
IP地址:192.168.100.133
數據庫:10.2.0.5.0 64 bit
SID: super
操作系統版本:redhat5.5 64 bit
ogg版本:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
2) 目標服務器
hostname:ogg2
IP地址:192.168.100.130
數據庫:11.2.0.4.0 64 bit
SID: test
操作系統版本:redhat5.5 64 bit
ogg版本:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
2. 創建用戶、下載OGG軟件並解壓安裝
ogg1:
[root@ogg1 ~]# mkdir /ogg [root@ogg1 ~]# useradd -g oinstall -G dba ggs [root@ogg1 ~]# passwd ggs [root@ogg1 ~]# su - ggs [ggs@ogg1 ~]$ id uid=1001(ggs) gid=1000(oinstall) groups=1000(oinstall),1001(dba) [ggs@ogg1 ~]$ exit logout [root@ogg1 ~]# chown -R ggs:oinstall /ogg [root@ogg1 ogg]# unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip [root@ogg1 ogg]# tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /ogg [root@ogg1 ogg]# chown -R ggs:oinstall /ogg
ogg2:
[root@ogg2 ~]# useradd -g oinstall -G dba ggs [root@ogg2 ~]# passwd ggs [root@ogg2 ~]# mkdir /ogg [root@ogg2 ~]# chown -R ggs:oinstall /ogg [root@ogg2 ogg]# unzip ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip [root@ogg2 ogg]# tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /ogg [root@ogg2 ogg]# chown -R ggs:oinstall /ogg
3. 准備OGG環境變量
#源服務器、與目標服務器都要配置
$ vi /home/ggs/.bash_profile
#源端ggs增加如下行:
export PATH export ORACLE_BASE=/u01 export ORACLE_HOME=$ORACLE_BASE/product/10.2.0 export ORACLE_SID=super export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/ogg:/usr/local/lib:/usr/X11R6/lib export LD_LIBRARY_PATH_64=$ORACLE_HOME/lib
$ vi /home/ggs/.bash_profile
#目標端ggs增加如下行:
export PATH export ORACLE_BASE=/u01 export ORACLE_HOME=$ORACLE_BASE/product/11.2.0 export ORACLE_SID=test export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/ogg
4. 配置日志模式
#目標服務器不用配置(非雙向)
1) 查看規檔與日志模式
sqlplus / as sysdba select log_mode,supplemental_log_data_min,force_logging from v$database; LOG_MODE SUPPLEME FOR ------------ -------- --- NOARCHIVELOG NO NO
2) 配置為規檔模式
shutdown immediate; startup mount; alter database archivelog; alter database open; alter system set log_archive_dest_1='location=/u01/archive' scope=both;
3) 配置日志模式(打開強制規檔與補充日志模式)
alter database add supplemental log data; alter database force logging;
4)查看配置結果:
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database; LOG_MODE SUPPLEME FOR ------------ -------- --- ARCHIVELOG YES YES
5. 創建GoldenGate用戶帳號
1) 源服務器
su - oracle sqlplus /nolog conn / as sysdba; create tablespace ogg datafile '/u01/oradata/super/ogg.dbf' size 10m autoextend on next 10m; create user ggs identified by ggs default tablespace ogg temporary tablespace TEMP quota unlimited on ogg; grant connect,resource to ggs; grant create session,alter session to ggs; grant select any dictionary,select any table to ggs; grant alter any table to ggs; grant flashback any table to ggs; grant execute on dbms_flashback to ggs; 或直接grant dba to ggs;
2) 目標服務器
su - oracle sqlplus /nolog conn / as sysdba; create tablespace ogg datafile '/u01/oradata/test/ogg.dbf' size 10m autoextend on next 10m; create user ggs identified by ggs default tablespace ogg temporary tablespace TEMP quota unlimited on ogg; grant connect,resource to ggs; grant create session,alter session to ggs; grant select any dictionary,select any table to ggs; grant alter any table to ggs; grant flashback any table to ggs; grant execute on dbms_flashback to ggs; grant insert any table to ggs; grant delete any table to ggs; grant update any table to ggs; 或直接grant dba to ggs;
6. 安裝GoldenGate軟件
(1) 源服務器、與目標服務器都要配置
源服務器因為是10g,ogg存在依賴包的問題:
[root@ogg1 ogg]$ su - ggs [ggs@ogg1 ogg]$ cd /ogg [ggs@ogg1 ogg]$ ./ggsci #發現ggsci進不去 ./ggsci: error while loading shared libraries: libnnz11.so: cannot open shared object file: No such file or directory [ggs@ogg1 ogg]$ ldd ggsci #檢查依賴包,發現缺少兩個11g的包 libdl.so.2 => /lib64/libdl.so.2 (0x0000003d9b600000) libgglog.so => /ogg/libgglog.so (0x00002b8bd05ca000) libggrepo.so => /ogg/libggrepo.so (0x00002b8bd07ff000) libdb-5.2.so => /ogg/libdb-5.2.so (0x00002b8bd0954000) libicui18n.so.38 => /ogg/libicui18n.so.38 (0x00002b8bd0bf5000) libicuuc.so.38 => /ogg/libicuuc.so.38 (0x00002b8bd0f55000) libicudata.so.38 => /ogg/libicudata.so.38 (0x00002b8bd128f000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003d9ba00000) libxerces-c.so.28 => /ogg/libxerces-c.so.28 (0x00002b8bd226b000) libantlr3c.so => /ogg/libantlr3c.so (0x00002b8bd2783000) libnnz11.so => not found libclntsh.so.11.1 => not found libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003dad400000) libm.so.6 => /lib64/libm.so.6 (0x0000003d9b200000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003daa400000) libc.so.6 => /lib64/libc.so.6 (0x0000003d9ae00000) /lib64/ld-linux-x86-64.so.2 (0x0000003d9aa00000) 在服務器中找不到11g的包: [root@ogg1 ogg]# find / -name libnnz11.so [root@ogg1 ogg]# find / -name libnnz10.so /u01/product/10.2.0/lib/libnnz10.so /u01/product/10.2.0/lib32/libnnz10.so [root@ogg1 ogg]# find / -name libclntsh.so.11.1 [root@ogg1 ogg]# find / -name libclntsh.so.10.1 /u01/product/10.2.0/lib/libclntsh.so.10.1 /u01/product/10.2.0/lib32/libclntsh.so.10.1 此時需要做兩個軟連接: [oracle@ogg1 lib]$ ln -s /u01/product/10.2.0/lib/libnnz10.so libnnz11.so [oracle@ogg1 lib]$ ln -s /u01/product/10.2.0/lib/libclntsh.so.10.1 libclntsh.so.11.1
此時可以源端進入ggsci:
[root@ogg1 ogg]# su - ggs [ggs@ogg1 ~]$ cd /ogg [ggs@ogg1 ogg]$ ./ggsci Oracle GoldenGate Command Interpreter for Oracle Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14 Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved. GGSCI (ogg1) 1> create subdirs Creating subdirectories under current directory /ogg Parameter files /ogg/dirprm: already exists Report files /ogg/dirrpt: created Checkpoint files /ogg/dirchk: created Process status files /ogg/dirpcs: created SQL script files /ogg/dirsql: created Database definitions files /ogg/dirdef: created Extract data files /ogg/dirdat: created Temporary files /ogg/dirtmp: created Stdout files /ogg/dirout: created
(2) 目標服務器都要配置
[root@ogg2 ogg]# su - ggs [ggs@ogg2 ~]$ cd /ogg [ggs@ogg2 ogg]$ ./ggsci Oracle GoldenGate Command Interpreter for Oracle Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO Linux, x64, 64bit (optimized), Oracle 11g on Apr 23 2012 08:32:14 Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved. GGSCI (ogg2) 1> create subdirs Creating subdirectories under current directory /ogg Parameter files /ogg/dirprm: already exists Report files /ogg/dirrpt: created Checkpoint files /ogg/dirchk: created Process status files /ogg/dirpcs: created SQL script files /ogg/dirsql: created Database definitions files /ogg/dirdef: created Extract data files /ogg/dirdat: created Temporary files /ogg/dirtmp: created Stdout files /ogg/dirout: created
(3)此時在源端scott下創建了兩張測試表test1與test2(必須有主鍵):
SQL> conn scott/tiger Connected. SQL> create table test1 (id number); Table created. SQL> create table test2 (name varchar2(20)); Table created. SQL> insert into test1 values (1); 1 row created. SQL> insert into test1 values (2); 1 row created. SQL> insert into test1 values (3); 1 row created. SQL> commit; Commit complete. SQL> alter table test1 add constraints pk_test1 primary key(id); Table altered. SQL> alter table test2 add constraints pk_test2 primary key(name); Table altered. SQL> insert into test2 values('xijinping'); 1 row created. SQL> insert into test2 values('likeqiang'); 1 row created. SQL> insert into test2 values('batman'); 1 row created. SQL> commit; Commit complete.
二、 GoldenGate DML同步源端配置
1. 源MGR進程
1) 編輯mgr程組
edit params mgr
port 7809 dynamicportlist 7800-7899 autorestart extract *,retries 5,waitminutes 2 purgeoldextracts ./dirdat/*,usecheckpoints,minkeepdays 7 lagreporthours 1 laginfominutes 30 lagcriticalminutes 45
說明:
port 指定mgr進程通信端口
dynamicportlist 表示mgr進程可以為源與目的端動態通信指定端口
autorestart extract 表示自動重啟extract進程組,每2分鍾嘗試重啟所有進程,重試5次。
配置參數后,重啟mgr進程生效
purgeoldextracts xxx,usercheckpoints,minkeepdays x表示trail文件會保留7天,ogg會根據checkpoint刪除使用過的trail文件。
lagreporthours 1 每隔1小時檢查一次extract和replicat的lag。
laginfominutes 30 如果lag超過規定的值(lagcritical),會報錯critical。如果沒問題,會每30分鍾報告信息。
lagcriticalminutes 45 會每隔45分鍾報告critical信息。
2) 啟動主管理進程
GGSCI (ogg1) 3> start mgr
Manager started.
GGSCI (ogg1) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
2. 配置Extract進程組
1)GGSCI (ogg1) 5> edit params test_ext
GGSCI (ogg1) 6> view param test_ext
extract test_ext dynamicresolution setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) userid ggs,password ggs exttrail /ogg/dirdat/te table scott.*;
2) 添加抽取進程
GGSCI (ogg1) 7> add extract test_ext,tranlog,begin now
EXTRACT added.
3) 添加本地trail文件,源extract進程負責寫這部分文件,pump負責把這部分文件傳到目標服務器端。
GGSCI (ogg1) 8> add exttrail /ogg/dirdat/te,extract test_ext
EXTTRAIL added.
GGSCI (ogg1) 9> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
EXTRACT STOPPED TEST_EXT 00:00:00 00:00:39
說明:
extract eora定義extract進程名字
dynamicresolution
setenv設置環境變量
userid 登錄數據庫
exttrail指定本地trail文件地址
table 定義同步的表
4) 啟動服務
GGSCI (ogg1) 16> start extract test_ext
Sending START request to MANAGER ...
EXTRACT TEST_EXT starting
GGSCI (ogg1) 17> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING TEST_EXT 00:03:07 00:00:00
此時觀察dirdat目錄,可以發現抽取的文件:
[root@ogg1 dirdat]# pwd
/ogg/dirdat
[root@ogg1 dirdat]# ll
總計 4
-rw-rw-rw- 1 ggs oinstall 988 07-08 21:09 te000000
3. 配置Pump進程組
1) 編輯配置文件
edit params test_p
extract test_p dynamicresolution passthru rmthost 192.168.100.130,mgrport 7809,compress rmttrail /ogg/dirdat/tp table scott.*;
2) 添加pump進程
GGSCI (ogg1) 21> add extract test_p,exttrailsource /ogg/dirdat/te
EXTRACT added.
3) 添加遠程trail文件
GGSCI (ogg1) 22> add rmttrail /ogg/dirdat/tp,extract test_p
RMTTRAIL added.
4) 啟動pump進程
GGSCI (ogg1) 23> start extract test_p
Sending START request to MANAGER ...
EXTRACT TEST_P starting
GGSCI (ogg1) 24> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING TEST_EXT 00:00:00 00:00:02
EXTRACT RUNNING TEST_P 00:00:00 00:00:58
三、 GoldenGate DML同步目標端配置
1. 目標端MGR進程
1) 編輯配置文件
GGSCI (ogg2) 1> view param mgr
port 7809 dynamicportlist 7800-7899 purgeoldextracts /ogg/dirdat/*, usecheckpoints, minkeepdays 3
2) 啟動
GGSCI (ogg2) 2> start mgr
Manager started.
GGSCI (ogg2) 3> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
GGSCI (ogg2) 4> exit
此時在目標端的dirdat中可以看到由源端傳送過來的trail文件(如果沒出現,可以在源端做幾個事務即可,做完事務還沒出現,那么就是配置有問題,好好檢查源端pump和目標端mgr)
[root@ogg2 dirdat]# ll
總計 4
-rw-rw-rw- 1 ggs oinstall 1634 07-08 21:45 tp000000
2. 添加檢查表
說明: 當我們在GLOBALS 文件里指定了默認的checkpoint 之后,新的Replicat groups 在創建時會自動使用這個參數,不需要其他指令
1) 目標端編輯全局配置文件
edit params ./GLOBALS
CHECKPOINTTABLE ggs.checkpoint
2)exit #這里需要退出ggsci終端
3) 添加checkpoint表
[ggs@ogg2 ogg]$ ./ggsci
GGSCI (ogg2) 1> dblogin userid ggs,password ggs
Successfully logged into database.
GGSCI (ogg2) 2> add checkpointtable ggs.checkpoint
Successfully created checkpoint table ggs.checkpoint.
切換到數據庫下,可以看到checkpoint表
SQL> conn ggs/ggs Connected. SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- CHECKPOINT TABLE CHECKPOINT_LOX TABLE
3. 配置目標端replicat進程組
1) 編輯配置文件
edit params test_r
replicat test_r userid ggs,password ggs assumetargetdefs reperror default,discard discardfile /ogg/dirrpt/test_r.desc dynamicresolution map scott.*;target scott.*;
2) 添加復制進程,此時不要啟動進程
GGSCI (ogg2) 4> add replicat test_r,exttrail /ogg/dirdat/tp,checkpointtable ggs.checkpoint
REPLICAT added.
GGSCI (ogg2) 5> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT STOPPED TEST_R 00:00:00 00:00:14
四、查詢源scn,將源數據導入目標庫
1.源庫按照scn導入到目標庫
此時源端的數據:
SQL> conn scott/tiger Connected. SQL> select * from test1; ID ---------- 1 2 3 SQL> select * from test2; NAME -------------------- batman likeqiang superman xijinping 此時源端的scn SQL> select current_scn from v$database; CURRENT_SCN ----------- 402721
按照scn導出schema:
[oracle@ogg1 dump]$ expdp system/oracle directory=dump dumpfile=scott.dmp schemas=scott flashback_scn=402721

Export: Release 10.2.0.5.0 - 64bit Production on Tuesday, 08 July, 2014 21:36:31 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options FLASHBACK automatically enabled to preserve database integrity. Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** directory=dump dumpfile=scott.dmp schemas=scott flashback_scn=402721 Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 320 KB Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT . . exported "SCOTT"."DEPT" 5.656 KB 4 rows . . exported "SCOTT"."EMP" 7.820 KB 14 rows . . exported "SCOTT"."SALGRADE" 5.585 KB 5 rows . . exported "SCOTT"."TEST1" 4.929 KB 3 rows . . exported "SCOTT"."TEST2" 4.960 KB 4 rows . . exported "SCOTT"."BONUS" 0 KB 0 rows Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is: /dump/scott.dmp Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 21:36:59
源端模擬生產環境做出交易:
SQL> conn scott/tiger Connected. SQL> insert into test1 values(4); 1 row created. SQL> commit; Commit complete. SQL> insert into test2 values('michael'); 1 row created. SQL> commit; Commit complete.
傳送至目標端:
[root@ogg1 dump]# scp scott.dmp 192.168.100.130:/dump
root@192.168.100.130's password:
scott.dmp 100% 256KB 256.0KB/s 00:00
目標端倒入:
[root@ogg2 dump]# su - oracle
[oracle@ogg2 ~]$ cd /dump
[oracle@ogg2 dump]$ impdp system/oracle directory=dump dumpfile=scott.dmp

Import: Release 11.2.0.4.0 - Production on 星期二 7月 8 21:43:08 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加載/卸載了主表 "SYSTEM"."SYS_IMPORT_FULL_01" 啟動 "SYSTEM"."SYS_IMPORT_FULL_01": system/******** directory=dump dumpfile=scott.dmp 處理對象類型 SCHEMA_EXPORT/USER 處理對象類型 SCHEMA_EXPORT/SYSTEM_GRANT 處理對象類型 SCHEMA_EXPORT/ROLE_GRANT 處理對象類型 SCHEMA_EXPORT/DEFAULT_ROLE 處理對象類型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 處理對象類型 SCHEMA_EXPORT/TABLE/TABLE 處理對象類型 SCHEMA_EXPORT/TABLE/TABLE_DATA . . 導入了 "SCOTT"."DEPT" 5.656 KB 4 行 . . 導入了 "SCOTT"."EMP" 7.820 KB 14 行 . . 導入了 "SCOTT"."SALGRADE" 5.585 KB 5 行 . . 導入了 "SCOTT"."TEST1" 4.929 KB 3 行 . . 導入了 "SCOTT"."TEST2" 4.960 KB 4 行 . . 導入了 "SCOTT"."BONUS" 0 KB 0 行 處理對象類型 SCHEMA_EXPORT/TABLE/INDEX/INDEX 處理對象類型 SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 處理對象類型 SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS 處理對象類型 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT 作業 "SYSTEM"."SYS_IMPORT_FULL_01" 已於 星期二 7月 8 21:43:26 2014 elapsed 0 00:00:17 成功完成
2.驗證目標庫數據
此時的倒入的數據是源庫scn=402721時刻
SQL> conn scott/tiger 已連接。 SQL> select * from test1; ID ---------- 1 2 3 SQL> select * from test2; NAME ------------------------------------------------------------ batman likeqiang superman xijinping
3.源庫再次做出交易
SQL> insert into test1 values(5); 1 row created. SQL> commit; Commit complete. SQL> insert into test2 values('jackson'); 1 row created. SQL> commit; Commit complete.
此時原庫的trail文件te和目標庫的trail文件tp應當都出現了贈長:
[root@ogg1 dirdat]# ll
總計 4
-rw-rw-rw- 1 ggs oinstall 1611 07-08 21:44 te000000
[root@ogg2 dirdat]# ll
總計 4
-rw-rw-rw- 1 ggs oinstall 1634 07-08 21:45 tp000000
4.啟動replicat(aftercsn)
GGSCI (ogg2) 9> start replicat test_r,aftercsn 402721
Sending START request to MANAGER ...
REPLICAT TEST_R starting
GGSCI (ogg2) 10> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING TEST_R 00:00:00 00:00:00
5.驗證目標庫數據
SQL> conn scott/tiger 已連接。 SQL> select * from test1; ID ---------- 1 2 3 4 5 SQL> select * from test2; NAME ------------------------------------------------------------ batman jackson likeqiang michael superman xijinping 已選擇6行。