@@ -20,6 +20,7 @@ type OracleConfig struct {
20
20
}
21
21
22
22
type OracleDB struct {
23
+ ctx context.Context
23
24
_db * sql.DB
24
25
LogMinerConn * sql.Conn
25
26
MetaDataConn * sql.Conn
@@ -42,7 +43,7 @@ func OpenDb(meta *OracleConfig) (*sql.DB, error) {
42
43
return sqlDb , nil
43
44
}
44
45
45
- func NewDB (meta * OracleConfig ) (* OracleDB , error ) {
46
+ func NewDB (ctx context. Context , meta * OracleConfig ) (* OracleDB , error ) {
46
47
sqlDB , err := OpenDb (meta )
47
48
if err != nil {
48
49
return nil , err
@@ -51,13 +52,16 @@ func NewDB(meta *OracleConfig) (*OracleDB, error) {
51
52
if err != nil {
52
53
return nil , err
53
54
}
54
- oracleDB := & OracleDB {_db : sqlDB }
55
+ oracleDB := & OracleDB {
56
+ ctx : ctx ,
57
+ _db : sqlDB ,
58
+ }
55
59
56
- oracleDB .LogMinerConn , err = sqlDB .Conn (context . TODO () )
60
+ oracleDB .LogMinerConn , err = sqlDB .Conn (ctx )
57
61
if err != nil {
58
62
return nil , fmt .Errorf ("error on get connection:%v" , err )
59
63
}
60
- oracleDB .MetaDataConn , err = sqlDB .Conn (context . TODO () )
64
+ oracleDB .MetaDataConn , err = sqlDB .Conn (ctx )
61
65
if err != nil {
62
66
return nil , fmt .Errorf ("error on get connection:%v" , err )
63
67
}
@@ -76,7 +80,7 @@ func (o *OracleDB) Close() error {
76
80
77
81
func (o * OracleDB ) CurrentRedoLogSequenceFp () (string , error ) {
78
82
query := `SELECT GROUP#, THREAD#, SEQUENCE# FROM V$LOG WHERE STATUS = 'CURRENT'`
79
- rows , err := o .LogMinerConn .QueryContext (context . TODO () , query )
83
+ rows , err := o .LogMinerConn .QueryContext (o . ctx , query )
80
84
if err != nil {
81
85
return "" , err
82
86
}
@@ -101,12 +105,12 @@ func (o *OracleDB) CurrentRedoLogSequenceFp() (string, error) {
101
105
// reset date/timestamp format
102
106
func (o * OracleDB ) NLS_DATE_FORMAT () error {
103
107
SQL_ALTER_DATE_FORMAT := `ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS'`
104
- _ , err := o .LogMinerConn .ExecContext (context . TODO () , SQL_ALTER_DATE_FORMAT )
108
+ _ , err := o .LogMinerConn .ExecContext (o . ctx , SQL_ALTER_DATE_FORMAT )
105
109
if err != nil {
106
110
return err
107
111
}
108
112
NLS_TIMESTAMP_FORMAT := "ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'SYYYY-MM-DD HH24:MI:SS.FF6'"
109
- _ , err = o .LogMinerConn .ExecContext (context . TODO () , NLS_TIMESTAMP_FORMAT )
113
+ _ , err = o .LogMinerConn .ExecContext (o . ctx , NLS_TIMESTAMP_FORMAT )
110
114
if err != nil {
111
115
return err
112
116
}
126
130
WHERE
127
131
owner = '%s'` , asOfSCN , schema )
128
132
129
- rows , err := o .MetaDataConn .QueryContext (context . TODO () , query )
133
+ rows , err := o .MetaDataConn .QueryContext (o . ctx , query )
130
134
if err != nil {
131
135
return nil , err
132
136
}
@@ -157,7 +161,7 @@ func (o *OracleDB) GetSchemas() ([]string, error) {
157
161
WHERE
158
162
USERNAME NOT IN ( 'SYS', 'SYSTEM', 'ANONYMOUS', 'APEX_PUBLIC_USER', 'APEX_040000', 'OUTLN', 'XS$NULL', 'FLOWS_FILES', 'MDSYS', 'CTXSYS', 'XDB', 'HR' )` , asOfSCN )
159
163
160
- rows , err := o .MetaDataConn .QueryContext (context . TODO () , query )
164
+ rows , err := o .MetaDataConn .QueryContext (o . ctx , query )
161
165
if err != nil {
162
166
return nil , err
163
167
}
@@ -187,7 +191,7 @@ func (o *OracleDB) GetColumns(schema, table string) ([]string, error) {
187
191
AND owner = '%s'
188
192
ORDER BY COLUMN_ID` , asOfSCN , table , schema )
189
193
190
- rows , err := o .MetaDataConn .QueryContext (context . TODO () , query )
194
+ rows , err := o .MetaDataConn .QueryContext (o . ctx , query )
191
195
if err != nil {
192
196
return nil , err
193
197
}
@@ -206,11 +210,10 @@ func (o *OracleDB) GetColumns(schema, table string) ([]string, error) {
206
210
}
207
211
208
212
func (o * OracleDB ) GetTableDDL (schema , table string ) (string , error ) {
209
- ctx := context .TODO ()
210
- o .MetaDataConn .ExecContext (ctx , `begin dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', false); end;` )
211
- o .MetaDataConn .ExecContext (ctx , `begin dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', false); end;` )
212
- o .MetaDataConn .ExecContext (ctx , `begin dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', true); end;` )
213
- row := o .MetaDataConn .QueryRowContext (ctx , fmt .Sprintf (`
213
+ o .MetaDataConn .ExecContext (o .ctx , `begin dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'STORAGE', false); end;` )
214
+ o .MetaDataConn .ExecContext (o .ctx , `begin dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'SEGMENT_ATTRIBUTES', false); end;` )
215
+ o .MetaDataConn .ExecContext (o .ctx , `begin dbms_metadata.set_transform_param(DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', true); end;` )
216
+ row := o .MetaDataConn .QueryRowContext (o .ctx , fmt .Sprintf (`
214
217
SELECT dbms_metadata.get_ddl('TABLE','%s','%s') FROM dual` , table , schema ))
215
218
var query string
216
219
err := row .Scan (& query )
@@ -231,7 +234,7 @@ func (o *OracleDB) NewTx(ctx context.Context) (*sql.Tx, error) {
231
234
func (o * OracleDB ) GetCurrentSnapshotSCN () (int64 , error ) {
232
235
var globalSCN int64
233
236
// 获取当前 SCN 号
234
- err := o .MetaDataConn .QueryRowContext (context . TODO () , "SELECT CURRENT_SCN FROM V$DATABASE" ).Scan (& globalSCN )
237
+ err := o .MetaDataConn .QueryRowContext (o . ctx , "SELECT CURRENT_SCN FROM V$DATABASE" ).Scan (& globalSCN )
235
238
if err != nil {
236
239
return 0 , err
237
240
}
0 commit comments