You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/05/05 08:53:44 UTC

[shardingsphere] branch master updated: Support alter database grammar (#10214)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new c5aa1e1  Support alter database grammar (#10214)
c5aa1e1 is described below

commit c5aa1e1399b7165135b0bdc1603f4cd61c19e4ca
Author: Zhu jun <zh...@163.com>
AuthorDate: Wed May 5 16:53:07 2021 +0800

    Support alter database grammar (#10214)
    
    * support alter database grammar
    
    * fix
    
    * add testcase
    
    * add end line
    
    * remove unuse
    
    * add database clause
    
    * fix review
    
    * trigger ci
---
 .../src/main/antlr4/imports/oracle/BaseRule.g4     |  72 +++++
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 | 289 ++++++++++++++++++
 .../src/main/antlr4/imports/oracle/Keyword.g4      |   4 +
 .../main/antlr4/imports/oracle/OracleKeyword.g4    | 338 ++++++++++++++++++++-
 .../sql/parser/autogen/OracleStatement.g4          |   1 +
 .../impl/OracleDDLStatementSQLVisitor.java         |   7 +
 .../statement/ddl/AlterDatabaseStatement.java}     |  46 +--
 .../oracle/ddl/OracleAlterDatabaseStatement.java}  |  43 +--
 .../src/main/resources/case/ddl/alter-database.xml |  14 +-
 .../src/main/resources/sql/supported/ddl/alter.xml |  14 +-
 10 files changed, 749 insertions(+), 79 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index ca9a23f..b301b43 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -526,3 +526,75 @@ hashSubpartitionQuantity
 odciParameters
     : identifier
     ;
+
+databaseName
+    : identifier
+    ;
+
+locationName
+    : STRING_
+    ;
+
+fileName
+    : STRING_
+    ;
+
+asmFileName
+    : STRING_
+    ;
+
+fileNumber
+    : NUMBER_
+    ;
+
+instanceName
+    : STRING_
+    ;
+
+logminerSessionName
+    : identifier
+    ;
+
+tablespaceGroupName
+    : identifier
+    ;
+
+copyName
+    : identifier
+    ;
+
+mirrorName
+    : identifier
+    ;
+
+uriString
+    : identifier
+    ;
+
+qualifiedCredentialName
+    : identifier
+    ;
+
+pdbName
+    : identifier
+    ;
+
+diskgroupName
+    : identifier
+    ;
+
+templateName
+    : identifier
+    ;
+
+aliasName
+    : identifier
+    ;
+
+domain
+    : identifier
+    ;
+
+dateValue
+    : dateTimeLiterals | stringLiterals | numberLiterals | expr
+    ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 41a2f80..5b46e0f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -1132,3 +1132,292 @@ rowArchivalVisibilityClause
 defaultCollationClause
     : DEFAULT_COLLATION EQ_ (collationName | NONE)
     ;
