You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/07/15 01:57:31 UTC

[shardingsphere] branch master updated: support alter diskgroup (#19126)

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

zhangliang 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 edc85e51cbd support alter diskgroup (#19126)
edc85e51cbd is described below

commit edc85e51cbd2daf2deef29561c6c6cb49c4bbd4e
Author: Trydamere <30...@qq.com>
AuthorDate: Fri Jul 15 09:57:25 2022 +0800

    support alter diskgroup (#19126)
---
 .../src/main/antlr4/imports/oracle/BaseRule.g4     | 119 ++++++++-
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 | 266 ++++++++++++++++++++-
 .../main/antlr4/imports/oracle/OracleKeyword.g4    |  32 +++
 .../sql/parser/autogen/OracleStatement.g4          |   1 +
 .../impl/OracleDDLStatementSQLVisitor.java         |   7 +
 .../core/database/visitor/SQLVisitorRule.java      |   2 +
 .../statement/ddl/AlterDiskgroupStatement.java     |  26 ++
 .../oracle/ddl/OracleAlterDiskgroupStatement.java  |  29 +++
 .../jaxb/cases/domain/SQLParserTestCases.java      |   5 +
 .../ddl/AlterDiskgroupStatementTestCase.java       |  26 ++
 .../main/resources/case/ddl/alter-diskgroup.xml    |  34 +++
 .../sql/supported/ddl/alter-audit-policy.xml       |   2 +-
 .../sql/supported/ddl/alter-diskgroup.xml          |  34 +++
 13 files changed, 568 insertions(+), 15 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 fc93266f900..1cb8a719e6c 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
@@ -224,9 +224,6 @@ parameterValue
     : literals | identifier
     ;
 
-directoryName
-    : identifier
-    ;
 
 dispatcherName
     : stringLiterals
@@ -620,13 +617,105 @@ fileName
     ;
 
 asmFileName
-    : STRING_
+    : fullyQualifiedFileName
+    | numericFileName
+    | incompleteFileName
+    | aliasFileName
+    ;
+
+fullyQualifiedFileName
+    : PLUS_ diskgroupName SLASH_ dbName SLASH_ fileType SLASH_ fileTypeTag DOT_ fileNumber DOT_ incarnationNumber
+    ;
+
+dbName
+    : identifier
+    ;
+
+fileType
+    : CONTROLFILE
+    | DATAFILE
+    | ONLINELOG
+    | ARCHIVELOG
+    | TEMPFILE
+    | BACKUPSET
+    | PARAMETERFILE
+    | DATAGUARDCONFIG
+    | FLASHBACK
+    | CHANGETRACKING
+    | DUMPSET
+    | XTRANSPORT
+    | AUTOBACKUP
+    ;
+
+fileTypeTag
+    : currentBackup
+    | tablespaceName
+    | groupGroup POUND_
+    | threadThread POUND_ UL_ seqSequence POUND_
+    | hasspfileTimestamp
+    | serverParameterFile
+    | dbName
+    | logLog POUND_
+    | changeTrackingFile
+    | userObj POUND_ UL_ fileName POUND_
+    ;
+
+currentBackup
+    : identifier
+    ;
+
+groupGroup
+    : identifier
+    ;
+
+threadThread
+    : identifier
+    ;
+
+seqSequence
+    : identifier
+    ;
+
+hasspfileTimestamp
+    : timestampValue
+    ;
+
+serverParameterFile
+    : identifier
+    ;
+
+logLog
+    : identifier
+    ;
+
+changeTrackingFile
+    : identifier
+    ;
+
+userObj
+    : identifier
+    ;
+
+numericFileName
+    : PLUS_ diskgroupName DOT_ fileNumber DOT_ incarnationNumber
+    ;
+
+incompleteFileName
+    : PLUS_ diskgroupName (LP_ templateName RP_)?
+    ;
+
+aliasFileName
+    : PLUS_ diskgroupName (LP_ templateName RP_)? SLASH_ aliasName
     ;
 
 fileNumber
     : INTEGER_
     ;
 
+incarnationNumber
+    : INTEGER_
+    ;
+
 instanceName
     : STRING_
     ;
@@ -668,7 +757,7 @@ templateName
     ;
 
 aliasName
-    : identifier
+    : pathString
     ;
 
 domain
@@ -1325,3 +1414,23 @@ parameterType
 returnType
     : identifier
     ;
+
+failgroupName
+    : identifier
+    ;
+
+asmVolumeName
+    : identifier
+    ;
+
+mountpathName
+    : identifier
+    ;
+
+usageName
+    : identifier
+    ;
+
+usergroupName
+    : STRING_
+    ;
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 178d74d1f0d..5bd2cc465b5 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
@@ -2420,16 +2420,9 @@ dropFlashbackArchive
     ;
 
 createDiskgroup
-    : CREATE DISKGROUP diskgroupName (redundancyClause REDUNDANCY)? diskClause+ attribute?
+    : CREATE DISKGROUP diskgroupName ((HIGH | NORMAL | FLEX | EXTENDED (SITE siteName)? | EXTERNAL) REDUNDANCY)? diskClause+ attribute?
     ;
 
-redundancyClause
-    : HIGH
-    | NORMAL
-    | FLEX
-    | EXTENDED (SITE siteName)?
-    | EXTERNAL
-    ;
 
 diskClause
     : (QUORUM | REGULAR)? (FAILGROUP diskgroupName)? DISK qualifieDiskClause (COMMA_ qualifieDiskClause)*
@@ -2552,7 +2545,7 @@ resolveClause
 alterAuditPolicy
     : ALTER AUDIT POLICY policyName
       ((ADD | DROP) subAuditClause)?
-      (CONDITION (DROP | condition EVALUATE PER (STATEMENT | SESSION | INSTANCE)))?
+      (CONDITION (DROP | SQ_ condition SQ_ EVALUATE PER (STATEMENT | SESSION | INSTANCE)))?
     ;
 
 subAuditClause
@@ -2781,3 +2774,258 @@ usingFunctionClause
 dropBindingClause
     : DROP BINDING LP_ parameterType (COMMA_ parameterType)* RP_ FORCE?
     ;
+
+alterDiskgroup
+    : ALTER DISKGROUP ((diskgroupName ((((addDiskClause | dropDiskClause) (COMMA_ (addDiskClause | dropDiskClause))* | resizeDiskClause) (rebalanceDiskgroupClause)?)
+    | replaceDiskClause
+    | renameDiskClause
+    | diskOnlineClause
+    | diskOfflineClause
+    | rebalanceDiskgroupClause
+    | checkDiskgroupClause
+    | diskgroupTemplateClauses
+    | diskgroupDirectoryClauses
+    | diskgroupAliasClauses
+    | diskgroupVolumeClauses
+    | diskgroupAttributes
+    | modifyDiskgroupFile
+    | dropDiskgroupFileClause
+    | convertRedundancyClause
+    | usergroupClauses
+    | userClauses
+    | filePermissionsClause
+    | fileOwnerClause
+    | scrubClause
+    | quotagroupClauses
+    | filegroupClauses))
+    | (((diskgroupName (COMMA_ diskgroupName)*) | ALL) (undropDiskClause | diskgroupAvailability | enableDisableVolume)))
+    ;
+
+addDiskClause
+    : ADD ((SITE siteName)? (QUORUM | REGULAR)? (FAILGROUP failgroupName)? DISK qualifiedDiskClause (COMMA_ qualifiedDiskClause)*)+
+    ;
+
+qualifiedDiskClause
+    : searchString (NAME diskName)? (SIZE sizeClause)? (FORCE | NOFORCE)?
+    ;
+
+dropDiskClause
+    : DROP ((QUORUM | REGULAR)? DISK diskName (FORCE | NOFORCE)? (COMMA diskName (FORCE | NOFORCE)?)*
+    | DISKS IN (QUORUM | REGULAR)? FAILGROUP failgroupName (FORCE | NOFORCE)? (COMMA_ failgroupName (FORCE | NOFORCE)?)*)
+    ;
+
+resizeDiskClause
+    : RESIZE ALL (SIZE sizeClause)?
+    ;
+
+rebalanceDiskgroupClause
+    : REBALANCE ((((WITH withPhases) | (WITHOUT withoutPhases))? (POWER INTEGER_)? (WAIT | NOWAIT)?)
+    | (MODIFY POWER (INTEGER_)?))?
+    ;
+
+withPhases
+    : withPhase (COMMA_ withPhase)*
+    ;
+
+withPhase
+    : RESTORE | BALANCE | PREPARE | COMPACT
+    ;
+
+withoutPhases
+    : withoutPhase (COMMA_ withoutPhase)*
+    ;
+
+withoutPhase
+    : BALANCE | PREPARE | COMPACT
+    ;
+
+replaceDiskClause
+    : REPLACE DISK diskName WITH pathString (FORCE | NOFORCE)?
+    (COMMA_ diskName WITH pathString (FORCE | NOFORCE)?)*
+    (POWER INTEGER_)? (WAIT | NOWAIT)?
+    ;
+
+renameDiskClause
+    : RENAME (DISK diskName TO diskName (COMMA_ diskName TO diskName)* | DISKS ALL)
+    ;
+
+diskOnlineClause
+    : ONLINE (((QUORUM | REGULAR)? DISK diskName (COMMA_ diskName)*
+    | DISKS IN (QUORUM | REGULAR)? FAILGROUP failgroupName (COMMA_ failgroupName)*)+
+    | ALL) (POWER INTEGER_)? (WAIT | NOWAIT)?
+    ;
+
+diskOfflineClause
+    : OFFLINE ((QUORUM | REGULAR)? DISK diskName (COMMA_ diskName)*
+    | DISKS IN (QUORUM | REGULAR)? FAILGROUP failgroupName (COMMA_ failgroupName)*)+ (timeoutClause)?
+    ;
+
+timeoutClause
+    : DROP AFTER INTEGER_ (M | H)
+    ;
+
+checkDiskgroupClause
+    : CHECK (REPAIR | NOREPAIR)?
+    ;
+
+diskgroupTemplateClauses
+    : (((ADD | MODIFY) TEMPLATE templateName qualifiedTemplateClause (COMMA_ templateName qualifiedTemplateClause)*)
+    | (DROP TEMPLATE templateName (COMMA_ templateName)*))
+    ;
+
+qualifiedTemplateClause
+    : ATTRIBUTE LP_ redundancyClause stripingClause diskRegionClause RP_
+    ;
+
+redundancyClause
+    : (MIRROR | HIGH | UNPROTECTED | PARITY)?
+    ;
+
+stripingClause
+    : (FINE | COARSE)?
+    ;
+
+diskRegionClause
+    : (HOT | COLD)? (MIRRORHOT | MIRRORCOLD)?
+    ;
+
+diskgroupDirectoryClauses
+    : (ADD DIRECTORY fileName (COMMA_ fileName)*
+    | DROP DIRECTORY fileName (FORCE | NOFORCE)? (COMMA_ fileName (FORCE | NOFORCE)?)*
+    | RENAME DIRECTORY directoryName TO directoryName (COMMA_ directoryName TO directoryName)*)
+    ;
+
+diskgroupAliasClauses
+    : ((ADD ALIAS aliasName FOR fileName (COMMA_ aliasName FOR fileName)*)
+    | (DROP ALIAS aliasName (COMMA_ aliasName)*)
+    | (RENAME ALIAS aliasName TO aliasName (COMMA_ aliasName TO aliasName)*))
+    ;
+
+diskgroupVolumeClauses
+    : (addVolumeClause
+    | modifyVolumeClause
+    | RESIZE VOLUME asmVolumeName SIZE sizeClause
+    | DROP VOLUME asmVolumeName)
+    ;
+
+addVolumeClause
+    : ADD VOLUME asmVolumeName SIZE sizeClause (redundancyClause)? (STRIPE_WIDTH INTEGER_ (K | M))? (STRIPE_COLUMNS INTEGER_)? (ATTRIBUTE (diskRegionClause))?
+    ;
+
+modifyVolumeClause
+    : MODIFY VOLUME asmVolumeName (ATTRIBUTE (diskRegionClause))? (MOUNTPATH mountpathName)? (USAGE usageName)?
+    ;
+
+diskgroupAttributes
+    : SET ATTRIBUTE attributeNameAndValue
+    ;
+
+modifyDiskgroupFile
+    : MODIFY FILE fileName ATTRIBUTE LP_ diskRegionClause RP_ (COMMA_ fileName ATTRIBUTE ( diskRegionClause ))*
+    ;
+
+dropDiskgroupFileClause
+    : DROP FILE fileName (COMMA_ fileName)*
+    ;
+
+convertRedundancyClause
+    : CONVERT REDUNDANCY TO FLEX
+    ;
+
+usergroupClauses
+    : (ADD USERGROUP SQ_ usergroupName SQ_ WITH MEMBER SQ_ username SQ_ (COMMA_ SQ_ username SQ_)*
+    | MODIFY USERGROUP SQ_ usergroupName SQ_ (ADD | DROP) MEMBER SQ_ username SQ_ (COMMA_ SQ_ username SQ_)*
+    | DROP USERGROUP SQ_ usergroupName SQ_)
+    ;
+
+userClauses
+    : (ADD USER SQ_ username SQ_ (COMMA_ SQ_ username SQ_)*
+    | DROP USER SQ_ username SQ_ (COMMA_ SQ_ username SQ_)* (CASCADE)?
+    | REPLACE USER SQ_ username SQ_ WITH SQ_ username SQ_ (COMMA_ SQ_ username SQ_ WITH SQ_ username SQ_)*)
+    ;
+
+filePermissionsClause
+    : SET PERMISSION (OWNER | GROUP | OTHER) EQ_ (NONE | READ ONLY | READ WRITE) (COMMA_ (OWNER | GROUP | OTHER | ALL)
+    EQ_ (NONE | READ ONLY | READ WRITE))* FOR FILE fileName (COMMA_ fileName)*
+    ;
+
+fileOwnerClause
+    : SET OWNERSHIP (setOwnerClause (COMMA_ setOwnerClause)*) FOR FILE fileName (COMMA_ fileName)*
+    ;
+
+setOwnerClause
+    :OWNER EQ_ SQ_ username SQ_ | GROUP EQ_ SQ_ usergroupName SQ_
+    ;
+
+scrubClause
+    : SCRUB (FILE asmFileName | DISK diskName)? (REPAIR | NOREPAIR)?
+    (POWER (AUTO | LOW | HIGH | MAX))? (WAIT | NOWAIT)? (FORCE | NOFORCE)? (STOP)?
+    ;
+
+quotagroupClauses
+    : (ADD QUOTAGROUP quotagroupName (setPropertyClause)?
+    | MODIFY QUOTAGROUP quotagroupName setPropertyClause
+    | MOVE FILEGROUP filegroupName TO quotagroupName
+    | DROP QUOTAGROUP quotagroupName)
+    ;
+
+setPropertyClause
+    : SET propertyName EQ_ propertyValue
+    ;
+
+quotagroupName
+    : identifier
+    ;
+
+propertyName
+    : QUOTA
+    ;
+
+propertyValue
+    : sizeClause | UNLIMITED
+    ;
+
+filegroupName
+    : identifier
+    ;
+
+filegroupClauses
+    : (addFilegroupClause
+    | modifyFilegroupClause
+    | moveToFilegroupClause
+    | dropFilegroupClause)
+    ;
+
+addFilegroupClause
+    : ADD FILEGROUP filegroupName (DATABASE databaseName
+    | CLUSTER clusterName
+    | VOLUME asmVolumeName) (setFileTypePropertyclause)?
+    ;
+
+setFileTypePropertyclause
+    :SET SQ_ (fileType DOT_)? propertyName SQ_ EQ_ SQ_ propertyValue SQ_
+    ;
+
+modifyFilegroupClause
+    : MODIFY FILEGROUP filegroupName setFileTypePropertyclause
+    ;
+
+moveToFilegroupClause
+    : MOVE FILE asmFileName TO FILEGROUP filegroupName
+    ;
+
+dropFilegroupClause
+    : DROP FILEGROUP filegroupName (CASCADE)?
+    ;
+
+undropDiskClause
+    : UNDROP DISKS
+    ;
+
+diskgroupAvailability
+    : ((MOUNT (RESTRICTED | NORMAL)? (FORCE | NOFORCE)?) | (DISMOUNT (FORCE | NOFORCE)?))
+    ;
+
+enableDisableVolume
+    : (ENABLE | DISABLE) VOLUME (asmVolumeName (COMMA_ asmVolumeName)* | ALL)
+    ;
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 970231b175a..eb85a0c3b2c 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
@@ -2874,3 +2874,35 @@ SCAN
 COMPUTE
     : C O M P U T E
     ;
+
+UNDROP
+    : U N D R O P
+    ;
+
+DISKS
+    : D I S K S
+    ;
+
+COARSE
+    : C O A R S E
+    ;
+
+FINE
+    : F I N E
+    ;
+
+ALIAS
+    : A L I A S
+    ;
+
+SCRUB
+    : S C R U B
+    ;
+
+DISMOUNT
+    : D I S M O U N T
+    ;
+
+REBALANCE
+    : R E B A L A N C E
+    ;
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 10c8fbcf8c6..481f4879790 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
@@ -114,5 +114,6 @@ execute
     | alterAuditPolicy
     | alterCluster
     | alterOperator
+    | alterDiskgroup
     ) 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 bc3eb6d75d6..d8b9abcecea 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
@@ -32,6 +32,7 @@ import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterD
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDatabaseLinkContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDefinitionClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDimensionContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDiskgroupContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterFlashbackArchiveContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterIndexContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterInmemoryJoinGroupContext;
@@ -148,6 +149,7 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.Ora
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterDatabaseLinkStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterDatabaseStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterDimensionStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterDiskgroupStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterFlashbackArchiveStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterIndexStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterInmemoryJoinGroupStatement;
@@ -920,4 +922,9 @@ public final class OracleDDLStatementSQLVisitor extends OracleStatementSQLVisito
     public ASTNode visitAlterCluster(final AlterClusterContext ctx) {
         return new OracleAlterClusterStatement();
     }
+    
+    @Override
+    public ASTNode visitAlterDiskgroup(final AlterDiskgroupContext ctx) {
+        return new OracleAlterDiskgroupStatement();
+    }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
index 4cabd5173f0..9ca49dc701a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
@@ -588,6 +588,8 @@ public enum SQLVisitorRule {
     
     ALTER_CLUSTER("AlterCluster", SQLStatementType.DDL),
     
+    ALTER_DISKGROUP("AlterDiskgroup", SQLStatementType.DDL),
+    
     CURSOR("Cursor", SQLStatementType.DDL),
     
     CLOSE("Close", SQLStatementType.DDL),
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterDiskgroupStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterDiskgroupStatement.java
new file mode 100644
index 00000000000..001adfa4f13
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterDiskgroupStatement.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.sql.common.statement.ddl;
+
+import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+
+/**
+ * Alter diskgroup statement.
+ */
+public abstract class AlterDiskgroupStatement extends AbstractSQLStatement implements DDLStatement {
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterDiskgroupStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterDiskgroupStatement.java
new file mode 100644
index 00000000000..b7bac0f1525
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleAlterDiskgroupStatement.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+
+import lombok.ToString;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterDiskgroupStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+
+/**
+ * Oracle alter diskgroup statement.
+ */
+@ToString
+public final class OracleAlterDiskgroupStatement extends AlterDiskgroupStatement implements OracleStatement {
+}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
index db7e6ed9526..f934d6da3c3 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
@@ -104,6 +104,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterDefaultPrivilegesTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterDimensionStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterDirectoryStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterDiskgroupStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterDomainStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterExtensionStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterFlashbackArchiveStatementTestCase;
@@ -1339,6 +1340,9 @@ public final class SQLParserTestCases {
     @XmlElement(name = "alter-cluster")
     private final List<AlterClusterStatementTestCase> alterClusterTestCases = new LinkedList<>();
     
+    @XmlElement(name = "alter-diskgroup")
+    private final List<AlterDiskgroupStatementTestCase> alterDiskgroupTestCases = new LinkedList<>();
+    
     @XmlElement(name = "alter-operator")
     private final List<AlterOperatorStatementTestCase> alterOperatorTestCases = new LinkedList<>();
     
@@ -1876,6 +1880,7 @@ public final class SQLParserTestCases {
         putAll(alterJavaTestCases, result);
         putAll(alterAuditPolicyTestCases, result);
         putAll(alterClusterTestCases, result);
+        putAll(alterDiskgroupTestCases, result);
         putAll(alterOperatorTestCases, result);
         putAll(createTextSearchTestCases, result);
         putAll(alterTextSearchTestCases, result);
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterDiskgroupStatementTestCase.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterDiskgroupStatementTestCase.java
new file mode 100644
index 00000000000..b5c3add3506
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterDiskgroupStatementTestCase.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl;
+
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+
+/**
+ * Alter diskgroup statement test case.
+ */
+public final class AlterDiskgroupStatementTestCase extends SQLParserTestCase {
+}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-diskgroup.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-diskgroup.xml
new file mode 100644
index 00000000000..9a81317db1c
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-diskgroup.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<sql-parser-test-cases>
+    <alter-diskgroup sql-case-id="alter_diskgroup_add_disk" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_drop_disk" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_undrop_disk" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_resize" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_rebalance" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_verify" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_add_template" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_change_template" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_drop_template" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_create_directory" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_create_alias" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_scrub" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_dismount" />
+    <alter-diskgroup sql-case-id="alter_diskgroup_mount" />
+</sql-parser-test-cases>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-audit-policy.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-audit-policy.xml
index 88e472119bb..c12f056144d 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-audit-policy.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-audit-policy.xml
@@ -19,5 +19,5 @@
 <sql-cases>
     <sql-case id="alter_audit_policy_add" value="ALTER AUDIT POLICY dml_pol ADD PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;" db-types="Oracle" />
     <sql-case id="alter_audit_policy_drop" value="ALTER AUDIT POLICY table_pol DROP PRIVILEGES CREATE ANY TABLE;" db-types="Oracle" />
-    <sql-case id="alter_audit_policy_modify" value="ALTER AUDIT POLICY emp_updates_pol CONDITION UID = 102 EVALUATE PER STATEMENT;" db-types="Oracle" />
+    <sql-case id="alter_audit_policy_modify" value="ALTER AUDIT POLICY emp_updates_pol CONDITION 'UID = 102' EVALUATE PER STATEMENT;" db-types="Oracle" />
 </sql-cases>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-diskgroup.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-diskgroup.xml
new file mode 100644
index 00000000000..349185dc49e
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-diskgroup.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<sql-cases>
+    <sql-case id="alter_diskgroup_add_disk" value="ALTER DISKGROUP dgroup_01 ADD DISK '/devices/disks/d100';" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_drop_disk" value="ALTER DISKGROUP dgroup_01 DROP DISK dgroup_01_0000;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_undrop_disk" value="ALTER DISKGROUP dgroup_01 UNDROP DISKS;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_resize" value="ALTER DISKGROUP dgroup_01 RESIZE ALL SIZE 36G;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_rebalance" value="ALTER DISKGROUP dgroup_01 REBALANCE POWER 11 WAIT;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_verify" value="ALTER DISKGROUP dgroup_01 CHECK ALL REPAIR;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_add_template" value="ALTER DISKGROUP dgroup_01 ADD TEMPLATE template_01 ATTRIBUTE (UNPROTECTED COARSE);" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_change_template" value="ALTER DISKGROUP dgroup_01 MODIFY TEMPLATE template_01 ATTRIBUTE (FINE);" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_drop_template" value="ALTER DISKGROUP dgroup_01 DROP TEMPLATE template_01;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_create_directory" value="ALTER DISKGROUP dgroup_01 ADD DIRECTORY '+dgroup_01/alias_dir';" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_create_alias" value="ALTER DISKGROUP dgroup_01 ADD ALIAS '+dgroup_01/alias_dir/datafile.dbf' FOR '+dgroup_01.261.1';" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_scrub" value="ALTER DISKGROUP dgroup_01 SCRUB REPAIR WAIT;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_dismount" value="ALTER DISKGROUP dgroup_01 DISMOUNT FORCE;" db-types="Oracle" />
+    <sql-case id="alter_diskgroup_mount" value="ALTER DISKGROUP dgroup_01 MOUNT;" db-types="Oracle" />
+</sql-cases>