+
+alterDatabase
+    : ALTER databaseClauses
+    ( startupClauses
+    | recoveryClauses
+    | databaseFileClauses
+    | logfileClauses
+    | controlfileClauses
+    | standbyDatabaseClauses
+    | defaultSettingsClauses
+    | instanceClauses
+    | securityClause
+    | prepareClause
+    | dropMirrorCopy
+    | lostWriteProtection
+    | cdbFleetClauses
+    | propertyClause )
+    ;
+
+databaseClauses
+    : DATABASE databaseName | PLUGGABLE DATABASE pdbName
+    ;
+
+startupClauses
+    : MOUNT ((STANDBY | CLONE) DATABASE)?
+    | OPEN ((READ WRITE)? (RESETLOGS | NORESETLOGS)? (UPGRADE | DOWNGRADE)? | READ ONLY)
+    ;
+
+recoveryClauses
+    : generalRecovery | managedStandbyRecovery | BEGIN BACKUP | END BACKUP
+    ;
+
+generalRecovery
+    : RECOVER (AUTOMATIC)? (FROM locationName)? (
+      (fullDatabaseRecovery | partialDatabaseRecovery | LOGFILE fileName)
+      ((TEST | ALLOW NUMBER_ CORRUPTION | parallelClause)+)?
+    | CONTINUE DEFAULT?
+    | CANCEL
+    )
+    ;
+
+fullDatabaseRecovery
+    : STANDBY? DATABASE
+    ((UNTIL (CANCEL | TIME dateValue | CHANGE NUMBER_ | CONSISTENT)
+    | USING BACKUP CONTROLFILE
+    | SNAPSHOT TIME dateValue
+    )+)?
+    ;
+
+partialDatabaseRecovery
+    : TABLESPACE tablespaceName (COMMA_ tablespaceName)*
+    | DATAFILE (fileName | fileNumber) (COMMA_ (fileName | fileNumber))*
+    ;
+
+managedStandbyRecovery
+    : RECOVER (MANAGED STANDBY DATABASE
+    ((USING ARCHIVED LOGFILE | DISCONNECT (FROM SESSION)?
+    | NODELAY
+    | UNTIL CHANGE NUMBER_
+    | UNTIL CONSISTENT | USING INSTANCES (ALL | NUMBER_) | parallelClause)+
+    | FINISH | CANCEL)?
+    | TO LOGICAL STANDBY (databaseName | KEEP IDENTITY))
+    ;
+
+databaseFileClauses
+    : RENAME FILE fileName (COMMA_ fileName)* TO fileName
+    | createDatafileClause
+    | alterDatafileClause
+    | alterTempfileClause
+    | moveDatafileClause
+    ;
+
+createDatafileClause
+    : CREATE DATAFILE (fileName | fileNumber) (COMMA_ (fileName | fileNumber))*
+    ( AS (fileSpecification (COMMA_ fileSpecification)* | NEW))?
+    ;
+
+fileSpecification
+    : datafileTempfileSpec | redoLogFileSpec
+    ;
+
+datafileTempfileSpec
+    : (fileName | asmFileName )? (SIZE sizeClause)? REUSE? autoextendClause?
+    ;
+
+autoextendClause
+    : AUTOEXTEND (OFF | ON (NEXT sizeClause)? maxsizeClause?)
+    ;
+
+redoLogFileSpec
+    : ((fileName | asmFileName)
+    | LP_ (fileName | asmFileName) (COMMA_ (fileName | asmFileName))* RP_)?
+    (SIZE sizeClause)? (BLOCKSIZE sizeClause)? REUSE?
+    ;
+
+alterDatafileClause
+    : DATAFILE (fileName | NUMBER_) (COMMA_ (fileName | NUMBER_))*
+    (ONLINE | OFFLINE (FOR DROP)? | RESIZE sizeClause | autoextendClause | END BACKUP | ENCRYPT | DECRYPT)
+    ;
+
+alterTempfileClause
+    : TEMPFILE (fileName | NUMBER_) (COMMA_ (fileName | NUMBER_))*
+    (RESIZE sizeClause | autoextendClause | DROP (INCLUDING DATAFILES)? | ONLINE | OFFLINE)
+    ;
+
+logfileClauses
+    : ((ARCHIVELOG MANUAL? | NOARCHIVELOG )
+    | NO? FORCE LOGGING
+    | SET STANDBY NOLOGGING FOR (DATA AVAILABILITY | LOAD PERFORMANCE)
+    | RENAME FILE fileName (COMMA_ fileName)* TO fileName
+    | CLEAR UNARCHIVED? LOGFILE logfileDescriptor (COMMA_ logfileDescriptor)* (UNRECOVERABLE DATAFILE)?
+    | addLogfileClauses
+    | dropLogfileClauses
+    | switchLogfileClause
+    | supplementalDbLogging)
+    ;
+
+logfileDescriptor
+    : GROUP NUMBER_ | LP_ fileName (COMMA_ fileName)* RP_ | fileName
+    ;
+
+addLogfileClauses
+    : ADD STANDBY? LOGFILE
+    (((INSTANCE instanceName)? | (THREAD SQ_ NUMBER_ SQ_)?)
+    (GROUP NUMBER_)? redoLogFileSpec (COMMA_ (GROUP NUMBER_)? redoLogFileSpec)*
+    | MEMBER fileName REUSE? (COMMA_ fileName REUSE?)* TO logfileDescriptor (COMMA_ logfileDescriptor)*)
+    ;
+
+controlfileClauses
+    : CREATE ((LOGICAL | PHYSICAL)? STANDBY | FAR SYNC INSTANCE) CONTROLFILE AS fileName REUSE?
+    | BACKUP CONTROLFILE TO (fileName REUSE? | traceFileClause)
+    ;
+
+traceFileClause
+    : TRACE (AS fileName REUSE?)? (RESETLOGS | NORESETLOGS)?
+    ;
+
+dropLogfileClauses
+    : DROP STANDBY? LOGFILE
+    (logfileDescriptor (COMMA_ logfileDescriptor)*
+    | MEMBER fileName (COMMA_ fileName)*)
+    ;
+
+switchLogfileClause
+    : SWITCH ALL LOGFILES TO BLOCKSIZE NUMBER_
+    ;
+
+supplementalDbLogging
+    : (ADD | DROP) SUPPLEMENTAL LOG
+    ( DATA
+    | supplementalIdKeyClause
+    | supplementalPlsqlClause
+    | supplementalSubsetReplicationClause)
+    ;
+
+supplementalPlsqlClause
+    : DATA FOR PROCEDURAL REPLICATION
+    ;
+
+supplementalSubsetReplicationClause
+    : DATA SUBSET DATABASE REPLICATION
+    ;
+
+standbyDatabaseClauses
+    : ((activateStandbyDbClause
+    | maximizeStandbyDbClause
+    | registerLogfileClause
+    | commitSwitchoverClause
+    | startStandbyClause
+    | stopStandbyClause
+    | convertDatabaseClause) parallelClause?)
+    | (switchoverClause | failoverClause)
+    ;
+
+activateStandbyDbClause
+    : ACTIVATE (PHYSICAL | LOGICAL)? STANDBY DATABASE (FINISH APPLY)?
+    ;
+
+maximizeStandbyDbClause
+    : SET STANDBY DATABASE TO MAXIMIZE (PROTECTION | AVAILABILITY | PERFORMANCE)
+    ;
+
+registerLogfileClause
+    : REGISTER (OR REPLACE)? (PHYSICAL | LOGICAL)? LOGFILE fileSpecification (COMMA_ fileSpecification)* (FOR logminerSessionName)?
+    ;
+
+commitSwitchoverClause
+    : (PREPARE | COMMIT) TO SWITCHOVER
+    ( TO (((PHYSICAL | LOGICAL)? PRIMARY | PHYSICAL? STANDBY) ((WITH | WITHOUT) SESSION SHUTDOWN (WAIT | NOWAIT))?
+    | LOGICAL STANDBY)
+    | CANCEL
+    )?
+    ;
+
+startStandbyClause
+    : START LOGICAL STANDBY APPLY IMMEDIATE? NODELAY? (NEW PRIMARY dbLink | INITIAL scnValue? | (SKIP_SYMBOL FAILED TRANSACTION | FINISH))?
+    ;
+
+scnValue
+    : literals
+    ;
+
+stopStandbyClause
+    : (STOP | ABORT) LOGICAL STANDBY APPLY
+    ;
+
+switchoverClause
+    : SWITCHOVER TO databaseName (VERIFY | FORCE)?
+    ;
+
+convertDatabaseClause
+    : CONVERT TO (PHYSICAL | SNAPSHOT) STANDBY
+    ;
+
+failoverClause
+    : FAILOVER TO databaseName FORCE?
+    ;
+
+defaultSettingsClauses
+    : DEFAULT EDITION EQ_ editionName
+    | SET DEFAULT (BIGFILE | SMALLFILE) TABLESPACE
+    | DEFAULT TABLESPACE tablespaceName
+    | DEFAULT LOCAL? TEMPORARY TABLESPACE (tablespaceName | tablespaceGroupName)
+    | RENAME GLOBAL_NAME TO databaseName DO_ domain (DQ_ domain)*
+    | ENABLE BLOCK CHANGE TRACKING (USING FILE fileName REUSE?)?
+    | DISABLE BLOCK CHANGE TRACKING
+    | NO? FORCE FULL DATABASE CACHING
+    | CONTAINERS DEFAULT TARGET EQ_ (LP_ containerName RP_ | NONE)
+    | flashbackModeClause
+    | undoModeClause
+    | setTimeZoneClause
+    ;
+
+setTimeZoneClause
+    : SET TIME_ZONE EQ_ SQ_ ( (PLUS_ | MINUS_) dateValue  | timeZoneRegion ) SQ_
+    ;
+
+timeZoneRegion
+    : STRING_
+    ;
+
+flashbackModeClause
+    : FLASHBACK (ON | OFF)
+    ;
+
+undoModeClause
+    : LOCAL UNDO (ON | OFF)
+    ;
+
+moveDatafileClause
+    : MOVE DATAFILE LP_ (fileName | asmFileName | fileNumber) RP_
+    (TO LP_ (fileName | asmFileName) RP_ )? REUSE? KEEP?
+    ;
+
+instanceClauses
+    : (ENABLE | DISABLE) INSTANCE instanceName
+    ;
+
+securityClause
+    : GUARD (ALL | STANDBY | NONE)
+    ;
+
+prepareClause
+    : PREPARE MIRROR COPY copyName (WITH (UNPROTECTED | MIRROR | HIGH) REDUNDANCY)?
+    ;
+
+dropMirrorCopy
+    : DROP MIRROR COPY mirrorName
+    ;
+
+lostWriteProtection
+    : (ENABLE | DISABLE | REMOVE | SUSPEND)? LOST WRITE PROTECTION
+    ;
+
+cdbFleetClauses
+    : leadCdbClause | leadCdbUriClause
+    ;
+
+leadCdbClause
+    : SET LEAD_CDB EQ_  (TRUE | FALSE)
+    ;
+
+leadCdbUriClause
+    : SET LEAD_CDB_URI EQ_ uriString
+    ;
+
+propertyClause
+    : PROPERTY (SET | REMOVE) DEFAULT_CREDENTIAL EQ_ qualifiedCredentialName
+    ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/Keyword.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/Keyword.g4
index d9bf586..d87e9d4 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/Keyword.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/Keyword.g4
@@ -558,3 +558,7 @@ FLOAT
 TRIGGERS
     : T R I G G E R S
     ;
+
+GLOBAL_NAME
+    : G L O B A L UL_ N A M E
+    ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
index 0cc43af..950cb16 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
@@ -1430,7 +1430,7 @@ INDEXES
 SUPPLEMENTAL
     : S U P P L E M E N T A L
     ;
-    
+
 ADVISE
     : A D V I S E
     ;
@@ -1458,3 +1458,339 @@ ACTIVE
 DEFAULT_COLLATION
     : D E F A U L T UL_ C O L L A T I O N
     ;
+
+MOUNT
+    : M O U N T
+    ;
+
+STANDBY
+    : S T A N D B Y
+    ;
+
+CLONE
+    : C L O N E
+    ;
+
+RESETLOGS
+    : R E S E T L O G S
+    ;
+
+NORESETLOGS
+    : N O R E S E T L O G S
+    ;
+
+UPGRADE
+    : U P G R A D E
+    ;
+
+DOWNGRADE
+    : D O W N G R A D E
+    ;
+
+RECOVER
+    : R E C O V E R
+    ;
+
+LOGFILE
+    : L O G F I L E
+    ;
+
+TEST
+    : T E S T
+    ;
+
+CORRUPTION
+    : C O R R U P T I O N
+    ;
+
+CONTINUE
+    : C O N T I N U E
+    ;
+
+CANCEL
+    : C A N C E L
+    ;
+
+UNTIL
+    : U N T I L
+    ;
+
+CONTROLFILE
+    : C O N T R O L F I L E
+    ;
+
+SNAPSHOT
+    : S N A P S H O T
+    ;
+
+DATAFILE
+    : D A T A F I L E
+    ;
+
+MANAGED
+    : M A N A G E D
+    ;
+
+ARCHIVED
+    : A R C H I V E D
+    ;
+
+DISCONNECT
+    : D I S C O N N E C T
+    ;
+
+NODELAY
+    : N O D E L A Y
+    ;
+
+INSTANCES
+    : I N S T A N C E S
+    ;
+
+FINISH
+    : F I N I S H
+    ;
+
+LOGICAL
+    : L O G I C A L
+    ;
+
+FILE
+    : F I L E
+    ;
+
+SIZE
+    : S I Z E
+    ;
+
+AUTOEXTEND
+    : A U T O E X T E N D
+    ;
+
+BLOCKSIZE
+    : B L O C K S I Z E
+    ;
+
+OFFLINE
+    : O F F L I N E
+    ;
+
+RESIZE
+    : R E S I Z E
+    ;
+
+TEMPFILE
+    : T E M P F I L E
+    ;
+
+DATAFILES
+    : D A T A F I L E S
+    ;
+
+ARCHIVELOG
+    : A R C H I V E L O G
+    ;
+
+MANUAL
+    : M A N U A L
+    ;
+
+NOARCHIVELOG
+    : N O A R C H I V E L O G
+    ;
+
+AVAILABILITY
+    : A V A I L A B I L I T Y
+    ;
+
+PERFORMANCE
+    : P E R F O R M A N C E
+    ;
+
+CLEAR
+    : C L E A R
+    ;
+
+UNARCHIVED
+    : U N A R C H I V E D
+    ;
+
+UNRECOVERABLE
+    : U N R E C O V E R A B L E
+    ;
+
+THREAD
+    : T H R E A D
+    ;
+
+MEMBER
+    : M E M B E R
+    ;
+
+PHYSICAL
+    : P H Y S I C A L
+    ;
+
+FAR
+    : F A R
+    ;
+
+TRACE
+    : T R A C E
+    ;
+
+SWITCH
+    : S W I T C H
+    ;
+
+LOGFILES
+    : L O G F I L E S
+    ;
+
+PROCEDURAL
+    : P R O C E D U R A L
+    ;
+
+REPLICATION
+    : R E P L I C A T I O N
+    ;
+
+SUBSET
+    : S U B S E T
+    ;
+
+ACTIVATE
+    : A C T I V A T E
+    ;
+
+APPLY
+    : A P P L Y
+    ;
+
+MAXIMIZE
+    : M A X I M I Z E
+    ;
+
+PROTECTION
+    : P R O T E C T I O N
+    ;
+
+REGISTER
+    : R E G I S T E R
+    ;
+
+PREPARE
+    : P R E P A R E
+    ;
+
+SWITCHOVER
+    : S W I T C H O V E R
+    ;
+
+SHUTDOWN
+    : S H U T D O W N
+    ;
+
+FAILED
+    : F A I L E D
+    ;
+
+SKIP_SYMBOL
+    : S K I P
+    ;
+
+STOP
+    : S T O P
+    ;
+
+ABORT
+    : A B O R T
+    ;
+
+VERIFY
+    : V E R I F Y
+    ;
+
+CONVERT
+    : C O N V E R T
+    ;
+
+FAILOVER
+    : F A I L O V E R
+    ;
+
+BIGFILE
+    : B I G F I L E
+    ;
+
+SMALLFILE
+    : S M A L L F I L E
+    ;
+
+TRACKING
+    : T R A C K I N G
+    ;
+
+CACHING
+    : C A C H I N G
+    ;
+
+CONTAINERS
+    : C O N T A I N E R S
+    ;
+
+TARGET
+    : T A R G E T
+    ;
+
+UNDO
+    : U N D O
+    ;
+
+MOVE
+    : M O V E
+    ;
+
+MIRROR
+    : M I R R O R
+    ;
+
+COPY
+    : C O P Y
+    ;
+
+UNPROTECTED
+    : U N P R O T E C T E D
+    ;
+
+REDUNDANCY
+    : R E D U N D A N C Y
+    ;
+
+REMOVE
+    : R E M O V E
+    ;
+
+SUSPEND
+    : S U S P E N D
+    ;
+
+LOST
+    : L O S T
+    ;
+
+LEAD_CDB
+    : L E A D UL_ C D B
+    ;
+
+LEAD_CDB_URI
+    : L E A D UL_ C D B UL_ U R I
+    ;
+
+PROPERTY
+    : P R O P E R T Y
+    ;
+
+DEFAULT_CREDENTIAL
+    : D E F A U L T UL_ C R E D E N T I A L
+    ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
index efb4fa4..4fc06b8 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
@@ -48,5 +48,6 @@ execute
     | merge
     | alterSynonym
     | alterSession
+    | alterDatabase
     ) SEMI_?
     ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
index 8883587..c3a36f6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterD
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterIndexContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterSessionContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterSynonymContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDatabaseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterTableContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ColumnDefinitionContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ColumnNameContext;
@@ -58,6 +59,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
 import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterIndexStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterSessionStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterDatabaseStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterTableStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterSynonymStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateIndexStatement;
@@ -301,4 +303,9 @@ public final class OracleDDLStatementSQLVisitor extends OracleStatementSQLVisito
     public ASTNode visitAlterSession(final AlterSessionContext ctx) {
         return new OracleAlterSessionStatement();
     }
+
+    @Override
+    public ASTNode visitAlterDatabase(final AlterDatabaseContext ctx) {
+        return new OracleAlterDatabaseStatement();
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterDatabaseStatement.java
similarity index 57%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterDatabaseStatement.java
index efb4fa4..a1a2e6b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterDatabaseStatement.java
@@ -15,38 +15,18 @@
  * limitations under the License.
  */
 
-grammar OracleStatement;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.ddl;
 
-import Symbol, Comments, DMLStatement, DDLStatement, TCLStatement, DCLStatement, StoreProcedure;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
-execute
-    : (select
-    | insert
-    | update
-    | delete
-    | createTable
-    | alterTable
-    | dropTable
-    | truncateTable
-    | createIndex
-    | dropIndex
-    | alterIndex
-    | commit
-    | rollback
-    | setTransaction
-    | savepoint
-    | grant
-    | revoke
-    | createUser
-    | dropUser
-    | alterUser
-    | createRole
-    | dropRole
-    | alterRole
-    | setRole
-    | call
-    | merge
-    | alterSynonym
-    | alterSession
-    ) SEMI_?
-    ;
+/**
+ * Alter Database statement.
+ */
+@Getter
+@Setter
+@ToString
+public abstract class AlterDatabaseStatement extends AbstractSQLStatement implements DDLStatement {
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterDatabaseStatement.java
similarity index 57%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterDatabaseStatement.java
index efb4fa4..4108fdb 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterDatabaseStatement.java
@@ -15,38 +15,15 @@
  * limitations under the License.
  */
 
-grammar OracleStatement;
+package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
 
-import Symbol, Comments, DMLStatement, DDLStatement, TCLStatement, DCLStatement, StoreProcedure;
+import lombok.ToString;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterDatabaseStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
 
-execute
-    : (select
-    | insert
-    | update
-    | delete
-    | createTable
-    | alterTable
-    | dropTable
-    | truncateTable
-    | createIndex
-    | dropIndex
-    | alterIndex
-    | commit
-    | rollback
-    | setTransaction
-    | savepoint
-    | grant
-    | revoke
-    | createUser
-    | dropUser
-    | alterUser
-    | createRole
-    | dropRole
-    | alterRole
-    | setRole
-    | call
-    | merge
-    | alterSynonym
-    | alterSession
-    ) SEMI_?
-    ;
+/**
+ * Oracle alter database statement.
+ */
+@ToString
+public class OracleAlterDatabaseStatement extends AlterDatabaseStatement implements OracleStatement {
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/alter-database.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/alter-database.xml
index 018a2d3..14fad0b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/alter-database.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/ddl/alter-database.xml
@@ -17,10 +17,12 @@
   -->
 
 <sql-parser-test-cases>
-<!--    <alter-database sql-case-id="alter_database_set_to" />-->
-<!--    <alter-database sql-case-id="alter_database_set_to_default" />-->
-<!--    <alter-database sql-case-id="alter_database_set_equal" />-->
-<!--    <alter-database sql-case-id="alter_database_reset_all" />-->
-<!--    <alter-database sql-case-id="alter_database_reset_param" />-->
-<!--    <alter-database sql-case-id="alter_database_owner" />-->
+    <alter-database sql-case-id="alter_database_mount" />
+    <alter-database sql-case-id="alter_database_open" />
+    <alter-database sql-case-id="alter_database_recovery1" />
+    <alter-database sql-case-id="alter_database_recovery2" />
+    <alter-database sql-case-id="alter_database_rename" />
+    <alter-database sql-case-id="alter_database_create1" />
+    <alter-database sql-case-id="alter_database_create2" />
+    <alter-database sql-case-id="alter_database_create3" />
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/alter.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/alter.xml
index ae64a97..bd0e7d1 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/alter.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/ddl/alter.xml
@@ -160,12 +160,14 @@
     <sql-case id="alter_function_reset" value="ALTER FUNCTION check_password(text) RESET search_path" db-types="PostgreSQL" />
     <sql-case id="alter_function_depend_on" value="ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib" db-types="PostgreSQL" />
 <!--alter database test-->
-<!--    <sql-case id="alter_database_set_to" value="ALTER DATABASE test SET enable_indexscan TO off" db-types="PostgreSQL" />-->
-<!--    <sql-case id="alter_database_set_to_default" value="ALTER DATABASE test SET enable_indexscan TO DEFAULT" db-types="PostgreSQL" />-->
-<!--    <sql-case id="alter_database_set_equal" value="ALTER DATABASE test SET enable_indexscan = off" db-types="PostgreSQL" />-->
-<!--    <sql-case id="alter_database_reset_all" value="ALTER DATABASE test RESET ALL" db-types="PostgreSQL" />-->
-<!--    <sql-case id="alter_database_reset_param" value="ALTER DATABASE test RESET parameter1" db-types="PostgreSQL" />-->
-<!--    <sql-case id="alter_database_owner" value="ALTER DATABASE name OWNER TO user1" db-types="PostgreSQL" />-->
+    <sql-case id="alter_database_mount" value="ALTER DATABASE db1 MOUNT" db-types="Oracle" />
+    <sql-case id="alter_database_open" value="ALTER DATABASE db1 OPEN READONLY" db-types="Oracle" />
+    <sql-case id="alter_database_recovery1" value="ALTER DATABASE db1 BEGIN BACKUP" db-types="Oracle" />
+    <sql-case id="alter_database_recovery2" value="ALTER DATABASE db1 END BACKUP" db-types="Oracle" />
+    <sql-case id="alter_database_rename" value="ALTER DATABASE db1 RENAME FILE 'a.dbf' to 'b.dbf'" db-types="Oracle" />
+    <sql-case id="alter_database_create1" value="ALTER DATABASE db1 CREATE DATAFILE '01.dbf' as '01.dbf'" db-types="Oracle" />
+    <sql-case id="alter_database_create2" value="ALTER DATABASE db1 CREATE DATAFILE 2 as '02.dbf'" db-types="Oracle" />
+    <sql-case id="alter_database_create3" value="ALTER DATABASE db1 CREATE DATAFILE '03.dbf' as NEW" db-types="Oracle" />
 <!--alter procedure test-->
     <sql-case id="alter_procedure_rename" value="ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record" db-types="PostgreSQL" />
     <sql-case id="alter_procedure_owner" value="ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe" db-types="PostgreSQL" />