附录 1 关键字和保留字
以下不带*号的为关键字, 带*号的为系统保留字。
DM 还将保留字进一步划分为 SQL 保留字、DMSQL 程序保留字、模式保留字、变量保留字和别名保留字。对于关键字和保留字的详细信息请查询系统视图 V$RESERVED_WORDS。
注意:关键字 ROWID、TRXID、VERSIONS_STARTTIME、VERSIONS_ENDTIME、VERSIONS_STARTTRXID、VERSIONS_ENDTRXID 和 VERSIONS_OPERATION 不能作为表的列名,即使加上双引号也不行。
A
ABORT、* ABSOLUTE、* ABSTRACT、ACCESSED、ACCOUNT、ACROSS、ACTION、* ADD、* ADMIN、ADVANCED、AFTER、AGGREGATE、* ALL、ALLOW_DATETIME、ALLOW_IP、* ALTER、ANALYZE、* AND、* ANY、APR、ARCHIVE、ARCHIVEDIR、ARCHIVELOG、ARCHIVESTYLE、* ARRAY、* ARRAYLEN、* AS、* ASC、ASCII、ASENSITIVE、* ASSIGN、ASYNCHRONOUS、AT、ATTACH、* AUDIT、AUG、AUTHID、* AUTHORIZATION、AUTO、AUTOEXTEND、AUTONOMOUS_TRANSACTION、AVG
B
BACKED、BACKUP、BACKUPDIR、BACKUPINFO、BACKUPSET、BADFILE、BAKFILE、BASE、BEFORE、* BEGIN、* BETWEEN、* BIGDATEDIFF、BIGINT、* BINARY、BIT、BITMAP、BLOB、BLOCK、* BOOL、BOOLEAN、* BOTH、BRANCH、BREADTH、* BREAK、* BSTRING、BTREE、BUFFER、BUILD、BULK、* BY、BYDAY、BYHOUR、BYMINUTE、BYMONTH、BYMONTHDAY、BYSECOND、* BYTE、BYWEEKNO、BYYEARDAY
C
CACHE、CALCULATE、* CALL、CASCADE、CASCADED、* CASE、* CAST、CATALOG、* CATCH、CHAIN、* CHAR、CHARACTER、CHARACTERISTICS、* CHECK、CIPHER、* CLASS、CLOB、CLOSE、* CLUSTER、* CLUSTERBTR、COLLATE、* COLLATION、COLLECT、* COLUMN、COLUMNS、* COMMENT、* COMMIT、COMMITTED、* COMMITWORK、COMPILE、COMPLETE、COMPRESS、COMPRESSED、CONDITIONAL、* CONNECT、CONNECT_BY_ISCYCLE、CONNECT_BY_ISLEAF、* CONNECT_BY_ROOT、CONNECT_IDLE_TIME、CONNECT_TIME、* CONST、CONSTANT、* CONSTRAINT、CONSTRAINTS、CONSTRUCTOR、* CONTAINS、* CONTEXT、* CONTINUE、* CONVERT、COPY、* CORRESPONDING、CORRUPT、COUNT、COUNTER、CPU_PER_CALL、CPU_PER_SESSION、* CREATE、* CROSS、* CRYPTO、CTLFILE、* CUBE、CUMULATIVE、* CURRENT、CURRENT_SCHEMA、CURRENT_USER、* CURSOR、CYCLE
D
DAILY、DANGLING、DATA、DATABASE、DATAFILE、DATE、* DATEADD、* DATEDIFF、* DATEPART、DATETIME、DAY、DBFILE、DDL、DDL_CLONE、DEBUG、DEC、* DECIMAL、* DECLARE、* DECODE、* DEFAULT、DEFERRABLE、DEFERRED、DEFINER、* DELETE、DELETING、DELIMITED、DELTA、DEMAND、DENSE_RANK、DEPTH、DEREF、* DESC、DETACH、DETERMINISTIC、DEVICE、DIAGNOSTICS、DICTIONARY、DIRECTORY、* DISABLE、DISCONNECT、* DISKSPACE、* DISTINCT、* DISTRIBUTED、* DO、* DOMAIN、* DOUBLE、DOWN、* DROP、DUMP
E
EACH、* ELSE、* ELSEIF、* ELSIF、EMPTY、* ENABLE、ENCRYPT、ENCRYPTION、* END、* EQU、ERROR、ERRORS、ESCAPE、EVENTINFO、EVENTS、EXCEPT、EXCEPTION、EXCEPTIONS、EXCEPTION_INIT、* EXCHANGE、EXCLUDE、EXCLUDING、EXCLUSIVE、* EXEC、* EXECUTE、* EXISTS、* EXIT、* EXPLAIN、EXTENDS、* EXTERN、EXTERNAL、EXTERNALLY、* EXTRACT
F
FAILED_LOGIN_ATTEMPTS、FAST、FEB、* FETCH、FIELDS、FILE、FILEGROUP、FILESIZE、FILLFACTOR、* FINAL、* FINALLY、* FIRST、* FLOAT、FOLLOWING、* FOR、FORALL、FORCE、* FOREIGN、FORMAT、FREQ、FREQUENCE、FRI、* FROM、* FULL、* FULLY、* FUNCTION
G
* GET、GLOBAL、GLOBALLY、* GOTO、* GRANT、* GROUP、* GROUPING
H
HASH、HASHPARTMAP、* HAVING、HEXTORAW、HOLD、HOUR、HOURLY、HUGE
I
IDENTIFIED、* IDENTITY、IDENTITY_INSERT、* IF、IMAGE、* IMMEDIATE、* IN、INCLUDE、INCLUDING、INCREASE、INCREMENT、* INDEX、INDEXES、INDICES、INITIAL、INITIALIZED、INITIALLY、* INLINE、* INNER、INNERID、INPUT、INSENSITIVE、* INSERT、INSERTING、INSTANCE、INSTANTIABLE、INSTEAD、* INT、INTEGER、INTENT、* INTERSECT、* INTERVAL、* INTO、INVISIBLE、* IS、ISOLATION
J
JAN、* JAVA、JOB、* JOIN、JSON、JUL、JUN
K
* KEEP、KEY、KEYS
L
LABEL、LARGE、LAST、LAX、* LEADING、* LEFT、LESS、LEVEL、LEXER、* LIKE、LIMIT、LINK、* LIST、* LNNVL、LOB、LOCAL、LOCAL_OBJECT、LOCALLY、LOCATION、LOCK、LOCKED、LOG、LOGFILE、LOGGING、* LOGIN、LOGOFF、LOGON、LOGOUT、LONG、LONGVARBINARY、LONGVARCHAR、* LOOP、LSN
M
MANUAL、MAP、MAPPED、MAR、MATCH、MATCHED、MATERIALIZED、MAX、MAXPIECESIZE、MAXSIZE、MAXVALUE、MAX_RUN_DURATION、MAY、* MEMBER、MEMORY、MEM_SPACE、MERGE、MIN、MINEXTENTS、* MINUS、MINUTE、MINUTELY、MINVALUE、MIRROR、MOD、MODE、MODIFY、MON、MONEY、MONITORING、MONTH、MONTHLY、MOUNT、MOVEMENT、* MULTISET
N
NATIONAL、* NATURAL、NCHAR、NCHARACTER、NEVER、* NEW、* NEXT、NO、NOARCHIVELOG、NOAUDIT、NOBRANCH、NOCACHE、* NOCOPY、* NOCYCLE、NODE、NOLOGGING、NOMAXVALUE、NOMINVALUE、NOMONITORING、NONE、NOORDER、NORMAL、NOROWDEPENDENCIES、NOSORT、* NOT、NOT_ALLOW_DATETIME、NOT_ALLOW_IP、NOV、NOWAIT、* NULL、NULLS、NUMBER、NUMERIC
O
* OBJECT、OCT、* OF、OFF、OFFLINE、OFFSET、OLD、* ON、ONCE、ONLINE、ONLY、OPEN、OPTIMIZE、OPTION、* OR、* ORDER、* OUT、OUTER、* OVER、OVERLAPS、* OVERLAY、* OVERRIDE、OVERRIDING
P
PACKAGE、PAD、PAGE、PARALLEL、PARALLEL_ENABLE、PARMS、PARTIAL、* PARTITION、PARTITIONS、PASSING、PASSWORD_GRACE_TIME、PASSWORD_LIFE_TIME、PASSWORD_LOCK_TIME、PASSWORD_POLICY、PASSWORD_REUSE_MAX、PASSWORD_REUSE_TIME、PATH、* PENDANT、* PERCENT、PIPE、PIPELINED、PIVOT、PLACING、PLS_INTEGER、PRAGMA、PRECEDING、PRECISION、PRESERVE、PRETTY、* PRIMARY、* PRINT、* PRIOR、* PRIVATE、PRIVILEGE、* PRIVILEGES、* PROCEDURE、* PROTECTED、* PUBLIC、PURGE
Q
QUERY_REWRITE_INTEGRITY
R
* RAISE、RANDOMLY、RANGE、RAWTOHEX、READ、READONLY、READ_PER_CALL、READ_PER_SESSION、REAL、REBUILD、* RECORD、RECORDS、* REF、* REFERENCE、* REFERENCES、* REFERENCING、REFRESH、RELATED、* RELATIVE、RENAME、* REPEAT、REPEATABLE、REPLACE、REPLAY、* REPLICATE、RESIZE、RESTORE、RESTRICT、RESULT、RESULT_CACHE、* RETURN、* RETURNING、* REVERSE、* REVOKE、* RIGHT、ROLE、* ROLLBACK、ROLLFILE、* ROLLUP、ROOT、* ROW、ROWCOUNT、ROWDEPENDENCIES、ROWID、* ROWNUM、* ROWS、RULE
S
SALT、SAMPLE、SAT、SAVE、* SAVEPOINT、* SBYTE、* SCHEMA、SCOPE、SCROLL、* SEALED、SEARCH、SECOND、SECONDLY、* SECTION、SEED、* SELECT、SELF、SENSITIVE、SEP、SEQUENCE、SERERR、SERIALIZABLE、SERVER、SESSION、SESSION_PER_USER、* SET、* SETS、SHARE、* SHORT、SHUTDOWN、SIBLINGS、SIMPLE、SINCE、SIZE、* SIZEOF、SKIP、SMALLINT、SNAPSHOT、* SOME、SOUND、SPACE、SPAN、SPATIAL、SPFILE、SPLIT、SQL、STANDBY、STARTUP、STAT、STATEMENT、* STATIC、STDDEV、STOP、STORAGE、STORE、STRICT、STRING、* STRUCT、STYLE、* SUBPARTITION、SUBPARTITIONS、SUBSTRING、SUBTYPE、SUCCESSFUL、SUM、SUN、SUSPEND、* SWITCH、SYNC、SYNCHRONOUS、* SYNONYM、SYSTEM、SYS_CONNECT_BY_PATH
T
* TABLE、TABLESPACE、TASK、TEMPLATE、TEMPORARY、TEXT、THAN、THEN、THREAD、* THROW、THU、TIES、TIME、TIMER、TIMES、TIMESTAMP、* TIMESTAMPADD、* TIMESTAMPDIFF、TIME_ZONE、TINYINT、* TO、* TOP、TRACE、* TRAILING、TRANSACTION、TRANSACTIONAL、* TRIGGER、TRIGGERS、* TRIM、* TRUNCATE、TRUNCSIZE、TRXID、* TRY、TUE、TYPE、* TYPEDEF、* TYPEOF
U
* UINT、* ULONG、UNBOUNDED、UNCOMMITTED、UNCONDITIONAL、UNDER、* UNION、* UNIQUE、UNLIMITED、UNLOCK、UNPIVOT、* UNTIL、UNUSABLE、UP、* UPDATE、UPDATING、USAGE、* USER、USE_HASH、USE_MERGE、USE_NL、USE_NL_WITH_INDEX、* USHORT、* USING、VALUE、* VALUES、VARBINARY、VARCHAR、VARCHAR2、VARIANCE
V
* VARRAY、VARYING、* VERIFY、VERSIONS、VERSIONS_ENDTIME、VERSIONS_ENDTRXID、VERSIONS_OPERATION、VERSIONS_STARTTIME、VERSIONS_STARTTRXID、VERTICAL、* VIEW、* VIRTUAL、* VISIBLE、* VOID、VSIZE
W
WAIT、WED、WEEK、WEEKLY、* WHEN、* WHENEVER、* WHERE、* WHILE、* WITH、*WITHIN、WITHOUT、WORK、WRAPPED、WRAPPER、WRITE
X
XML、* XMLPARSE、* XMLTABLE
Y
YEAR、YEARLY
Z
ZONE
附录 2 SQL 语法书写规则
一 SQL 语法符号
下面分别介绍各 SQL 语法符号的含义:
< > 表示一个语法对象,但是小括号本身不能出现在语句中。
::= 定义符,用来定义一个语法对象。定义符左边为语法对象,右边为相应的语法描述。
| 或者符,或者符限定的语法选项在实际的语句中只能出现一个。
{ } 大括号指明大括号内的语法选项在实际的语句中可以出现 0…N 次(N 为大于 0 的自然数),但是大括号本身不能出现在语句中。
[ ] 中括号指明中括号内的语法选项在实际的语句中可以出现 0…1 次,但是中括号本身不能出现在语句中。
关键字 关键字在 DM_SQL 语言中具有特殊意义,在 SQL 语法描述中,关键字以大写形式出现。但在实际书写 SQL 语句时,关键字可以为大写也可以为小写。
二 SQL 语法图的说明
SQL 语法图是用来帮助用户正确地理解和使用 DM SQL 语法的图形。阅读语法图时,请按照从上到下,从左到右的方式,依箭头所指方向进行阅读。
SQL 命令、语法关键字等终结符以全大写方式在长方形框内显示,使用时直接输入这些内容;语法参数或语法子句等非终结符的名称以全小写方式在圆角框内显示;各类标点符号显示在圆圈之中。注:如果小写参数中不带下划线_,则表示是由用户输入的参数,带下划线则表示是还需要进一步解释的子句或语法对象,如果在前面已解释过,则未重复列出。
- 必须关键字和参数
1)必须关键字和参数出现在语法参考图的主干路径上,也就是说,出现在当前阅读的水平线上。
例 以用户删除语句为例。DROP、USER、< 用户名 > 和;为必选内容。
用户删除语句语法:
DROP USER <用户名> [RESTRICT | CASCADE];
用户删除语句语法图:
这里 DROP、USER、username 和;都是语句必须的。
2)如果多个关键字或参数并行地出现在从主路径延伸出的多条可选路径中,则只选择其中的一个即可。
例 以 <GROUP BY 子句 > 为例。<group_by 项 > 有四种形式,可以任选一种。如果存在 GROUP BY 子句,则必须从 <group_by 项 > 中选择一种。
<GROUP BY 子句 > 语法:
<GROUP BY 子句> ::= GROUP BY <group_by项>{,<group_by项>}
<group_by项>::=<分组项> | <ROLLUP项> | <CUBE项> | <GROUPING SETS项>
<GROUP BY 子句 > 语法图:
- 可选关键字和参数
如果关键字或参数并行地出现在主路径下方,而主路径是一条直线,则这些关键字和参数是可选的。
例 1 以用户删除语句为例。IF EXISTS、RESTRICT、CASCADE 均是可选项。IF EXISTS 和主干道是二选一的关系;RESTRICT、CASCADE 和主干道是三选一的关系。
用户删除语句语法:
DROP USER [IF EXISTS] <用户名> [RESTRICT | CASCADE];
用户删除语句语法图:
例 2 以 < 分析子句 > 为例。<PARTITION BY 项 >、<ORDER BY 项 > 和 < 窗口子句 > 都是可选的,但出现的前后顺序不能颠倒。
分析函数的 < 分析子句 > 语法:
<分析子句> ::= [<PARTITION BY项>] [<ORDER BY项> ] [<窗口子句>]
用语法图表示 < 分析子句 >:
- 多条路径
如果一张语法参考图有一条以上的路径,可以从任意一条路径进行阅读。如果可以选择多个关键字、操作符、参数或者语法子句,这些选项将被并行地列出。
例 以 < 引用动作 > 为例。引用动作可以选择这四条路径的任一种。
< 引用动作 > 语法:
<引用动作> ::= CASCADE |
SET NULL |
SET DEFAULT |
NO ACTION
< 引用动作 > 语法图:
从语法图可以看出,引用动作可以选择这四种的任一种。
- 循环语法
循环语法表示可以按照需要,使用循环内的语法一次或者多次。
例 以 < 回滚文件子句 > 为例。通过逗号隔开,可以重复语法对象 ‘filepath’ SIZE filesize 多个。
< 回滚文件子句 > 语法:
<回滚文件子句> ::= ROLLFILE <文件说明子句>,{<文件说明子句>}
<文件说明子句> ::= <文件路径> SIZE <文件大小>
< 回滚文件子句 > 语法图:
- 多行语法图
由于有些 SQL 语句的语法十分复杂,生成的语法参考图无法完整地显示在一行之内,于是将其分行显示。阅读此类图形时,请从上至下,从左至右地进行。
例 以索引定义语句为例。索引定义的语法被分成了两行显示。
索引定义语句语法:
CREATE [OR REPLACE] [UNIQUE | BITMAP | CLUSTER] INDEX <索引名>
ON [<模式名>.]<表名>(<列名>{,<列名>}) [<STORAGE子句>];
索引定义语句语法图:
附录 3 系统存储过程和函数
以下为达梦数据库所用到的系统存储过程和函数。
注:函数名右上角有“*”标记的,表示此过程/函数的使用有下面两点限制:
- 此过程/函数不能在 MPP 全局模式下的存储过程中直接调用,在 MPP LOCAL 模式下可在存储过程中直接调用;
- 此过程/函数不能在存储过程中带参数进行动态调用。
1. INI 参数管理
1)SF_GET_PARA_VALUE
定义:
BIGINT
SF_GET_PARA_VALUE (
scope int,
ini_param_name varchar(256)
)
功能说明:
返回 DM.INI 文件中整型的参数值。
参数说明:
scope: 取值为 1、2 。 1 表示从 DM.INI 文件中读取;2 表示从内存中读取。当取值为 1,且 DM.INI 文件中该参数值设置为非法值时,若设置值与参数类型不兼容,则返回默认值;若设置值小于参数取值范围的最小值,则返回最小值;若设置值大于参数取值范围的最大值,则返回最大值。
ini_param_name:DM.INI 文件中的参数名。
返回值:
当前 DM.INI 文件中对应的参数值。
举例说明:
获得 DM.INI 文件中 BUFFER 参数值:
SELECT SF_GET_PARA_VALUE (1, 'BUFFER');
2)SP_SET_PARA_VALUE
定义:
void
SP_SET_PARA_VALUE (
scope int,
ini_param_name varchar(256)
value bigint
)
功能说明:
设置 DM.INI 文件中整型的参数值。DSC 环境下,除了特殊参数以外,其他参数值会在 OK 节点上同步。
特殊参数包括:PORT_NUM、LISTEN_IP、SVR_LOG_ASYNC_FLUSH、SVR_LOG_FILE_PATH、EP_GROUP_NAME、AP_GROUP_NAME、DCRS_IP、DCRS_PORT_NUM、AP_IP、AP_PORT_NUM、MPP_INI、DFS_INI、DCR_PATH。
参数说明:
scope:取值为 0、1、2 。0 表示修改内存中的动态配置参数值;1 表示 DM.INI 文件和内存参数都修改,不需要重启服务器;2 表示修改 DM.INI 文件的参数值或不在 DM.INI 中的 INI 配置项之后,需重启服务器生效。
ini_param_name:DM.INI 文件中的参数名。
value:设置的值。
返回值:
无
举例说明:
将 DM.INI 文件中 HFS_CACHE_SIZE 参数值设置为 320:
SP_SET_PARA_VALUE (1,'HFS_CACHE_SIZE',320);
3)SF_GET_PARA_DOUBLE_VALUE
定义:
DOUBLE
SF_GET_PARA_DOUBLE_VALUE (
scope int,
ini_param_name varchar(256)
)
功能说明:
返回 DM.INI 文件中参数中浮点型的参数值。
参数说明:
scope:取值为 1、2 。1 表示从 DM.INI 文件中读取;2 表示从内存中读取;
ini_param_name:DM.INI 文件中的参数名。
返回值:
当前 DM.INI 文件中对应的参数值。
举例说明:
获得 DM.INI 中 SEL_RATE_EQU 参数值:
SELECT SF_GET_PARA_DOUBLE_VALUE (1, 'CKPT_FLUSH_RATE');
SELECT SF_GET_PARA_DOUBLE_VALUE (2, 'CKPT_FLUSH_RATE');
4)SP_SET_PARA_DOUBLE_VALUE
定义:
void
SP_SET_PARA_DOUBLE_VALUE (
scope int,
ini_param_name varchar(256),
value double
)
功能说明:
设置 DM.INI 参数中浮点型的参数值。DSC 环境下,除了特殊参数以外,其他参数值会在 OK 节点上同步。关于特殊参数的介绍请参考函数 SP_SET_PARA_VALUE 的功能说明。
参数说明:
scope:取值为 0、1、2。0 表示修改内存中的动态配置参数值;1 表示 DM.INI 文件和内存参数都修改,不需要重启服务器;2 表示只可修改 DM.INI 文件,服务器重启后生效。
ini_param_name:DM.INI 文件中的参数名。
value:设置的值。
返回值:
无
举例说明:
将 DM.INI 文件中 SEL_RATE_EQU 参数值设置为 0.3:
SP_SET_PARA_DOUBLE_VALUE(1, 'SEL_RATE_EQU', 0.3);
5)SF_GET_PARA_STRING_VALUE
定义:
VARCHAR
SF_GET_PARA_STRING_VALUE (
scope int,
ini_param_name varchar(256)
)
功能说明:
返回 DM.INI 文件中字符串类型的参数值。
参数说明:
scope: 取值为 1、2 。 1 表示从 DM.INI 文件中读取;2 表示从内存中读取。
ini_param_name:DM.INI 文件中的参数名。
返回值:
当前 DM.INI 文件中对应的参数值。
举例说明:
获得 DM.INI 文件中 TEMP_PATH 参数值:
SELECT SF_GET_PARA_STRING_VALUE (1, 'TEMP_PATH');
6)SP_SET_PARA_STRING_VALUE
定义:
void
SP_SET_PARA_STRING_VALUE (
scope int,
ini_param_name varchar(256) ,
value varchar(8187)
)
功能说明:
设置 DM.INI 文件中的字符串型参数值。DSC 环境下,除了特殊参数以外,其他参数值会在 OK 节点上同步。关于特殊参数的介绍请参考函数 SP_SET_PARA_VALUE 的功能说明。
参数说明:
scope:取值为 0、1、2 。0 表示修改内存中的动态配置参数值;1 表示 DM.INI 文件和内存参数都修改,不需要重启服务器;2 表示只修改 DM.INI 文件,服务器重启后生效。
ini_param_name:DM.INI 文件中的参数名。
value:设置的字符串的值。
返回值:
无
举例说明:
将 DM.INI 文件中 SQL_TRACE_MASK 参数值设置为 1:
SP_SET_PARA_STRING_VALUE(1, 'SQL_TRACE_MASK','1');
7)SF_SET_SESSION_PARA_VALUE
定义:
void
SF_SET_SESSION_PARA_VALUE (
paraname varchar(8187),
value bigint
)
功能说明:
设置会话级 INI 参数的值。
参数说明:
paraname: 会话级 INI 参数的参数名。
value:要设置的新值。
返回值:
无
举例说明:
设置会话级 INI 参数 JOIN_HASH_SIZE 的值为 2000:
SF_SET_SESSION_PARA_VALUE ('JOIN_HASH_SIZE', 2000);
8)SP_RESET_SESSION_PARA_VALUE
定义:
void
SP_RESET_SESSION_PARA_VALUE (
paraname varchar(8187)
)
功能说明:
重置会话级 INI 参数的值,使得参数的值和系统级一致。
参数说明:
paraname:会话级 INI 参数的参数名。
返回值:
无
举例说明:
重置会话级 INI 参数 JOIN_HASH_SIZE 的值:
SP_RESET_SESSION_PARA_VALUE ('JOIN_HASH_SIZE');
9)SF_GET_SESSION_PARA_VALUE
定义:
INT
SF_GET_SESSION_PARA_VALUE (
paraname varchar(8187)
)
功能说明:
获得整型的会话级 INI 参数的值。
参数说明:
paraname:会话级 INI 参数的参数名。
返回值:
整型的会话级 INI 参数的值。
举例说明:
获取会话级 INI 参数 JOIN_HASH_SIZE 的值:
SELECT SF_GET_SESSION_PARA_VALUE ('JOIN_HASH_SIZE');
10)SF_GET_SESSION_PARA_DOUBLE_VALUE
定义:
DOUBLE
SF_GET_SESSION_PARA_DOUBLE_VALUE (
paraname varchar(8187)
)
功能说明:
获得浮点型的会话级 INI 参数的值。
参数说明:
paraname:会话级 INI 参数的参数名。
返回值:
浮点型会话级 INI 参数的值。
举例说明:
获取会话级 INI 参数 SEL_RATE_SINGLE 的值:
SELECT SF_GET_SESSION_PARA_DOUBLE_VALUE ('SEL_RATE_SINGLE');
11)SF_SET_SYSTEM_PARA_VALUE
定义:
SF_SET_SYSTEM_PARA_VALUE (
paraname varchar(256),
value bigint\double\varchar(256),
deferred int,
scope int
)
功能说明:
修改整型、double、varchar 的静态配置参数或动态配置参数。DSC 环境下,除了特殊参数以外,其他参数值会在 OK 节点上同步。关 SF_SET_SQL_LOG 于特殊参数的介绍请参考函数 SP_SET_PARA_VALUE 的功能说明。
参数说明:
paraname:INI 参数的参数名。
value:要设置的新值。
deferred:是否立即生效。为 0 表示当前 session 修改的参数立即生效;1 表示当前 session 不生效,后续再生效。默认为 0。
scope:取值为 0、1、2 。0 表示修改内存中的动态的配置参数值;1 表示修改 DM.INI 文件或不在 DM.INI 总中的 INI 配置项中的静态或动态参数之后,需重启服务器生效。
返回值:
无
举例说明:
修改 INI 参数 JOIN_HASH_SIZE 的值:
SF_SET_SYSTEM_PARA_VALUE ('JOIN_HASH_SIZE',50,1,1);
12)SF_SET_SQL_LOG
定义:
INT
SF_SET_SQL_LOG (
svrlog int,
svrmsk varchar(1000)
)
功能说明:
设置服务器日志相关 INI 参数 SVR_LOG 和 SQL_TRACE_MASK。
参数说明:
svrlog:INI 参数 SVR_LOG 的设置值。
svrmsk:INI 参数 SQL_TRACE_MASK 的设置值。
返回值:
是否成功。
举例说明:
设置服务器日志相关 INI 参数:
SELECT SF_SET_SQL_LOG(1, '3:5:7');
13)SF_SYNC_INI
定义:
INT
SF_SYNC_INI(
LEVEL INT
)
功能说明:
用于备库从主库同步 DM.INI 参数。直连备库执行,只对当前的备库有效,不同的备库需要分别单独执行。
仅同步 INI 参数的内存值及 DM.INI 文件值。对于某个会话上的 INI 参数修改,不进行同步。
参数说明:
LEVEL:同步级别,取值 0 和 1。
0:表示同步所属环境下必须同步的参数 。专用于 DMDSC 和 DMDPC 架构的主备中。在普通环境的主备中执行 SF_SYNC_INI 不会同步任何数据。必须同步的部分参数请参考下表:
DMDSC 必须同步的参数 | DMDPC 必须同步的参数 |
---|---|
ts_reserved_extents, ts_safe_free_extents, ts_max_id, ts_fil_max_id, sys_buffer_size, sub_buffer, multi_page_get_num, direct_io, pwd_policy, enable_offline_ts, order_by_nulls_flag, optimizer_mode, check_svr_version, rlog_append_logic_flag, isolation, dsc_n_ctls, dsc_trx_view_sync, hpc_remote_read_mode, sess_limit, lock_dict_opt, enable_inject_hint, fast_login, backslash_escape, str_like_ignore_match_end_space, clob_like_max_len, ms_parse_permit, compatible_mode, case_compatible_mode, count_bit64, calc_as_decimal, cmp_as_dicimal, cast_varchar_mode, pl_sqlcode_compatible, legacy_sequence, dm6_todate_fmt, drop_cascade_view, json_mode, commit_write, param_double_to_dec, buffer_mode, fast_pool_pages, fast_roll_pages, sys_buffer_keep_size, sys_buffer_recycle_size, n_recycle_pools, sys_buffer_rollseg_size, n_rollseg_pools, enable_freqroots , rlog_sync_mode |
length_in_char, parallel_policy, use_new_hash, compress_mode, list_table, compatible_mode, count_bit64, blank_pad_mode, alter_table_opt, dec_fix_storage, enable_huge_secind, pk_with_cluster, datetime_fmt_mode, slct_err_process_flag, force_cert_enc, cast_varchar_mode, space_compare_mode, json_mode, char_fix_storage, dpc_2pc, mpp_motion_sync, bdta_size, use_pln_pool, max_sess_stmt, max_ep_sites, dpc_sync_step, dpc_sync_total, stmt_xbox_reuse, huge_enable_del_upd, enable_inject_hint, enable_flashback, undo_retention, allowed_clt_ver, select_lock_mode , enable_cs_cvt, hfi_hp_mode, number_mode, trunc_check_mode |
1:表示同步所有可以同步的参数。可用于 DMDPC 架构的主备、DMDSC 架构的主备和普通环境的主备中。除了不可被同步的 INI 参数外,其余 INI 参数均可被同步。下面两种参数不能被同步:一是 V$PARAMETER 视图中 TYPE 列的 READ ONLY 的 INI 参数不能同步;二是下表中列出的 IP、PORT、NAME、PATH 等相关参数不可被同步。
不可被同步的参数 |
---|
PORT_NUM, LISTEN_IP, SVR_LOG_ASYNC_FLUSH, SVR_LOG_FILE_PATH, EP_GROUP_NAME, AP_GROUP_NAME, DCRS_IP, DCRS_PORT_NUM, AP_IP, AP_PORT_NUM, MPP_INI, DFS_INI, DCR_PATH, DSC_N_OK_EP , MASTER_STARTUP_STATUS, ATER_MODE_STATUS |
返回值:
0:执行成功。
<0:执行失败。
100:未执行同步,对方 MAL 消息版本过低或 INI 版本一致无需同步。
举例说明:
在备库上执行,同步主库上所有可以同步的 INI 参数:
SELECT SF_SYNC_INI (1);
14)SF_DSC_SYNC_INI
定义:
INT
SF_DSC_SYNC_INI(
LEVEL INT
)
功能说明:
用于普通节点从控制节点同步 DM.INI 参数。仅 DMDSC 集群节点生效。函数直连 DMDSC 普通节点执行。只对当前普通节点有效。不同的普通节点需要分别单独执行。在控制节点执行会报错。
仅同步 INI 参数的内存值及 DM.INI 文件值。对于某个会话上的 INI 参数修改,不进行同步。
参数说明:
LEVEL:同步级别。取值 0 和 1。0:表示同步所属环境下必须同步的部分参数;1:表示同步所有可以同步的参数。必须同步的部分参数和所有可以同步的参数与 SF_SYNC_INI()中的 DMDSC 参数一样,具体的参数请参考 SF_SYNC_INI()。
返回值:
0:执行成功。
<0:执行失败。
100:对方 MAL 消息版本过低或 INI 版本一致无需同步。
举例说明:
在普通节点上执行,同步控制节点上所有可以同步的 INI 参数:
SELECT SF_DSC_SYNC_INI (1);
2. 系统信息管理
1)SP_SET_SESSION_READONLY
定义:
SP_SET_SESSION_READONLY (
readonly int
)
功能说明:
设置当前会话的只读模式。
参数说明:
取值 1 或 0。1 表示对数据库只读;0 表示对数据库为读写。
返回值:
无
举例说明:
设置当前会话为只读模式:
SP_SET_SESSION_READONLY (1);
2)SP_CLOSE_SESSION
定义:
SP_CLOSE_SESSION (
session_id bigint
)
或
SP_CLOSE_SESSION (
ep_seqno int,
session_id bigint
)
功能说明:
停止一个活动的会话,会话 ID 可通过 V$SESSIONS 或 GV$SESSIONS 查询,DM 系统创建的内部 SESSION(PORT_TYPE = 12,但 CONNECTED = 1 的 SESSION)也可通过 V$SESSIONS 或 GV$SESSIONS 查询到。
参数说明:
session_id:指定会话 ID。
ep_seqno:指定会话所在的 DMDSC 集群节点的节点号。
举例说明:
SP_CLOSE_SESSION (510180488);
3)SF_GET_CASE_SENSITIVE_FLAG/ CASE_SENSITIVE
定义:
INT
SF_GET_CASE_SENSITIVE_FLAG()
或者
INT
CASE_SENSITIVE ()
功能说明:
返回大小写敏感信息。
参数说明:
无
返回值:
1:敏感。
0:不敏感。
举例说明:
获得大小写敏感信息:
SELECT SF_GET_CASE_SENSITIVE_FLAG();
4)SF_GET_EXTENT_SIZE
定义:
INT
SF_GET_EXTENT_SIZE()
功能说明:
返回簇大小。
参数说明:
无
返回值:
系统建库时指定的簇大小。
举例说明:
获得系统建库时指定的簇大小:
SELECT SF_GET_EXTENT_SIZE ();
5)SF_GET_PAGE_SIZE/PAGE
定义:
INT
SF_GET_PAGE_SIZE()
或者
INT
PAGE()
功能说明:
返回页大小。
参数说明:
无
返回值:
系统建库时指定的页大小。
举例说明:
获得系统建库时指定的页大小:
SELECT SF_GET_PAGE_SIZE ();
补充说明:
获得系统建库时指定的页大小也可使用:
SELECT PAGE();
6)SF_PAGE_GET_SEGID
定义:
INT
SF_PAGE_GET_SEGID(
ts_id int,
file_id int,
page_no int
)
功能说明:
获取目标页所在的段号。
参数说明:
ts_id:指定目标页的表空间,如果表空间不存在,报错。
file_id:指定目标页的文件,如果文件不存在,报错。
page_no:指定目标页的编号,如果编号超出文件范围,报错。
返回值:
页所在的段号。如果返回 0,表示该页是描述页,不属于任何段。
举例说明:
SELECT SF_PAGE_GET_SEGID(4, 0, 2000);
7)SF_PAGE_GET_PAGE_TYPE
定义:
VARCHAR
SF_PAGE_GET_PAGE_TYPE(
ts_id int,
file_id int,
page_no int
)
功能说明:
获取目标页的类型。
参数说明:
ts_id:指定目标页的表空间,如果表空间不存在,报错。
file_id:指定目标页的文件,如果文件不存在,报错。
page_no:指定目标页的编号,如果编号超出文件范围,报错。
返回值:
页的类型,没有使用的页,返回"PAGE_NOUSE",保留页,返回"RESERVED"。
举例说明:
SELECT SF_PAGE_GET_PAGE_TYPE(4, 0, 2000);
8)SF_GET_FILE_BYTES_SIZE
定义:
BIGINT
SF_GET_FILE_BYTES_SIZE (
groupid int,
fileid int
)
功能说明:
获取文件字节长度。
参数说明:
groupid:所属的表空间 ID。
fileid:数据库文件 ID。
返回值:
文件字节长度。
举例说明:
获取 0 号文件组中 0 号文件的字节长度:
SELECT SF_GET_FILE_BYTES_SIZE (0,0);
9)SF_GET_UNICODE_FLAG/UNICODE
定义:
INT
SF_GET_UNICODE_FLAG()
或者
INT
UNICODE ()
功能说明:
返回建库时指定的字符集。
参数说明:
无
返回值:
0 表示 GB18030,1 表示 UTF-8,2 表示 EUC-KR。
举例说明:
获得系统建库时指定字符集:
SELECT SF_GET_UNICODE_FLAG ();
10)SF_GET_SGUID
定义:
INT
SF_GET_SGUID ()
功能说明:
返回数据库唯一标志 sguid。
参数说明:
无
返回值:
返回数据库唯一标志 sguid。
举例说明:
获取数据库唯一标志 sguid:
SELECT SF_GET_SGUID();
11)GUID()
定义:
VARCHAR
GUID ()
功能说明:
生成一个唯一编码串(32 个字符)。
返回值:
返回一个唯一编码串。
举例说明:
获取一个唯一编码串:
SELECT GUID();
12)NEWID()
定义:
VARCHAR
NEWID ()
功能说明:
生成一个 SQLSERVER 格式的 guid 字符串 SQLSERVER 的 guid 格式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。
返回值:
返回一个 SQLSERVER 格式的唯一编码串。
举例说明:
获取一个唯一编码串:
SELECT NEWID();
13)SESSID()
定义:
BIGINT
SESSID ( )
功能说明:
获取当前连接的 id。
返回值:
返回当前连接 id。
举例说明:
返回当前连接 id:
SELECT SESSID ();
14)CHECK_INDEX
定义:
INT
CHECK_INDEX (
schname varchar,
indexid int
)
功能说明:
检查一个索引的合法性(正确性和有效性)。检查过程中,会使用 S+IX 锁来封锁索引对应的表对象,如果封锁失败,会忽略索引检查,并记录相关日志到 dmserver 的 log 文件中。
参数说明:
schname:模式名。
indexid:索引 id。
返回值:
0:表示不合法;1:表示合法;2:表示存在未校验的索引。
举例说明:
CREATE INDEX PRODUCT_IND ON PRODUCTION.PRODUCT(PRODUCTID);
//查询系统表得到索引ID
select name, id from sysobjects where name='PRODUCT_IND' and subtype$='INDEX';
select CHECK_INDEX ('PRODUCTION',33555531);
15)CHECK_DB_INDEX
定义:
INT
CHECK_DB_INDEX ()
功能说明:
检查数据库中所有索引的合法性(正确性和有效性)。检查过程中,会使用 S+IX 锁来封锁索引对应的表对象,如果封锁失败,会忽略索引检查,并记录相关日志到 dmserver 的 log 文件中。
返回值:
0:表示不合法;1:表示合法;2:表示存在未校验的索引。
举例说明:
SELECT CHECK_DB_INDEX ();
16)UID
定义:
INT
UID ()
功能说明:
返回当前用户 ID。
参数说明:
无
返回值:
返回当前用户 ID。
举例说明:
返回当前用户 ID:
SELECT UID();
17)USER
定义:
VARCHAR
USER ()
功能说明:
返回当前用户名。
参数说明:
无
返回值:
返回当前用户名:
举例说明:
返回当前用户名
SELECT USER();
18)CUR_DATABASE
定义:
VARCHAR
CUR_DATABASE ()
功能说明:
返回数据库名。
参数说明:
无
返回值:
返回数据库名。
举例说明:
获取数据库名:
SELECT CUR_DATABASE();
19)VSIZE
定义:
INT
VSIZE(n)
功能说明:
返回 n 的核心内部表示的字节数。如果 n 为 NULL,则返回 NULL。
参数说明:
n:待求字节数的参数,可以为任意数据类型。
返回值:
n 占用的字节数。
举例说明:
SELECT VSIZE(256); //整数类型
查询结果为:4
SELECT VSIZE('数据库'); //中文字符
查询结果为:6
20)SP_RECLAIM_TS_FREE_EXTENTS
定义:
SP_RECLAIM_TS_FREE_EXTENTS (
tsname varchar(128)
)
功能说明:
重组表空间空闲簇。
参数说明:
tsname:表空间名。
返回值:
无
举例说明:
重组表空间空闲簇:
SP_RECLAIM_TS_FREE_EXTENTS('SYSTEM');
21)SP_CLEAR_PLAN_CACHE
定义:
SP_CLEAR_PLAN_CACHE()
功能说明:
清空执行缓存信息。
参数说明:
无
返回值:
无
举例说明:
清空执行缓存信息:
CALL SP_CLEAR_PLAN_CACHE();
22)SP_CLEAR_PLAN_CACHE
定义:
SP_CLEAR_PLAN_CACHE(
plan_id bigint
)
功能说明:
清空指定的执行缓存信息。
参数说明:
plan_id:指定计划 ID,其值可以从动态视图 V$CACHEPLN 中的 CACHE_ITEM 列获得。
返回值:
无
举例说明:
清空 ID 为 139688237135984 的执行缓存信息:
SP_CLEAR_PLAN_CACHE(139688237135984);
23)SP_CLEAR_PLAN_CACHE
定义:
SP_CLEAR_PLAN_CACHE(
plan_id bigint,
hash_value int
)
功能说明:
清空指定的执行缓存信息。
参数说明:
plan_id:指定计划 ID,其值可以从动态视图 V$CACHEPLN 中的 CACHE_ITEM 列获得。
hash_value:指定缓存项的 HASH 值,其值可以从动态视图 V$CACHEPLN 中的 HASH_VALUE 列获得。
返回值:
无
举例说明:
清空 ID 为 139688237144176,HASH 值为 1719382609 的执行缓存信息:
SP_CLEAR_PLAN_CACHE(139688237144176,1719382609);
24)SP_SET_PLN_RS_CACHE
定义:
SP_SET_PLN_RS_CACHE(
plan_id bigint,
to_cache int
)
功能说明:
强制设置指定计划结果集缓存的生效及失效。
参数说明:
plan_id:指定计划 ID,其值可以从动态视图 V$CACHEPLN 中的 CACHE_ITEM 列获得。
to_cache:指定缓存与否,0:不缓存;1:缓存。
返回值:
无
举例说明:
设置计划 ID 为 139688237234288 的计划结果集缓存生效:
SP_SET_PLN_RS_CACHE(139688237234288, 1);
25)SP_SET_PLN_RS_CACHE
定义:
SP_SET_PLN_RS_CACHE(
plan_id bigint,
hash_value int,
to_cache int
)
功能说明:
强制设置指定计划结果集缓存的生效及失效。
参数说明:
plan_id:指定计划 ID,其值可以从动态视图 V$CACHEPLN 中的 CACHE_ITEM 列获得。
hash_value:指定缓存项的 HASH 值,其值可以从动态视图 V$CACHEPLN 中的 HASH_VALUE 列获得。
to_cache:指定缓存与否,0:不缓存;1:缓存。
返回值:
无
举例说明:
设置计划 ID 为 139688237234288,HASH 值为 1140234264 的计划结果集缓存失效
SP_SET_PLN_RS_CACHE(139688237234288, 1140234264,0);
26)SF_CHECK_USER_TABLE_PRIV
定义:
INT
SF_CHECK_USER_TABLE_PRIV(
schema_name varchar(128),
table_name varchar(128),
user_name varchar(128),
priv_code int
)
功能说明:
返回用户对表是否具有某种权限。
参数说明:
schema_name: 模式名。
table_name:表名。
user_name:用户名。
priv_code:权限代码,0=SELECT, 1=INSERT, 2=DELETE, 3=UPDATE,4=REFERENCE。
返回值:
0:用户不具备相应权限;1:用户具备相应权限。
举例说明:
获得用户 SYSDBA 对表 SYS.SYSOBJECTS 的查询权限:
SELECT SF_CHECK_USER_TABLE_PRIV ('SYS', 'SYSOBJECTS', 'SYSDBA', 0);
27)SF_CHECK_USER_TABLE_COL_PRIV
定义:
INT
SF_CHECK_USER_TABLE_COL_PRIV(
schema_name varchar(128),
table_name varchar(128),
col_name varchar(128),
user_name varchar(128),
priv_code int
)
功能说明:
返回用户对表中某列是否具有某种权限。
参数说明:
schema_name:模式名。
table_name:表名。
col_name:列名。
user_name:用户名。
priv_code:权限代码,0=SELECT, 1=INSERT, 2=DELETE, 3=UPDATE,4=REFERENCE。
返回值:
0:用户不具备相应权限;1:用户具备相应权限。
举例说明:
获得用户 SYSDBA 对表 SYS.SYSOBJECTS 的 ID 列的查询权限:
SELECT SF_CHECK_USER_TABLE_COL_PRIV ('SYS', 'SYSOBJECTS', 'ID' , 'SYSDBA', 0);
28)CUR_TICK_TIME
定义:
VARCHAR
CUR_TICK_TIME ()
功能说明:
获取系统当前时钟记数。
参数说明:
无
返回值:
时钟记数的字符串。
举例说明:
获取系统当前时钟记数:
SELECT CUR_TICK_TIME();
29)SP_SET_LONG_TIME
定义:
SP_SET_LONG_TIME (
long_exec_time int
)
功能说明:
设置 V$LOG_EXEC_SQLS_TIME 动态视图中监控 SQL 语句的最短执行时间,以毫秒为单位,取值范围 50~3600000。仅 INI 参数 ENABLE_MONITOR 值大于 1 时设置有效。
参数说明:
无
返回值:
无
举例说明:
监控执行时间超过 5 秒的 SQL 语句:
CALL SP_SET_LONG_TIME(5000);
30)SF_GET_LONG_TIME
定义:
INT
SF_GET_LONG_TIME ()
功能说明:
返回 V$LONG_EXEC_SQLS 动态视图中监控的最短执行时间,以毫秒为单位。
参数说明:
无
返回值:
V$LONG_EXEC_SQLS 所监控的最短执行时间。
举例说明:
查看 V$LONG_EXEC_SQLS 监控的最短执行时间:
SELECT SF_GET_LONG_TIME();
31)PERMANENT_MAGIC
定义:
INT
PERMANENT_MAGIC ()
功能说明:
返回数据库永久魔数。
参数说明:
无
返回值:
返回整型值:永久魔数。
举例说明:
获取数据库永久魔数:
SELECT PERMANENT_MAGIC();
32)SP_CANCEL_SESSION_OPERATION
定义:
SP_CANCEL_SESSION_OPERATION (
session_id bigint
)
或
SP_CANCEL_SESSION_OPERATION (
ep_seqno int,
session_id bigint
)
功能说明:
终止指定会话的操作。
参数说明:
session_id:指定会话 ID,可通过 V$SESSIONS 或 GV$SESSIONS 查询。
ep_seqno:指定会话所在的 DMDSC 集群节点的节点号。
返回值:
无
举例说明:
终止 ID 为 310509680 的会话的操作:
SP_CANCEL_SESSION_OPERATION (310509680);
33)SP_PURGE_TS
定义:
SP_PURGE_TS(
timeout int
)
功能说明:
清理已提交事务回滚记录。
参数说明:
timeout:清理用时,单位秒。
返回值:
无
举例说明:
清理已提交事务回滚记录,整个清理过程用时 5s。
SP_PURGE_TS(5);
34)SF_GET_SESSION_SQL
定义:
CLOB
SF_GET_SESSION_SQL (
sess_id bigint
)
或
CLOB
SF_GET_SESSION_SQL (
ep_seqno int,
sess_id bigint
)
功能说明:
返回指定会话上最近处理的完整的 SQL 语句。
参数说明:
sess_id:指定会话 ID,可通过 V$SESSIONS 或 GV$SESSIONS 查询。
ep_seqno:指定会话所在的 DMDSC 集群节点的节点号。
返回值:
指定会话上最近处理的完整的 SQL 语句。
举例说明:
在 ID 为 96710784 的会话上执行如下语句:
CREATE OR REPLACE PROCEDURE xx AS
BEGIN
SELECT SF_GET_SESSION_SQL(96710784);
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
重新打开一个会话,调用 xx 过程。可以查看到 ID 为 96710784 的会话上的最后一次执行的 SQL 语句。
SQL> call xx;
执行结果如下:
行号 SF_GET_SESSION_SQL(96710784)
---------- --------------------------------------
1 CREATE OR REPLACE PROCEDURE xx AS
BEGIN
SELECT SF_GET_SESSION_SQL(96710784);
EXCEPTION
WHEN OTHERS THEN NULL;
END;
35)SF_CLOB_LEN_IS_VALID
定义:
INT
SF_CLOB_LEN_IS_VALID (
clob
)
功能说明:
检查系统存储的 clob 字符长度是否正常。
参数说明:
clob:clob 对象。
返回值:
0:不正常,1:正常。
举例说明:
select SF_CLOB_LEN_IS_VALID ('PRODUCTION.PRODUCT.DESCRIPTION');
36)SP_VALIDATE_CLOB_LEN
定义:
SP_VALIDATE_CLOB_LEN(
clob
)
功能说明:
修复系统存储的 clob 字符长度。
参数说明:
clob:clob 对象。
举例说明:
SP_VALIDATE_CLOB_LEN ('PRODUCTION.PRODUCT.DESCRIPTION');
37)CHECK_INDEX_PAGE_USED
定义:
INT
CHECK_INDEX_PAGE_USED (
indexid int
)
功能说明:
检查 ID 为 indexid 的索引数据页(包含 BLOB 字段)分配是否与对应的簇分配情况一致。
参数说明:
indexid:索引 ID,如果不是数据库中的索引 ID 或者为空,则报错。
返回值:
1:一致。
0:不一致。
举例说明:
DROP TABLE T1_CHECK;
TABLE T1_CHECK(c1 INT);
SELECT CHECK_INDEX_PAGE_USED(a.id) FROM sysobjects a WHERE a.subtype$='INDEX' AND a.pid IN(SELECT id FROM sysobjects WHERE name = 'T1_CHECK');
38)SF_FILE_SYS_CHECK_REPORT
定义:
INT
SF_FILE_SYS_CHECK_REPORT(
ts_id int
)
功能说明:
校验检查指定表空间的簇是否正常。
参数说明:
ts_id:指定检测的表空间,如果表空间不存在则返回 0。
返回值:
1:表示表空间的簇都是正常的。
0:表空间中存在检验不通过的簇,问题的详细描述输出到服务器的运行日志中。
举例说明:
SELECT SF_FILE_SYS_CHECK_REPORT(4);
39)SP_LOAD_LIC_INFO()
定义:
VOID
SP_LOAD_LIC_INFO()
功能说明:
进行 DM 服务器的 LICENSE 校验。检查 LICENSE 与当前 DM 版本及系统运行环境是否一致,如果有不一致则 D 务器主动退出。
参数说明:
无
返回值:
无
举例说明:
SP_LOAD_LIC_INFO();
40)SF_PROXY_USER()
定义:
VARCHAR
SF_PROXY_USER()
功能说明:
返回当前代理用户名。
参数说明:
无
返回值:
返回当前代理用户名。
举例说明:
返回当前代理用户名:
SELECT SF_PROXY_USER();
41)SP_CLEAR_PLAN_CACHE_BY_DICT()
定义:
VOID
SP_CLEAR_PLAN_CACHE_BY_DICT(
dict_id int
)
功能说明:
清除涉及指定字典对象的缓存计划。
参数说明:
dict_id:指定字典对象的 ID 值。
返回值:
无
举例说明:
清除涉及 ID 值为 1250 的字典对象的缓存计划:
SP_CLEAR_PLAN_CACHE_BY_DICT(1250);
42)SF_GET_LOGIN_ID
定义:
INT
SF_GET_LOGIN_ID()
功能说明:
获取当前登录用户 ID,功能同系统函数 UID()。
参数说明:
无
返回值:
当前登录用户 ID。
举例说明:
获取当前登录用户 ID:
SELECT SF_GET_LOGIN_ID();
43)SF_GET_LOGIN_IP
定义:
VARCHAR
SF_GET_LOGIN_IP()
功能说明:
获取当前执行登录操作的 IP 地址。
参数说明:
无
返回值:
当前执行登录操作的 IP 地址。
举例说明:
获取当前执行登录操作的 IP 地址:
SELECT SF_GET_LOGIN_IP();
44)SF_GET_LOGIN_APP
定义:
VARCHAR
SF_GET_LOGIN_APP()
功能说明:
获取当前执行登录操作的应用名。
参数说明:
无
返回值:
当前执行登录操作的应用名。
举例说明:
获取当前执行登录操作的应用名:
SELECT SF_GET_LOGIN_APP();
45)SF_LOGIN_SUCCESS
定义:
DMBOOL
SF_LOGIN_SUCCESS()
功能说明:
判断当前会话是否登录成功,一般在 LOGIN/LOGON 触发器中使用。
参数说明:
无
返回值:
0:登录失败;
1:登录成功。
举例说明:
判断当前会话是否登录成功:
SELECT SF_LOGIN_SUCCESS();
46)SF_GET_TABLE_GROUP_INFO
定义:
CLOB
SF_GET_TABLE_GROUP_INFO(
schname varchar(128)
tabname varchar(128)
group_count int
)
功能说明:
将表数据按照数据页分布分组。
参数说明:
schname:模式名。
tabname:表名。
group_count:指定分组数,取值范围 1~1000。实际分组时由于数据页分布不同,返回结果分组数可能小于指定分组数。
返回值:
数据页分组信息。
举例说明:
将表 T1 数据按照数据页分布分组,指定分组数为 4:
SELECT SF_GET_TABLE_GROUP_INFO('SYSDBA','T1',4);
执行结果如下:
COLUMN: ROWID
GROUP_NO START END COUNT
1 1 2592 2592
2 2593 5184 2592
3 5185 7776 2592
4 7777 10000 2224
47)SF_GET_TABLE_GROUP_INFO_BY_ROWS
定义:
CLOB
SF_GET_TABLE_GROUP_INFO_BY_ROWS(
schname varchar(128)
tabname varchar(128)
row_count int
)
功能说明:
将表数据按照数据页分布分组
参数说明:
schname:模式名。
tabname:表名。
row_count:指定行数,除最后一组外每组需要达到的最小行数。
返回值:
数据页分组信息。
举例说明:
将表 T1 数据按照数据页分布分组,指定行数为 1000:
SELECT SF_GET_TABLE_GROUP_INFO_BY_ROWS('SYSDBA','T1',1000);
执行结果如下:
COLUMN: ROWID
GROUP_NO START END COUNT
1 AAAAAAAAAAAAAAAAAB AAAAAAAAAAAAAAAASA 1152
2 AAAAAAAAAAAAAAAASB AAAAAAAAAAAAAAAAkA 1152
3 AAAAAAAAAAAAAAAAkB AAAAAAAAAAAAAAAA2A 1152
4 AAAAAAAAAAAAAAAA2B AAAAAAAAAAAAAAABIA 1152
5 AAAAAAAAAAAAAAABIB AAAAAAAAAAAAAAABOI 392
48)SP_GET_TABLE_GROUP_INFO_BY_ROWS
定义:
CLOB
SP_GET_TABLE_GROUP_INFO_BY_ROWS(
schname varchar(128)
tabname varchar(128)
row_count int
)
功能说明:
将表数据按照数据页分布分组
参数说明:
schname:模式名。
tabname:表名。
row_count:指定行数,除最后一组外每组需要达到的最小行数。
返回值:
数据页分组信息结果集。
举例说明:
将表 T1 数据按照数据页分布分组,指定行数为 1000:
SP_GET_TABLE_GROUP_INFO_BY_ROWS('SYSDBA','T1',1000);
执行结果如下:
行号 GROUP_NO COLUMN START END COUNT
------ -------- ------ ------------------ ---------------- --------
1 1 ROWID AAAAAAAAAAAAAAAAAB AAAAAAAAAAAAAAAASA 1152
2 2 ROWID AAAAAAAAAAAAAAAASB AAAAAAAAAAAAAAAAkA 1152
3 3 ROWID AAAAAAAAAAAAAAAAkB AAAAAAAAAAAAAAAA2A 1152
4 4 ROWID AAAAAAAAAAAAAAAA2B AAAAAAAAAAAAAAABIA 1152
5 5 ROWID AAAAAAAAAAAAAAABIB AAAAAAAAAAAAAAABOI 392
3. 备份恢复管理
1)SF_BAKSET_BACKUP_DIR_ADD
定义:
INT
SF_BAKSET_BACKUP_DIR_ADD(
device_type varchar,
backup_dir varchar(256)
)
功能说明:
添加备份目录。若添加目录已经存在或者为库默认备份路径,则认为已经存在,系统不添加但也不报错。
参数说明:
device_type:待添加的备份目录对应存储介质类型,DISK 或者 TAPE。目前,无论指定介质类型为 DISK 或者 TAPE,都会同时搜索两种类型的备份集。
backup_dir:待添加的备份目录。
返回值:
1:目录添加成功;其它情况下报错。
举例说明:
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
2)SF_BAKSET_BACKUP_DIR_REMOVE
定义:
INT
SF_BAKSET_BACKUP_DIR_REMOVE (
device_type varchar,
backup_dir varchar(256)
)
功能说明:
删除备份目录。若删除目录为库默认备份路径,不进行删除,认为删除失败。若指定目录存在于记录的合法目录中,则删除;不存在或者为空则跳过,正常返回。
参数说明:
device_type:待删除的备份目录对应存储介质类型。待删除的备份目录对应存储介质类型,DISK 或者 TAPE。
backup_dir:待删除的备份目录。
返回值:
1:目录删除成功、目录不存在或者目录为空;0:目录为库默认备份路径;其他情况报错。
举例说明:
SELECT SF_BAKSET_BACKUP_DIR_REMOVE('DISK','/home/dm_bak');
3)SF_BAKSET_BACKUP_DIR_REMOVE_ALL
定义:
INT
SF_BAKSET_BACKUP_DIR_REMOVE_ALL()
功能说明:
清理全部备份目录,默认备份目录除外。
返回值:
1:目录全部清理成功;其它情况下报错。
举例说明:
SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
4)SF_BAKSET_CHECK
定义:
INT
SF_BAKSET_CHECK(
device_type varchar,
bakset_path varchar(256)
)
功能说明:
对备份集进行校验。
参数说明:
device_type:设备类型,disk 或 tape。
bakset_path:待校验的备份集目录。
返回值:
1:备份集目录存在且合法;否则报错。
举例说明:
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_check';
SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/ db_bak_for_check');
5)SF_BAKSET_REMOVE
定义:
INT
SF_BAKSET_REMOVE (
device_type varchar,
backsetpath varchar(256),
option integer
)
功能说明:
删除指定设备类型和指定备份集目录的备份集。一次只检查一个合法.meta 文件,然后删除对应备份集;若存在非法或非正常备份的.meta 文件,则报错或直接返回,不会接着检查下一个.meta 文件;若同一个备份集下还存在其它备份文件或备份集,则只删除备份文件,不会删除整个备份集。
参数说明:
device_type:设备类型,disk 或 tape。
backsetpath:待删除的备份集目录。
option:删除备份集选项,0 默认删除,1 级联删除。可选参数。并行备份集中子备份集不允许单独删除;目标备份集被其他备份集引用为基备份的,默认删除,报错;级联删除情况下,会递归将相关的增量备份也删除。
返回值:
1:备份集目录删除成功;其它情况下报错。
举例说明:
例 1
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove';
BACKUP DATABASE INCREMENT BACKUPSET '/home/dm_bak/db_bak_for_remove_incr';
SELECT SF_BAKSET_REMOVE('DISK','/home/dm_bak/db_bak_for_remove');
执行结果如下:
[-8202]:[/home/dm_bak/db_bak_for_remove_incr]的基备份,不能删除.
例 2
SELECT SF_BAKSET_REMOVE('DISK','/home/dm_bak/db_bak_for_remove',1);
执行结果如下:
1
6)SF_BAKSET_REMOVE_BATCH
定义:
INT
SF_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
range int,
obj_name varchar(257)
)
功能说明:
批量删除满足指定条件的所有备份集。
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
range:指定删除备份的级别。1 代表库级;2 代表表空间级;3 代表表级;4 代表归档备份。若指定 NULL,则忽略备份集备份级别的区分。
obj_name:待删除备份集中备份对象的名称,仅表空间级和表级有效。若为表级备份删除,则需指定完整的表名(模式.表名)。否则,将认为删除会话当前模式下的表备份。若指定为 NULL,则忽略备份集中备份对象名称区分。
返回值:
1:备份集目录删除成功;其它情况下报错。
举例说明:
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove';
BACKUP TABLESPACEMAIN FULL BACKUPSET '/home/dm_bak/ts_bak_for_remove';
SELECT SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL);
7)SF_BAKSET_REMOVE_BATCH_S
定义:
INT
SF_BAKSET_REMOVE_BATCH_S (
device_type varchar,
end_time datetime,
range int,
obj_name varchar(257)
)
功能说明:
批量安全删除满足指定条件的所有库级备份集,保留备份时间最新的库级完全备份集。
参数说明:
range:指定删除备份的级别。1代表库级,2代表表空间级,3代表表级,4代表归档备份。若指定为NULL,则忽略备份集备份级别的区分。SF_BAKSET_REMOVE_BATCH_S目前仅支持批量安全删除库级备份集,若参数指定为2、3、4,则SF_BAKSET_REMOVE_BATCH_S的功能与SF_BAKSET_REMOVE_BATCH相同。
其余参数说明与SF_BAKSET_REMOVE_BATCH相同。
返回值:
1:备份集目录删除成功;其它情况下报错。
举例说明:
SF_BAKSET_REMOVE_BATCH_S将保留库级完全备份db_bak_for_remove_s_2,删除其余三个备份集。
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove_s_1';
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove_s_2';
BACKUP TABLESPACEMAIN FULL BACKUPSET '/home/dm_bak/ts_bak_for_remove_s_1';
BACKUP TABLESPACEMAIN FULL BACKUPSET '/home/dm_bak/ts_bak_for_remove_s_2';
SELECT SF_BAKSET_REMOVE_BATCH_S ('DISK', now(), NULL, NULL);
8)SP_DB_BAKSET_REMOVE_BATCH
定义:
SP_DB_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime
)
功能说明:
批量删除指定时间之前的数据库备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
举例说明:
BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_batch_del';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SP_DB_BAKSET_REMOVE_BATCH('DISK', NOW());
9)SP_TS_BAKSET_REMOVE_BATCH
定义:
SP_TS_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
ts_name varchar(128)
)
功能说明:
批量删除指定表空间对象及指定时间之前的表空间备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
ts_name:表空间名,若未指定,则认为删除所有满足条件的表空间备份集。
举例说明:
BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_batch_del';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SP_TS_BAKSET_REMOVE_BATCH('DISK',NOW(),'MAIN');
10)SP_TAB_BAKSET_REMOVE_BATCH
定义:
SP_TAB_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime,
sch_name varchar(128),
tab_name varchar(128)
)
功能说明:
批量删除指定表对象及指定时间之前的表备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
sch_name:表所属的模式名。
tab_name:表名,只要模式名和表名有一个指定,就认为需要匹配目标;若均指定为 NULL,则认为删除满足条件的所有表备份。
举例说明:
CREATE TABLE TAB_FOR_BATCH_DEL(C1 INT);
BACKUP TABLE TAB_FOR_BATCH_DEL BACKUPSET'/home/dm_bak/tab_bak_for_batch_del';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SP_TAB_BAKSET_REMOVE_BATCH('DISK',NOW(),'SYSDBA','TAB_FOR_BATCH_DEL');
11)SP_ARCH_BAKSET_REMOVE_BATCH
定义:
SP_ARCH_BAKSET_REMOVE_BATCH (
device_type varchar,
end_time datetime
)
功能说明:
批量删除指定时间之前的归档备份集。使用该方法前,需要先使用 SF_BAKSET_BACKUP_DIR_ADD 添加将要删除的备份集目录,否则只删除默认备份路径下的备份集。
参数说明:
device_type:设备类型,disk 或 tape。指定 NULL,则忽略存储设备的区分。
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集,必须指定。
举例说明:
BACKUP ARCHIVELOG BACKUPSET '/home/dm_bak/arch_bak_for_batch_del';
SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SP_ARCH_BAKSET_REMOVE_BATCH('DISK', NOW());
4. 定时器管理
本小节中的定时器管理相关系统存储过程都必须在系统处于 MOUNT 状态时执行。
1)SP_ADD_TIMER
定义:
SP_ADD_TIMER(
timer_name varchar(128),
type int,
freq_month_week_interval int,
freq_sub_interval int,
freq_minute_interval int,
start_time time,
end_time time,
during_start_date datetime(0),
during_end_time datetime(0),
no_end_date_flag bool,
describe varchar(128),
is_valid bool
)
功能说明:
创建一个定时器
参数说明:
timer_name:定时器名称,应使用普通标识符,包含特殊符号可能导致无法正常使用。
type:定时器调度类型,取值范围为:1~9;1:执行一次;2:按日执行;3:按周执行;4:按月执行的第几天;5:按月执行的第一周;6:按月执行的第二周;7:按月执行的第三周;8:按月执行的第四周; 9:按月执行的最后一周。
freq_month_week_interval:间隔的月/周/天(调度类型决定)数。
freq_sub_interval:第几天/星期几/一个星期中的某些天。
freq_minute_interval:间隔的分钟数。
start_time:开始时间。
end_time:结束时间。
during_start_date:有效日期时间段的开始日期时间。只有当前时间大于该字段时,该定时器才有效。
during_end_date:有效日期时间段的结束日期时间。
no_end_date_flag:是否有结束日期(0:有结束日期;1:没有结束日期)。
describe:描述。
is_valid:定时器是否有效。
返回值:
无
说明:
-
type = 1 时,freq_sub_interval、freq_month_week_interval、freq_minute_interval、end_time、during_end_date 无效。只有 start_time,during_start_date 有意义。
-
type = 2 时,freq_month_week_interval 有效,表示相隔几天,取值范围为 1~100;freq_sub_interval 无效;freq_minute_interval <=24* 60 有效。
a) 当 freq_minute_interval = 0 时,当天只执行一次。end_time 无效;
b) 当 0<freq_minute_interval <=24*60 时,表示当天从 start_time 时间开始,每隔 freq_minute_interval 分钟执行一次;
c) 当 freq_minute_interval > 24* 60 时,非法。
-
type = 3 时,意思是每隔多少周开始工作(从开始日期算起)。计算方法为:(当前日期和开始日期的天数之差/7)% freq_month_week_interval =0 且当前是星期 freq_sub_interval,其中 freq_sub_interval 的八位如下表所示:
8 7 6 5 4 3 2 1 1-7 位分别代表星期天,星期一、星期二…、星期六,第 8 位无意义。这几位 为 1 表示满足条件,为 0 表示不满足条件。
a) 1<=freq_month_week_interval<=100,代表每隔多少周;
b) 1<=freq_sub_interval<=127 代表星期中的某些天;
c) freq_minute_interval 代表分钟数。
当 freq_minute_interval = 0 时,当天只执行一次。end_time 无效;当 freq_minute_interval > 0 且,表示当天可执行多次;当 freq_minute_interval > 24* 60 时,非法。
-
type = 4 时,每 freq_month_week_interval 个月的第 freq_sub_interval 日开始工作。其中,是否满足 freq_month_week_interval 个月的判断条件是:(月份的差 +(日期的差 >=15|| 日期的差 <= -15)?1:0 ) % freq_month_week_interval = 0 且当前是当月的 freq_sub_interval 日,表示满足条件;否则不满足。其中,“月份的差” 和 “日期的差”分别指的是系统当前时间和字段“during_start_date”中的月份差值和日期差值。
a) 1<=freq_sub_interval<31,代表第几日;
b) 1<=freq_month_week_interval<100,代表每隔多少个月;
c) freq_minute_interval 代表分钟数。
当 freq_minute_interval = 0 时,当天只执行一次。end_time 无效;当 freq_minute_interval > 0 且,表示当天可执行多次;当 freq_minute_interval >24* 60 时,非法。
-
type = 5,6,7,8,9 时,每 freq_month_week_interval 个月的第 type-4 周的周 freq_sub_interval 开始工作。其中,是否满足 freq_month_week_interval 个月的判断条件是:(月份的差 + 日期的差/15) % freq_month_week_interval = 0 且当前是当月的第 type-4 周的周 freq_sub_interval,表示满足条件;否则不满足。
a) 1<=freq_sub_interval<=7,代表星期天到星期六(星期天是一个星期的第一天);
b) freq_month_week_interval<100,代表每隔多少个月;
c) freq_minute_interval 代表分钟数。
当 freq_minute_interval = 0 时,当天只执行一次。end_time 无效;当 freq_minute_interval > 0 且,表示当天可执行多次;当 freq_minute_interval > 24* 60 时,非法。
-
如果 no_end_date_flag = TRUE:表示永远不结束,一直存在下去。
-
如果 is_valid= TRUE:表示定时器创建时就有效。
-
总结 type 取值 1~9 时,freq_sub_interval、freq_month_week_interval 和 freq_minute_interval 各自对应的有效值范围如下表所示:
举例说明:
创建一个定时器,每天 02:00 进行调度,开始日期:2011-02-01,结束日期:2011-09-01,间隔天数 1 天,每隔一分钟循环执行:
CALL SP_ADD_TIMER('TIMER1', 2, 1, 0, 1, '02:00:00', '20:00:00', '2011-02-01 14:30:34', '2011-09-01', 0, '每天凌晨两点进行调度', 1);
2)SP_DROP_TIMER
定义:
SP_DROP_TIMER (
timer_name varchar(128)
)
功能说明:
删除一个定时器。
参数说明:
timer_name:定时器名。
返回值:
无
举例说明:
删除定时器 TIMER1:
SP_DROP_TIMER('TIMER1');
3)SP_OPEN_TIMER
定义:
SP_OPEN_TIMER (
timer_name varchar(128)
)
功能说明:
打开一个定时器。
参数说明:
timer_name:定时器名。
返回值:
无
举例说明:
打开定时器 TIMER1:
SP_OPEN_TIMER('TIMER1');
4)SP_CLOSE_TIMER
定义:
SP_CLOSE_TIMER (
timer_name varchar(128)
)
功能说明:
关闭一个定时器。
参数说明:
timer_name:定时器名。
返回值:
无
举例说明:
关闭定时器 TIMER1:
SP_CLOSE_TIMER('TIMER1');
5. 数据复制管理
本小节的存储过程都与 DM 的数据复制功能相关,关于数据复制的概念和相关环境配置与操作可以参考《DM8 系统管理员手册》相关章节。
1)SP_INIT_REP_SYS*****
定义:
SP_INIT_REP_SYS(
create_flag int
);
功能说明:
创建或删除数据复制所需的系统表。
参数说明:
create_flag:为 1 表示创建复制所需系统表;为 0 表示删除这些系统表。
返回值:
无
举例说明:
创建复制所需的系统表:
SP_INIT_REP_SYS(1);
2)SP_RPS_ADD_GROUP
定义:
SP_RPS_ADD_GROUP(
group_name varchar(128),
group_desc varchar(1000)
);
功能说明:
创建复制组。
参数说明:
group_name:创建的复制组名称。
group_desc:复制组描述。
返回值:
无
备注:
指示 RPS 创建一个新的复制组。如果已存在同名复制组则报错。
举例说明:
创建复制组 REP_GRP_B2C:
SP_RPS_ADD_GROUP('REP_GRP_B2C','主从同步复制');
3)SP_RPS_DROP_GROUP
定义:
SP_RPS_DROP_GROUP(
group_name varchar(128)
);
功能说明:
删除复制组。
参数说明:
group_name:复制组名称。
返回值:
无
举例说明:
删除复制组 REP_GRP_B2C:
SP_RPS_DROP_GROUP ('REP_GRP_B2C');
4)SP_RPS_ADD_REPLICATION
定义:
SP_RPS_ADD_REPLICATION(
grp_name varchar(128),
rep_name varchar(128),
rep_desc varchar(1000),
minstance varchar(128),
sinstance varchar(128),
rep_timer varchar(128),
arch_path varchar(256)
);
功能说明:
创建复制关系。
参数说明:
grp_name:复制组名。
rep_name:复制名,必须在 RPS 上唯一。
rep_desc:复制描述。
minstance:主节点实例名,必须在 RPS 的 MAL 中已配置。
sinstance:从节点实例名,必须在 RPS 的 MAL 中已配置。
rep_timer:复制定时器名。借助定时器,可以设置复制数据的同步时机。如果是同步复制则为 NULL。
arch_path:主服务器上逻辑日志的完整归档路径。
返回值:
无
举例说明:
创建复制关系:
SP_RPS_ADD_REPLICATION ('REP_GRP_B2C', 'REPB2C', 'B到C的同步复制', 'B', 'C', NULL, '{ DEFARCHPATH}\REPB2C');
5)SP_RPS_DROP_REPLICATION
定义:
SP_RPS_DROP_REPLICATION (
rep_name varchar(128)
);
功能说明:
删除复制关系。
参数说明:
rep_name:复制名称。
返回值:
无
举例说明:
删除复制关系:
SP_RPS_DROP_REPLICATION ('REPB2C');
6)SP_RPS_SET_ROUTE_FAULT_TIMEOUT
定义:
SP_RPS_SET_ROUTE_FAULT_TIMEOUT (
rep_name varchar(128),
timeouts int
);
功能说明:
设置复制路径故障超时。
参数说明:
rep_name:复制关系名。
timeouts:故障超时值,以秒为单位。0 为立即超时;-1 表示无超时限制。
返回值:
无
备注:
该接口用于设置复制路径故障处理策略。设置后,RPS 如检测到复制路径产生故障,且故障持续超过设定的超时值后,则需要取消故障的复制关系。
举例说明:
设置复制路径故障超时:
SP_RPS_SET_ROUTE_FAULT_TIMEOUT ('REPB2C',10);
7)SP_RPS_SET_INST_FAULT_TIMEOUT
定义:
SP_RPS_SET_INST_FAULT_TIMEOUT (
inst_name varchar(128),
timeouts int
);
功能说明:
设置复制节点故障超时。
参数说明:
inst_name:复制节点实例名。
timeouts:故障超时值,以秒为单位。0 为立即超时;-1 表示无超时限制。
返回值:
无
举例说明:
设置复制节点故障超时:
SP_RPS_SET_INST_FAULT_TIMEOUT ('B',10);
8)SP_RPS_ADD_TIMER
定义:
SP_RPS_ADD_TIMER(
timer_name varchar(128),
timer_desc varchar(1000),
type$ int,
freq_interval int,
freq_sub_interval int,
freq_minute_interval int,
start_time time,
end_time time,
during_start_date datetime,
during_end_date datetime,
no_end_data_flag int
);
功能说明:
设置复制关系的定时器。
参数说明:
timer_name:定时器名。
timer_desc:定时器描述。
type$:定时器类型,取值如下:
1:执行一次;
2:每日执行;
3:每周执行;
4:按月执行的第几天;
5:按月执行的第一周;
6:按月执行的第二周;
7:按月执行的第三周;
8:按月执行的第四周;
9:按月执行的最后一周。
freq_interval:间隔的月/周(调度类型决定)数。
freq_sub_interval: 间隔天数。
freq_minute_interval:间隔的分钟数。
start_time:开始时间。
end_time:结束时间。
during_start_date:有效日期时间段的开始日期时间。
during_end_date:有效日期时间段结束日期时间。
no_end_data_flag:结束日期是否无效标识。0 表示结束日期有效;1 表示无效。
本过程的 TYPE$、FERQ_INTERVAL、FREQ_SUB_INTERVAL、FREQ_MINUTE_INTERVAL、START_TIME、END_TIME、DURING_START_DATE、DURING_END_DATE 和 NO_END_DATA_FLAG 分别与过程 SP_ADD_TIMER 的参数 TYPE、FREQ_MONTH_WEEK_INTERVAL、FREQ_SUB_INTERVAL、FREQ_MINUTE_INTERVAL、START_TIME、END_TIME、DURING_START_DATE、DURING_END_DATE 和 NO_END_DATE_FLAG 对应,其具体说明可参考过程 SP_ADD_TIMER 的说明。
返回值:
无
举例说明:
设置复制关系的定时器:
SP_RPS_ADD_TIMER ('TIMER1','按天计算', 1, 1, 0, 1, CURTIME, '23:59:59', NOW, NULL, 1);
9)SP_RPS_REP_RESET_TIMER
定义:
SP_RPS_REP_RESET_TIMER(
rep_name varchar(128),
timer_name varchar(128)
);
功能说明:
重新设置复制关系的定时器。
参数说明:
rep_name:复制名。
timer_name:新的定时器名。
返回值:
无
举例说明:
重新设置复制关系的定时器:
SP_RPS_REP_RESET_TIMER ('REPB2C', 'TIMER1');
10)SP_RPS_ADD_TAB_MAP
定义:
SP_RPS_ADD_TAB_MAP(
rep_name varchar(128),
mtab_schema varchar(128),
mtab_name varchar(128),
stab_schema varchar(128),
stab_name varchar(128),
read_only_mode int
);
功能说明:
添加表级复制映射。
参数说明:
rep_name:复制关系名。
mtab_schema:主表模式名。
mtab_name:主表名。
stab_schema:从表模式名。
stab_name:从表名。
read_only_mode:只读复制模式。1 表示只读模式,从表只接受复制更新;0 表示非只读模式。
返回值:
无
举例说明:
添加复制映射:
SP_RPS_ADD_TAB_MAP('REPB2C', 'USER1', 'T1', 'USER2', 'T2', 0);
11)SP_RPS_DROP_TAB_MAP
定义:
SP_RPS_DROP_TAB_MAP(
rep_name varchar(128),
mtab_schema varchar(128),
mtab_name varchar(128),
stab_schema varchar(128),
stab_name varchar(128)
);
功能说明:
删除表级复制映射。
参数说明:
rep_name:复制关系名。
mtab_schema:主表模式名。
mtab_name:主表名。
stab_schema:从表模式名。
stab_name:从表名。
返回值:
无
举例说明:
删除表级复制映射:
SP_RPS_DROP_TAB_MAP('REPB2C', 'USER1', 'T1', 'USER2', 'T2');
12)SP_RPS_ADD_SCH_MAP
定义:
SP_RPS_ADD_SCH_MAP(
rep_name varchar(128),
msch varchar(128),
ssch varchar(128),
read_only_mode int
);
功能说明:
添加模式级复制映射。
参数说明:
rep_name:复制关系名。
msch:主模式名。
ssch: 从表模式名。
read_only_mode:只读复制模式。1 表示只读模式,从表只接受复制更新;0 表示非只读模式。
返回值:
无
举例说明:
添加复制映射:
SP_RPS_ADD_SCH_MAP('REPB2C', 'USER1', 'USER2', 0);
13)SP_RPS_DROP_SCH_MAP
定义:
SP_RPS_DROP_SCH_MAP(
rep_name varchar(128),
msch varchar(128),
ssch varchar(128)
);
功能说明:
删除模式级复制映射。
参数说明:
rep_name:复制关系名。
msch:主模式名。
ssch:从模式名。
返回值:
无
举例说明:
删除模式级复制映射:
SP_RPS_DROP_SCH_MAP('REPB2C', 'USER1', 'USER2');
14)SP_RPS_ADD_DB_MAP
定义:
SP_RPS_ADD_DB_MAP(
rep_name varchar(128),
read_only_mode int
);
功能说明:
添加库级复制映射。
参数说明:
rep_name:复制关系名。
read_only_mode:只读复制模式,1 表示只读模式,从表只接受复制更新,0 表示非只读模式。
返回值:
无
举例说明:
添加库级复制映射:
SP_RPS_ADD_DB_MAP('REPB2C', 0);
15)SP_RPS_DROP_DB_MAP
定义:
SP_RPS_DROP_DB_MAP(
rep_name varchar(128)
);
功能说明:
删除库级复制映射。
参数说明:
rep_name:复制关系名。
返回值:
无
举例说明:
删除库级复制映射:
SP_RPS_DROP_DB_MAP('REPB2C');
16)SP_RPS_SET_BEGIN
定义:
SP_RPS_SET_BEGIN(
grp_name varchar(128),
);
功能说明:
开始复制设置。
参数说明:
grp_name:复制组名。
返回值:
无
备注:
开始对指定复制组进行属性设置。创建/删除复制关系与创建/删除复制映射等接口都必须在此接口调用后执行,否则会报错“错误的复制设置序列”。同一会话中也不能同时开始多个复制设置。
举例说明:
复制组 REPB2C 开始复制:
SP_RPS_SET_BEGIN(' REP_GRP_B2C');
17)SP_RPS_SET_APPLY
定义:
SP_RPS_SET_APPLY ();
功能说明:
提交复制设置,保存并提交本次设置的所有操作。如果需要继续设置,则必须重新调用 SP_RPS_SET_BEGIN。
参数说明:
无
返回值:
无
举例说明:
提交复制设置:
SP_RPS_SET_APPLY ()
18)SP_RPS_SET_CANCEL
定义:
SP_RPS_SET_CANCEL ();
功能说明:
放弃复制设置,放弃本次设置的所有操作。如果需要重新设置,则必须再次调用 SP_RPS_SET_BEGIN。
参数说明:
无
返回值:
无
举例说明:
放弃复制设置:
SP_RPS_SET_CANCEL();
6. 模式对象相关信息管理
1)SP_TABLEDEF
定义:
SP_TABLEDEF (
schname varchar(128),
tablename varchar(128)
)
功能说明:
以结果集的形式返回表的定义,当表定义过长时,会以多行返回。
参数说明:
schname:模式名。
tablename:表名。
返回值:
无
举例说明:
CALL SP_TABLEDEF('PRODUCTION','PRODUCT');
2)SP_VIEWDEF
定义:
void
SP_VIEWDEF (
schname varchar(128),
viewname varchar(128)
)
功能说明:
以结果集的形式返回视图的定义。
参数说明:
schname:模式名。
viewname:视图名。
返回值:
无
举例说明:
SP_VIEWDEF('PURCHASING','VENDOR_EXCELLENT');
3)SF_VIEW_EXPIRED
定义:
INT
SF_VIEW_EXPIRED(
schname varchar(128),
viewname varchar(128)
)
功能说明:
检查当前系统表中视图列定义是否有效。
返回值:
返回 0 或 1。0 表示有效;1 表示无效。
举例说明:
CREATE TABLE T_01_VIEW_DEFINE_00(C1 INT,C2 INT);
CREATE VIEW TEST_T_01_VIEW_DEFINE_00 AS SELECT* FROM T_01_VIEW_DEFINE_00;
select sf_view_expired('SYSDBA','TEST_T_01_VIEW_DEFINE_00');
//查询结果为0
ALTER TABLE T_01_VIEW_DEFINE_00 DROP COLUMN C1 CASCADE ;
select sf_view_expired('SYSDBA','TEST_T_01_VIEW_DEFINE_00');
//查询结果为1
4)CHECKDEF
定义:
VARCHAR
CHECKDEF (
consid int,
preflag int
)
功能说明:
获得 check 约束的定义。
参数说明:
consid:check 约束 id 号。
preflag:对象前缀个数。1 表示导出模式名;0 表示只导出对象名。
返回值:
check 约束的定义。
举例说明:
CREATE TABLE TEST_CHECKDEF(C1 INT CHECK(C1>10));
//通过查询系统表
select a.name, a.id from sysobjects a, sysobjects b where b.name='TEST_CHECKDEF' and a.pid=b.id and a.subtype$='CONS';
//得到约束ID为134217770
SELECT CHECKDEF(134217770,1);
5)CONSDEF
定义:
VARCHAR
CONSDEF (
indexid int,
preflag int
)
功能说明:
获取 unique 约束的定义。
参数说明:
indexid:索引号数字字符串。
preflag:对象前缀个数。1 表示导出模式名;0 表示只导出对象名。
返回值:
unique 约束的定义。
举例说明:
CREATE TABLE TEST_CONSDEF(C1 INT PRIMARY ,, CONSTRAINT CONS1 UNIQUE(C2));
//通过查询系统表
SELECT C.INDEXID FROM SYSOBJECTS O,SYSCONS C WHERE O.NAME='CONS1' AND O.ID=C.ID;
//系统生成C2上的INDEX为33555481
SELECT CONSDEF(33555481,1);
6)INDEXDEF
定义:
VARCHAR
INDEXDEF (
indexid int,
preflag int
)
功能说明:
获取 index 的创建定义。
参数说明:
indexid:索引 ID。
preflag:对象前缀个数。1 表示导出模式名;0 表示只导出对象名。
返回值:
索引的创建定义。
举例说明:
CREATE INDEX PRODUCT_IND ON PRODUCTION.PRODUCT(PRODUCTID);
//查询系统表得到索引ID
SELECT NAME, ID FROM SYSOBJECTS WHERE NAME='PRODUCT_IND' AND SUBTYPE$='INDEX';
SELECT indexdef(33555530,1);
7)SP_REORGANIZE_INDEX
定义:
SP_REORGANIZE_INDEX (
schname varchar(128),
indexname varchar(128)
)
功能说明:
对指定索引进行空间整理。
参数说明:
schname:模式名。
indexname:索引名。
返回值:
无
举例说明:
CREATE INDEX PRODUCT_IND ON PRODUCTION.PRODUCT(PRODUCTID);
SP_REORGANIZE_INDEX('PRODUCTION','PRODUCT_IND');
8)SP_REBUILD_INDEX
定义:
SP_REBUILD_INDEX (
schname varchar(128),
indexed int
)
功能说明:
重建索引。约束:1. 水平分区子表、临时表和系统表上建的索引不支持重建;2. 虚索引和聚集索引不支持重建。
参数说明:
schname:模式名。
indexid:索引 ID。
返回值:
无
举例说明:
CREATE INDEX PRODUCT_IND ON PRODUCTION.PRODUCT(PRODUCTID);
//查询系统表得到索引ID
SP_REBUILD_INDEX('SYSDBA', 33555530);
9)CONTEXT_INDEX_DEF
定义:
VARCHAR
CONTEXT_INDEX_DEF (
indexed int,
preflag int
)
功能说明:
获取 context_index 的创建定义。
参数说明:
indexid:索引 ID。
preflag:对象前缀个数。1 表示导出模式名;0 表示只导出对象名。
返回值:
索引的创建定义。
举例说明:
create context index product_cind on production.product(name) LEXER DEFAULT_LEXER;
//查询系统表得到全文索引ID
select name, id from sysobjects where name='PRODUCT_CINd';
select context_index_def(33555531, 1);
10)SYNONYMDEF
定义:
VARCHAR
SYNONYMDEF (
username varchar(128),
synname varchar(128),
type int,
preflag int
)
功能说明:
获取同义词的创建定义。
参数说明:
username:用户名。
synname:同义词名。
type:同义词类型。 0,public 1,user。
preflag:对象前缀个数。1 表示导出模式名;0 表示只导出对象名。
返回值:
同义词的创建定义。
举例说明:
SELECT SYNONYMDEF('SYSDBA', 'SYSOBJECTS',0,1);
11)SEQDEF
定义:
VARCHAR
SEQDEF (
seqid int,
preflag int
)
功能说明:
获取序列的创建定义。
参数说明:
seqid:序列 id 号。
preflag:对象前缀个数。1 表示导出模式名;0 表示只导出对象名。
返回值:
序列的创建定义。
举例说明:
CREATE SEQUENCE SEQ1;
SELECT ID FROM SYSOBJECTS WHERE NAME='SEQ1'; //查出id为167772160
SELECT SEQDEF(167772160, 1);
12)IDENT_CURRENT
定义:
INT
IDENT_CURRENT (
fulltablename varchar(8187)
)
功能说明:
获取自增列当前值。
参数说明:
fulltablename:表全名;格式为“模式名.表名”。
返回值:
自增列当前值。
举例说明:
SELECT IDENT_CURRENT('PRODUCTION.PRODUCT');
13)IDENT_SEED
定义:
INT
IDENT_SEED (
fulltablename varchar(8187)
)
功能说明:
获取自增列种子。
参数说明:
fulltablename:表全名;格式为“模式名.表名”。
返回值:
自增列种子。
举例说明:
select ident_seed('PRODUCTION.PRODUCT');
14)IDENT_INCR
定义:
INT
IDENT_INCR (
fulltablename varchar(8187)
)
功能说明:
获取自增列增量值 increment。
参数说明:
fulltablename:表全名;格式为“模式名.表名”。
返回值:
自增列增量值 increment。
举例说明:
select ident_incr('PRODUCTION.PRODUCT');
15)SCOPE_IDENTITY
定义:
INT
SCOPE_IDENTITY ();
功能说明:
返回插入到同一作用域中的 identity 列内的最后一个 identity 值。
返回值:
RVAL:函数返回值,长度为 8。
举例说明:
详见 GLOBAL_IDENTITY 例子。
16)GLOBAL_IDENTITY
定义:
INT
GLOBAL_IDENTITY();
功能说明:
返回在当前会话中的任何表内所生成的最后一个标识值,不受限于特定的作用域。一个作用域就是一个模块:存储过程、触发器、函数或批处理,若两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
返回值:
RVAL:函数返回值,长度为 8。
举例说明:
DROP TABLE T1;
DROP TABLE T2;
CREATE TABLE T1(C1 INT IDENTITY(1,1), C2 CHAR);
CREATE TABLE T2(C1 INT IDENTITY(1,1), C2 CHAR);
INSERT INTO T1(C2) VALUES('a');
INSERT INTO T1(C2) VALUES('b');
INSERT INTO T1(C2) VALUES('c');
COMMIT;
SELECT SCOPE_IDENTITY();
////返回值:3
SELECT GLOBAL_IDENTITY();
//返回值:3
CREATE OR REPLACE TRIGGER TRI1 AFTER INSERT ON T1
BEGIN
INSERT INTO T2(C2) VALUES('a');
END;
/
INSERT INTO T1(C2) VALUES('d');
COMMIT;
SELECT SCOPE_IDENTITY();
//返回值:4
SELECT GLOBAL_IDENTITY();
//返回值:1
17)SF_CUR_SQL_STR
定义:
CLOB
SF_CUR_SQL_STR (
is_top int
)
功能说明:
用于并行环境中,获取当前执行的 SQL 语句。
参数说明:
is_top:取 0 时返回当前层计划执行的语句;取 1 时返回顶层计划语句。
返回值:
sql 语句。
举例说明:
SELECT SF_CUR_SQL_STR(0);
18)SF_COL_IS_CHECK_KEY
定义:
INT
SF_COL_IS_CHECK_KEY (
key_num int,
key_info varchar(8187),
col_id int
)
功能说明:
判断一个列是否为 CHECK 约束列。
参数说明:
key_num:约束列总数。
key_info:约束列信息。
col_id:列 id。
返回值:
返回 1 表示该列是 check 约束列,否则返回 0。
举例说明:
CREATE TABLE TC (C1 INT, C2 DOUBLE, C3 DATE, C4 VARCHAR, CHECK(C1 < 100 AND C4 IS NOT NULL));
SELECT TBLS.NAME, COLS.NAME, COLS.COLID, COLS.TYPE$, COLS.LENGTH$, COLS.SCALE, COLS.NULLABLE$, COLS.DEFVAL
FROM (SELECT ID, NAME FROM SYS.SYSOBJECTS WHERE NAME = 'TC' AND TYPE$ = 'SCHOBJ' AND SUBTYPE$ = 'UTAB' AND SCHID = (SELECT ID FROM SYS.SYSOBJECTS WHERE NAME = 'SYSDBA' AND TYPE$ = 'SCH')) AS TBLS,
(SELECT ID, PID, INFO1, INFO6 FROM SYS.SYSOBJECTS WHERE TYPE$ = 'TABOBJ' AND SUBTYPE$ = 'CONS') AS CONS_OBJ,SYS.SYSCOLUMNS AS COLS,SYS.SYSCONS AS CONS WHERE TBLS.ID = CONS_OBJ.PID AND TBLS.ID = COLS.ID AND SF_COL_IS_CHECK_KEY(CONS_OBJ.INFO1, CONS_OBJ.INFO6, COLS.COLID) = 1 AND CONS.TABLEID = TBLS.ID AND CONS.TYPE$ = 'C';
19)SF_REPAIR_HFS_TABLE
定义:
INT
SF_REPAIR_HFS_TABLE (
schname varchar(128),
tabname varchar(128)
)
功能说明:
HUGE 表日志属性为 LOG NONE 时,如果系统出现故障,导致该表数据不一致,则通过该函数修复表数据,保证数据的一致性。
参数说明:
schname:模式名。
tabname:表名。
返回值:
成功返回 0,否则报错。
举例说明:
CREATE HUGE TABLE T_DM(C1 INT, C2 VARCHAR(20)) LOG NONE;
INSERT INTO T_DM VALUES(99, 'DM8');
COMMIT;
UPDATE T_DM SET C1 = 100;//系统故障
SF_REPAIR_HFS_TABLE('SYSDBA','T_DM');
20)SP_ENABLE_EVT_TRIGGER
定义:
SP_ENABLE_EVT_TRIGGER (
schname varchar(128),
triname varchar(128),
enable bool
)
功能说明:
禁用/启用指定的事件触发器。
参数说明:
schname:模式名。
triname:触发器名。
enable:1 表示启用,0 表示禁用。
返回值:
成功返回 0,否则报错。
举例说明:
SP_ENABLE_EVT_TRIGGER('SYSDBA', 'TRI_1', 1);
SP_ENABLE_EVT_TRIGGER('SYSDBA', 'TRI_1', 0);
21)SP_ENABLE_ALL_EVT_TRIGGER
定义:
SP_ENABLE_ALL_EVT_TRIGGER (
enable bool
)
功能说明:
禁用/启用数据库上的所有事件触发器。
参数说明:
ENABLE:1 表示启用,0 表示禁用。
返回值:
成功返回 0,否则报错。
举例说明:
SP_ENABLE_ALL_EVT_TRIGGER(1);
SP_ENABLE_ALL_EVT_TRIGGER(0);
22)SF_GET_TRIG_DEPENDS
定义:
BINARY
SF_GET_TRIG_DEPENDS(
trigid int
)
功能说明:
查看触发器的依赖项。
参数说明:
trigid:触发器 id。
返回值:
触发器的依赖项。
举例说明:
CREATE TABLE T1_TRI_10000(OBJECTTYPE VARCHAR);
CREATE TRIGGER TRI1_TRI_10000 BEFORE CREATE ON DATABASE BEGIN INSERT INTO T1_TRI_10000 VALUES(:EVENTINFO.OBJECTTYPE); END;
SELECT SF_GET_TRIG_DEPENDS((SELECT ID FROM SYSOBJECTS WHERE NAME LIKE 'TRI1_TRI_10000'));
23)SF_GET_PROC_DEPENDS
定义:
BINARY
SF_GET_PROC_DEPENDS(
procid int
)
功能说明:
查看过程/函数的依赖项。
参数说明:
procid:过程/函数 id。
返回值:
过程/函数的依赖项。
举例说明:
CREATE OR REPLACE FUNCTION FUN1 (A INT) RETURN INT AS
S INT;
BEGIN
S:=A*A;
RETURN S;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
CREATE OR REPLACE FUNCTION FUN2 (A INT, B INT) RETURN INT AS
S INT;
BEGIN
S:=A+B+FUN1(A);
RETURN S;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/
SELECT SF_GET_PROC_DEPENDS((SELECT ID FROM SYSOBJECTS WHERE NAME LIKE 'FUN2'));
24)SP_TMP_TABLE_CLEAR
定义:
SP_TMP_TABLE_CLEAR(
schname varchar(128),
tablename varchar(128)
)
功能说明:
清除指定的临时表中的数据,本操作不会改变事务的状态,但无论事务后续提交或回滚,临时表清除操作都被永久化。
参数说明:
schname:模式名。
tablename:临时表名。
返回值:
无
举例说明:
SYSDBA 用户创建临时表 T1,之后清除临时表 T1 的数据:
CREATE TEMPORARY TABLE T1(c1 int);
INSERT INTO T1 VALUES(1);
SP_TMP_TABLE_CLEAR('SYSDBA','T1');
25)SF_GET_VIEW_DEPEND_OBJINFO
定义:
SF_GET_VIEW_DEPEND_OBJINFO (
schname varchar(128),
viewname varchar(128),
col_seq int
depend_flag int
)
功能说明:
获取 viewname 视图所依赖的对象信息。只支持视图查询项表达式为列类型情况,经过表达式计算得来的视图列不支持。
参数说明:
schname:模式名。
viewname:视图名。
col_seq: 视图的列序号。0 表示返回视图中所有列依赖的基表列信息。N 表示返回视图中第 N 列所依赖的基表列信息。
depend_flag:需要返回对象类型标记。目前只支持 1 返回基表对象信息。
返回值:
视图依赖的对象信息。
举例说明:
返回 V1 中第二列 CITY 所依赖的基表列信息。
create view V1 AS select ADDRESS1,CITY from PERSON.ADDRESS;
select SF_GET_VIEW_DEPEND_OBJINFO ('SYSDBA','V1',2,1);
返回 V2 中第一列 ADDRESS1+10 所依赖的基表列信息,表达式不支持,显示为 UNKOWN。
create view V2 AS select ADDRESS1,CITY from PERSON.ADDRESS;
select SF_GET_VIEW_DEPEND_OBJINFO ('SYSDBA','V2',1,1);
26)SP_GET_MV_DEPEND_COLS_INFO
定义:
SP_GET_MV_DEPEND_COLS_INFO (
schname varchar(128),
mv_name varchar(128)
)
功能说明:
获取 mv_name 物化视图的列所直接依赖的对象列信息。当前用户必须对物化视图具有查询权限,否则不支持。
参数说明:
schname:模式名。
mv_name:物化视图名。
返回值:
物化视图依赖的对象列信息。
举例说明:
返回 MV1 所依赖的基表 T1 的列信息。
CREATE TABLE T1(C1 INT, C2 INT);
CREATE MATERIALIZED VIEW MV1 REFRESH ON COMMIT AS SELECT C1, C2 FROM T1;
SP_GET_MV_DEPEND_COLS_INFO('SYSDBA','MV1');
返回 MV2 所依赖的基视图 V1 的列信息。
create view V1 AS select c1, c2 from T1;
CREATE MATERIALIZED VIEW MV2 REFRESH ON COMMIT AS SELECT C1, C2 FROM v1;
SP_GET_MV_DEPEND_COLS_INFO('SYSDBA','MV2');
7. 数据守护管理
本小节的存储过程都与 DM 的数据守护功能相关,关于数据守护的概念和相关环境配置与操作可以参考《DM8 数据守护与读写分离集群 V4.0》相关章节。
1)SP_SET_OGUID
定义:
SP_SET_OGUID (
oguid int
)
功能说明:
设置主备库监控组的 ID 号。
参数说明:
oguid:oguid。
返回值:
无
举例说明:
SP_SET_OGUID (451245);
2)SF_GET_BROADCAST_ADDRESS
定义:
VARCHAR
SF_GET_BROADCAST_ADDRESS (
ip_addr varchar,
subnet_mask varchar
)
功能说明:
根据 IPv4 的 IP 地址以及子网掩码计算广播地址。
参数说明:
ip_addr:输入的 IP 地址。
subnet_mask:子网掩码地址。
返回值:
广播地址。
举例说明:
select sf_get_broadcast_address('15.16.193.6','255.255.248.0');
3)SP_SET_RT_ARCH_VALID
定义:
SP_SET_RT_ARCH_VALID ()
功能说明:
设置实时归档有效。
参数说明:
无
返回值:
无
举例说明:
SP_SET_RT_ARCH_VALID ();
4)SP_SET_RT_ARCH_INVALID
定义:
SP_SET_RT_ARCH_INVALID ()
功能说明:
设置实时归档无效。
参数说明:
无
返回值:
无
举例说明:
SP_SET_RT_ARCH_INVALID ();
5)SF_GET_RT_ARCH_STATUS
定义:
VARCHAR
SF_GET_RT_ARCH_STATUS ()
功能说明:
获取实时归档状态。
参数说明:
无
返回值:
有效:VALID。
无效:INVALID。
举例说明:
SELECT SF_GET_RT_ARCH_STATUS ();
6)SP_SET_ARCH_STATUS
定义:
SP_SET_ARCH_STATUS (
arch_dest varchar,
arch_status int
)
功能说明:
设置指定归档目标的归档状态。
参数说明:
arch_dest:归档目标名称。
arch_status:要设置的归档状态,取值 0 或 1,0 表示有效状态,1 表示无效状态。
返回值:
无
举例说明:
SP_SET_ARCH_STATUS('DM1', 1);
7)SP_SET_ALL_ARCH_STATUS
定义:
SP_SET_ALL_ARCH_STATUS (
arch_status int
)
功能说明:
设置所有归档目标的归档状态。
参数说明:
arch_status:要设置的归档状态,取值 0 或 1,0 表示有效状态,1 表示无效状态。
返回值:
无
举例说明:
SP_SET_ALL_ARCH_STATUS(1);
8)SP_APPLY_KEEP_PKG
定义:
SP_APPLY_KEEP_PKG()
功能说明:
APPLY 备库的 KEEP_PKG 数据。
参数说明:
无
返回值:
无
举例说明:
SP_APPLY_KEEP_PKG();
9)SP_DISCARD_KEEP_PKG
定义:
SP_DISCARD_KEEP_PKG()
功能说明:
丢弃备库的 KEEP_PKG 数据。
参数说明:
无
返回值:
无
举例说明:
SP_DISCARD_KEEP_PKG();
10)SP_CLEAR_ARCH_SEND_INFO
定义:
SP_CLEAR_ARCH_SEND_INFO()
或
SP_CLEAR_ARCH_SEND_INFO(inst_name varchar)
功能说明:
此系统函数在主库上执行有效,用于清理到备库最近 N 次的归档发送信息。
如果不指定 INST_NAME,则清理所有备库最近 N 次的归档发送信息。
N 值为 V$ARCH_SEND_INFO 中的 RECNT_SEND_CNT 值。
参数说明:
inst_name:备库实例名。
返回值:
无
举例说明:
SP_CLEAR_ARCH_SEND_INFO();
SP_CLEAR_ARCH_SEND_INFO('GRP1_RWW_02');
11)SP_CLEAR_RAPPLY_STAT
定义:
SP_CLEAR_RAPPLY_STAT()
功能说明:
此系统函数在备库上执行有效,用于清理此备库最近 N 次的日志重演信息。
N 值为 V$RAPPLY_STAT 中的 RECNT_APPLY_NUM 值。
参数说明:
无
返回值:
无
举例说明:
SP_CLEAR_RAPPLY_STAT();
12)SP_ADD_TIMELY_ARCH(
定义:
SP_ADD_TIMELY_ARCH(
inst_name varchar
)
功能说明:
OPEN 状态下动态扩展 TIMELY 归档。
参数说明:
inst_name:TIMELY 归档的目标实例名。
返回值:
无
举例说明:
SP_ADD_TIMELY_ARCH('DB3');
13)SF_MAL_CONFIG
定义:
SF_MAL_CONFIG(
cfg_flag int,
bro_flag int
)
功能说明:
设置 MAL 配置状态。
参数说明:
cfg_flag:1,设置配置状态;0 取消配置状态。
bro_flag:1,多节点广播设置;0 本地设置。
返回值:
无
举例说明:
SF_MAL_CONFIG(1,0);
14)SF_MAL_INST_ADD
定义:
SF_MAL_INST_ADD(
item_name varchar,
inst_name varchar,
mal_ip varchar,
mal_port int,
mal_inst_ip varchar,
mal_inst_port int
)
功能说明:
增加 MAL 配置项。
参数说明:
item_name:配置项名称。
inst_name:实例名。
mal_ip:MAL IP 地址。
mal_port:MAL 端口。
mal_inst_ip:实例 IP 地址。
mal_inst_port:实例端口。
举例说明:
SF_MAL_INST_ADD('MAL_INST3','EP03','192.168.0.14', 5378, '192.168.0.14',5238);
15)SF_MAL_CONFIG_APPLY
定义:
SF_MAL_CONFIG_APPLY()
功能说明:
将 MAL 配置生效。
参数说明:
无
举例说明:
sf_mal_config_APPLY();
16)SP_SET_ARCH_SEND_UNTIL_TIME
定义:
SP_SET_ARCH_SEND_UNTIL_TIME(
dest varchar,
until_time varchar
)
功能说明:
设置异步备库重演到指定时间。
参数说明:
dest:异步归档目标库实例名。
until_time:重演到指定时间点。若为空串,则表示取消重演到指定时间点。
举例说明:
SP_SET_ARCH_SEND_UNTIL_TIME('EP01', '2020-09-14 10:00:00');
取消重演到指定时间点:
SP_SET_ARCH_SEND_UNTIL_TIME('EP01', '');
17)SP_GET_ARCH_SEND_UNTIL_TIME
定义:
VARCHAR
SF_GET_ARCH_SEND_UNTIL_TIME(
dest varchar
)
功能说明:
获取异步备库的重演指定时间。
参数说明:
dest:异步归档目标库实例名。
举例说明:
SP_GET_ARCH_SEND_UNTIL_TIME('EP01');
18)SP_NOTIFY_ARCH_SEND
定义:
SP_NOTIFY_ARCH_SEND(
dest varchar
)
功能说明:
通知源库立即发送归档到指定异步备库。
参数说明:
dest:异步归档目标库实例名。
举例说明:
SP_NOTIFY_ARCH_SEND('EP01');
- SF_GET_ARCHIVE_SIZE
定义:
BIGINT
SF_GET_ARCHIVE_SIZE(
dsc_seqno int,
type int,
start bigint
)
功能说明:
根据指定的节点号、比较方式和起始位置,计算出该节点上从起始位置开始的剩余归档日志量。
此系统函数主要用于备库归档无效场景下计算主备相差的日志量。在备库归档有效(和主库保持实时同步)的情况下,主库很可能会因为日志包还未归档导致无法计算日志量。
参数说明:
dsc_seqno:指定 DMDSC 节点号。若调用该函数的数据库为单节点库,则该字段需要传入 0。
type:比较方式。取值范围 0 或 1。0:使用全局包序号 G_SEQNO 进行比较;1:使用 LSN 进行比较。
start:起始位置。若 type 输入值为 0,则此字段需要传入起始的 G_SEQNO;若 type 为 1,则该字段需要传入起始 LSN。
返回值:
返回从 start 指定位置开始的剩余归档日志量,单位为字节(Byte)。
举例说明:
查询 0 号节点上从 G_SEQNO=8000 开始的剩余归档日志量:
SELECT SF_GET_ARCHIVE_SIZE(0, 0, 8000);
查询 1 号节点上从 LSN=40000 开始的剩余归档日志量:
SELECT SF_GET_ARCHIVE_SIZE(1, 1, 40000);
8. MPP 管理
1)SP_SET_SESSION_MPP_SELECT_LOCAL
定义:
SP_SET_SESSION_MPP_SELECT_LOCAL (
local_flag int
)
功能说明:
MPP 系统下设置当前会话是否只查询本节点数据。如果不设置,表示可以查询全部节点数据。
参数说明:
local_flag:设置标记。1 代表只查询本节点数据;0 代表查询全部节点数据。
返回值:
无
举例说明:
SP_SET_SESSION_MPP_SELECT_LOCAL(1);
2)SF_GET_SESSION_MPP_SELECT_LOCAL
定义:
INT
SF_GET_SESSION_MPP_SELECT_LOCAL ()
功能说明:
查询 MPP 系统下当前会话是否只查询本节点数据。
参数说明:
无
返回值:
1 代表只查询本节点数据,0 查询全部节点数据。
举例说明:
SELECT SF_GET_SESSION_MPP_SELECT_LOCAL();
3)SP_SET_SESSION_LOCAL_TYPE
定义:
SP_SET_SESSION_LOCAL_TYPE (
ddl_flag int
)
功能说明:
MPP 下本地登录时,设置本会话上是否允许 DDL 操作。本地登录默认不允许 DDL 操作。
参数说明:
ddl_flag:为 1 时表示允许当前本地会话执行 DDL 操作,为 0 时则不允许。
返回值:
无
举例说明:
MPP 下本地登录会话:
SP_SET_SESSION_LOCAL_TYPE (1);
CREATE TABLE TEST(C1 INT);
SP_SET_SESSION_LOCAL_TYPE (0);
4)SF_GET_SELF_EP_SEQNO
定义:
INT
SF_GET_SELF_EP_SEQNO ()
功能说明:
获取本会话连接的 EP 站点序号。
参数说明:
无
返回值:
获取本会话连接的 EP 站点序号。
举例说明:
select SF_GET_SELF_EP_SEQNO();
5)SP_GET_EP_COUNT
定义:
INT
SP_GET_EP_COUNT (
sch_name varchar(128),
tab_name varchar(128)
);
功能说明:
统计 MPP 环境下表在各个站点的数据行数。
参数说明:
sch_name:表所在模式名。
tab_name:表名。
举例说明:
SP_GET_EP_COUNT('SYSDBA','T');
6)SF_MPP_INST_ADD
定义:
SF_MPP_INST_ADD(
item_name varchar,
inst_name varchar
)
功能说明:
增加 MPP 实例配置。
参数说明:
item_name:配置项名称。
inst_name:实例名。
举例说明:
SF_MPP_INST_ADD(' service_name3', 'EP03');
7)SF_MPP_INST_REMOVE
定义:
SF_MPP_INST_REMOVE(
inst_name varchar
)
功能说明:
删除 MPP 实例。
参数说明:
inst_name:实例名。
举例说明:
SF_MPP_INST_REMOVE('EP03');
9. 日志与检查点管理
1)CHECKPOINT
定义:
INT
CHECKPOINT (
rate int
)
功能说明:
设置检查点。需要注意的是:在 DSC 环境下,OK 节点个数大于 1 时,MOUNT 状态下调用该函数不会生效。
参数说明:
rate:刷脏页百分比,取值范围:1~100。
返回值:
检查点是否成功,0 表示成功,非 0 表示失败。
举例说明:
设置刷脏页百分比为 30% 的检查点:
SELECT CHECKPOINT(30);
2)SF_ARCHIVELOG_DELETE_BEFORE_TIME
定义:
INT
SF_ARCHIVELOG_DELETE_BEFORE_TIME (
time datetime
)
功能说明:
数据库以归档模式打开的情况下,删除指定时间之前的归档日志文件,包括本地归档和远程归档。待删除的文件必须处于未被使用状态。
参数说明:
time:指定删除的最大关闭时间,若大于当前使用归档日志文件的创建时间,则从当前使用归档文件之前的归档日志文件开始删除。
返回值:
删除归档日志文件数,-1 表示出错。
举例说明:
删除三天之前的归档日志:
SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 3);
3)SF_ARCHIVELOG_DELETE_BEFORE_LSN
定义:
INT
SF_ARCHIVELOG_DELETE_BEFORE_LSN (
lsn bigint
)
功能说明:
数据库以归档模式打开的情况下,删除小于指定 LSN 值的归档日志文件,包括本地归档和远程归档。待删除的文件必须处于未被使用状态。
参数说明:
lsn:指定删除的最大 LSN 值文件,若指定 lsn 值大于当前正在使用归档日志的起始 LSN(arch_lsn),则从当前使用归档文件之前的文件开始删除。
返回值:
删除归档日志文件数,-1 表示出错。
举例说明:
删除 LSN 值小于 95560 的归档日志文件:
SELECT SF_ARCHIVELOG_DELETE_BEFORE_LSN(95560);
4) SP_ELOG_FILE_DELETE
定义:
SP_ELOG_FILE_DELETE (
[SITE_ID INT,]
FILE_NAME VARCHAR(128)
)
功能说明:
支持删除当前实例生成的ELOG日志文件。将删除日志文件的功能给角色SYSDBA。
参数说明:
SITE_ID:要删除的ELOG日志文件所在的服务器站点号,为空时删除本地的ELOG日志文件。
FILE_NAME:要删除的ELOG日志文件名,包含文件后缀,不包含文件路径。
返回值:
无。
举例说明:
删除文件名为”dm_DMSEVER_202209.log”的本地日志文件:
SP_ELOG_FILE_DELETE('DM_DMSEVER_202209.LOG');
10. 统计信息
以下对象不支持统计信息:1. 外部表、DBLINK 远程表、动态视图、记录类型数组所用的临时表;2. 所在表空间为 OFFLINE 的对象;3. 位图索引,位图连接索引、虚索引、无效的索引、全文索引;4. BLOB、IMAGE、LONGVARBINARY、CLOB、TEXT、LONGVARCHAR 等列类型。
1)SP_TAB_INDEX_STAT_INIT
定义:
SP_TAB_INDEX_STAT_INIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
对表上所有的索引生成统计信息。
参数说明:
schname:模式名。
tablename:表名。
举例说明:
对 SYSOBJECTS 表上所有的索引生成统计信息:
SP_TAB_INDEX_STAT_INIT ('SYS', 'SYSOBJECTS');
2)SP_DB_STAT_INIT
定义:
SP_DB_STAT_INIT (
)
功能说明:
对库上所有模式下的所有用户表以及表上的所有索引生成统计信息。
举例说明:
对库上所有模式下的所有用户表以及表上的所有索引生成统计信息:
CALL SP_DB_STAT_INIT ();
3)SP_INDEX_STAT_INIT
定义:
SP_INDEX_STAT_INIT (
schname varchar(128),
indexname varchar(128)
)
功能说明:
对指定的索引生成统计信息。
参数说明:
schname:模式名。
indexname:索引名。
举例说明:
对指定的索引 IND 生成统计信息:
SP_INDEX_STAT_INIT ('SYSDBA', 'IND');
4)SP_COL_STAT_INIT
定义:
SP_COL_STAT_INIT (
schname varchar(128),
tablename varchar(128),
colname varchar(128)
)
功能说明:
对指定的列生成统计信息,不支持大字段列和虚拟列。
参数说明:
schname:模式名。
tablename:表名。
colname:列名。
举例说明:
对表 SYSOBJECTS 的 ID 列生成统计信息:
SP_COL_STAT_INIT ('SYS', 'SYSOBJECTS', 'ID');
5)SP_TAB_COL_STAT_INIT
定义:
SP_TAB_COL_STAT_INIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
对某个表上所有的列生成统计信息。
参数说明:
schname:模式名。
tablename:表名。
举例说明:
对'SYSOBJECTS'表上所有的列生成统计信息:
SP_TAB_COL_STAT_INIT ('SYS', 'SYSOBJECTS');
6)SP_STAT_ON_TABLE_COLS
定义:
SP_STAT_ON_TABLE_COLS(
SCHEMA_NAME VARCHAR(128),
TABLE_NAME VARCHAR(128),
E_PERCENT INT
)
功能说明:
对某个表上所有的列,按照指定的采样率生成统计信息。
参数说明:
schname:模式名。
tablename:表名。
E_PERCENT:采样率(0-100]。
举例说明:
对'SYSOBJECTS'表上所有的列生成统计信息,采样率 90:
SP_STAT_ON_TABLE_COLS ('SYS','SYSOBJECTS',90);
7)SP_TAB_STAT_INIT
定义:
SP_TAB_STAT_INIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
对某张表或某个索引生成统计信息。
参数说明:
schname:模式名。
tablename:表名或索引名。
举例说明:
对表 SYSOBECTS 生成统计信息:
SP_TAB_STAT_INIT ('SYS', 'SYSOBJECTS');
8)SP_SQL_STAT_INIT
定义:
SP_SQL_STAT_INIT (
sql varchar(8187)
)
功能说明:
对某个 SQL 查询语句中涉及的所有表和过滤条件中的列(不包括大字段、ROWID)生成统计信息。
可能返回的错误提示:
- 语法分析出错,sql 语句语法错误;
- 对象不支持统计信息,统计的表或者列不存在,或者不允许被统计。
参数说明:
sql:sql 语句。
举例说明:
对'SELECT * FROM SYSOBJECTS'语句涉及的所有表生成统计信息:
SP_SQL_STAT_INIT ('SELECT * FROM SYSOBJECTS');
9)SP_INDEX_STAT_DEINIT
定义:
SP_INDEX_STAT_DEINIT (
schname varchar(128),
indexname varchar(128)
)
功能说明:
清空指定索引的统计信息。
参数说明:
schname:模式名。
indexname:索引名。
举例说明:
清空索引 IND 的统计信息:
SP_INDEX_STAT_DEINIT ('SYSDBA', 'IND');
10)SP_COL_STAT_DEINIT
定义:
SP_COL_STAT_DEINIT (
schname varchar(128),
tabname varchar(128),
colname varchar(128)
)
功能说明:
删除指定列的统计信息。
参数说明:
schname:模式名。
tabname:表名。
colname:列名。
举例说明:
删除 SYSOBJECTS 的 ID 列的统计信息:
SP_COL_STAT_DEINIT ('SYS', 'SYSOBJECTS', 'ID');
11)SP_TAB_COL_STAT_DEINIT
定义:
SP_TAB_COL_STAT_DEINIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
删除表上所有列的统计信息。
参数说明:
schname:模式名。
tablename:表名。
举例说明:
删除 SYSOBJECTS 表上所有列的统计信息:
SP_TAB_COL_STAT_DEINIT ('SYS', 'SYSOBJECTS');
12)SP_TAB_STAT_DEINIT
定义:
SP_TAB_STAT_DEINIT (
schname varchar(128),
tablename varchar(128)
)
功能说明:
删除某张表的统计信息。
参数说明:
schname:模式名。
tablename:表名。
举例说明:
删除表 SYSOBECTS 的统计信息:
SP_TAB_STAT_DEINIT ('SYS', 'SYSOBJECTS');
13)ET
定义:
ET(
id_in int
)
功能说明:
统计执行 ID 为 ID_IN 的所有操作符的执行时间。需设置 INI 参数 ENABLE_MONITOR=1、MONITOR_TIME=1 和 MONITOR_SQL_EXEC=1。
参数说明:
id_in:SQL 语句的执行 ID。
举例说明:
select count(*) from sysobjects where name='SYSDBA';
行号 COUNT(*)
---------- --------------------
1 2
已用时间: 14.641(毫秒). 执行号:26.
可以得到执行号为 26。
et(26);
执行结果如下:
OP TIME(US) PERCENT RANK SEQ N_ENTER MEM_USED(KB) DISK_USED(KB) HASH_USED_CELLS HASH_CONFLICT
----- -------------------- --------------------- ----------- ----------- -------------------- -------
PRJT2 10 0.08% 4 2 4 0 0 0 0
AAGR2 63 0.53% 3 3 4 0 0 0 0
NSET2 91 0.77% 2 1 3 0 0 0 0
SSEK2 11655 98.61% 1 4 2 0 0 0 0
结果中每一行对应一个操作符,每一列对应的解释如下:
列名 | 含义 |
---|---|
OP | 操作符名称 |
TIME(US) | 执行耗时,单位:微秒 |
PERCENT RANK | 在整个计划中用时占比 |
SEQ | 计划中的序号 |
N_ENTER | 操作符进入的次数 |
MEM_USED | 操作符使用的内存空间。单位:KB |
DISK_USED | 操作符使用的磁盘空间。单位:KB |
HASH_USED_CELLS | 哈希表使用的槽数 |
HASH_CONFLICT | 哈希表存在冲突的记录数 |
DHASH3_USED_CELLS | 动态哈希表中使用的槽数 |
DHASH3_CONFLICT | 动态哈希表中的冲突情况 |
如果某些操作符并没有真正执行或者耗时很短,则不会在 ET 中显示。另外,结果中出现了 EXPLAIN 计划中没有的 DLCK 操作符,它是用来对字典对象的上锁处理,通常情况下可以忽略。
14)SP_UPDATE_SYSSTATS
定义:
SP_UPDATE_SYSSTATS(
flag int
)
功能说明:
用以升级及迁移统计信息。7.1.5.173 及之后的版本支持该功能。
参数说明:
flag:标记,取值 0、1、2、3、4、99。 0:回退版本;1:创建统计信息升级辅助表; 2:升级 SYS.SYSSTATS 表结构; 3:导入 SYS.SYSSTATS 表数据; 4:删除升级辅助表;参数 99:理想状态下使用,集合了参数 1、2、3、4 的功能。
举例说明:
如果想要将老库升级,需要手动升级,升级步骤如下:
SP_UPDATE_SYSSTATS(99);
或者
SP_UPDATE_SYSSTATS(1);
SP_UPDATE_SYSSTATS(2);
SP_UPDATE_SYSSTATS(3);
SP_UPDATE_SYSSTATS(4);
如果想使用老库,且使用了之前的加列版本服务器且升级失败,那么需要先回退版本,再升级:
SP_UPDATE_SYSSTATS(0);
SP_UPDATE_SYSSTATS(99);
15)SP_TAB_MSTAT_DEINIT
定义:
SP_TAB_MSTAT_DEINIT(
schname varchar(128),
tablename varchar(128)
)
功能说明:
删除一个表的多维统计信息。
参数说明:
schname:模式名。
tablename:表名。
举例说明:
删除表 SYSDBA.L1 上所有的多维统计信息:
SP_TAB_MSTAT_DEINIT('SYSDBA','L1');
16)SF_GET_MD_COL_STR
定义:
SF_GET_MD_COL_STR(
tabid int,
col_info varbinary(4096),
col_num int
)
功能说明:
获取表上建多维统计信息的列信息。
参数说明:
tabid:表 id。
col_info:多维的维度信息。
col_num:维度。
返回值:
多维统计信息的列信息。
举例说明:
获取表 L1 上建的多维统计信息的列信息:
SELECT SF_GET_MD_COL_STR(ID, MCOLID, N_DIMENSION) FROM SYS.SYSMSTATS WHERE ID IN (SELECT ID FROM SYSOBJECTS WHERE NAME='L1');
17)SP_CREATE_AUTO_STAT_TRIGGER
定义:
SP_CREATE_AUTO_STAT_TRIGGER(
type int,
freq_interval int,
freq_sub_interval int,
freq_minute_interval int,
starttime varchar(128),
during_start_date varchar(128),
max_run_duration int,
enable int
)
功能说明:
INI 参数 AUTO_STAT_OBJ 开启时,启用自动收集统计信息功能。
参数说明:
type:指定调度类型。可取值 1、2、3、4、5、6、7、8,缺省为 1,不同取值意义分别介绍如下:
1:按天的频率来执行;
2:按周的频率来执行;
3:在一个月的某一天执行;
4:在一个月的第一周第几天执行;
5:在一个月的第二周的第几天执行;
6:在一个月的第三周的第几天执行;
7:在一个月的第四周的第几天执行;
8:在一个月的最后一周的第几天执行。
freq_interval:与 type 有关,表示不同调度类型下的发生频率,默认为 1。具体说明如下:
当 type=1 时,表示每几天执行,取值范围为 1~100;
当 type=2 时,表示每几个星期执行,取值范围为 1~100;
当 type=3 时,表示每几个月中的某一天执行,取值范围为 1~100;
当 type=4 时,表示每几个月的第一周执行,取值范围为 1~100;
当 type=5 时,表示每几个月的第二周执行,取值范围为 1~100;
当 type=6 时,表示每几个月的第三周执行,取值范围为 1~100;
当 type=7 时,表示每几个月的第四周执行,取值范围为 1~100;
当 type=8 时,表示每几个月的最后一周执行,取值范围为 1~100。
freq_sub_interval:与 type 和 freq_interval 有关,表示不同 type 的执行频率,在 freq_interval 基础上,继续指定更为精准的频率,缺省为 1。具体说明如下:
当 type=1 时,这个值无效,系统不做检查;
当 type=2 时,表示某一个星期的星期几执行,可以同时选中七天中的任意几天,取值范围 1~127。具体可参考如下规则:因为每周有七天,所以 DM 数据库系统内部用七位二进制来表示选中的日子,从最低位开始算起,依次表示周日、周一到周五、周六。选中周几,就将该位置 1,否则置 0。例如,选中周二和周六,7 位二进制就是 1000100,转化成十进制就是 68,所以 FREQ_SUB_INTERVAL 取值 68;
当 type=3 时,表示将在一个月的第几天执行,取值范围 1~31;
当 type 为 4、5、6、7 或 8 时,都表示将在某一周内第几天执行,取值范围 1~7,分别表示从周一到周日。
freq_minute_interval:开始时间后,当天每隔几分钟再次执行,取值范围为 1~1439,缺省为 1439。
starttime:开始时间,缺省为 22:00。
during_start_date:有效日期时间段的开始日期时间,只有当前时间大于该参数值时,该定时器才有效,缺省为 1900/1/1。
max_run_duration:收集统计信息触发器最大执行时间,单位秒,0 表示不限制,缺省为 0。
enable:定时器是否有效,0:无效,1:有效,缺省为 1。
举例说明:
示例请参考《DM8 系统管理员手册》的 22.5 统计信息章节。
18)SYSDBA.GET_AUTO_STAT_INFO_FUNC
定义:
CREATE OR REPLACE PROCEDURE SYSDBA.GET_AUTO_STAT_INFO_FUNC(
task_id INT,
total_stat INT,
table_id INT,
sch_name varchar(24),
table_name varchar(24),
curr_gath_tab_id INT,
curr_gath_sch_name varchar(24),
curr_gath_tab_name varchar(24),
success_stat INT,
fail_stat INT,
task_start_time DATETIME,
task_end_time DATETIME,
gather_tbl_start_time DATETIME,
gather_tbl_end_time DATETIME
) as
BEGIN
/\*用户自定义如何使用统计信息的代码*/
END;
/
功能说明:
支持对自动收集统计信息的过程进行监控。
通过创建确定的过程 SYSDBA.GET_AUTO_STAT_INFO_FUNC,用以接收服务器在自动收集统计信息时的相关信息。该过程的模块体为开放式,用户可以根据自己的需求来编写如何使用统计信息的代码。
参数说明:
task_id: 任务 id,同一个任务的 task_id 相同。
total_stat: 一次任务需要收集的表的总个数。
table_id: 收集完成的一个表 table 的 id,每收集完一个表的统计信息,就会调用一次 SYSDBA.GET_AUTO_STAT_INFO_FUNC,传出一次数据,用户可自定义该过程,自定义处理接收到的数据。
sch_name: 对应 table_id 的模式名。
table_name: 对应 table_id 的表名。
curr_gath_tab_id: 当前正在收集的表 id。收集完一个表 table 后,传出数据时,该字段为接下来要收集的表 id,也是服务器当前正要或正在收集的表。
curr_gath_sch_name: 对应 curr_gath_tab_id 的模式名。
curr_gath_tab_name: 对应 curr_gath_tab_id 的表名。
success_stat: 截止到目前这次收集任务一共成功收集了多少张表。
fail_stat: 截止到目前这次收集任务一共失败收集了多少张表。
task_start_time: 这次任务的开始时间。
task_end_time: 这次任务的结束时间,未结束为 NULL。
gather_tbl_start_time: 收集完一个表 table 时,该表收集的开始时间。
gather_tbl_end_time: 收集完一个表 table 时,该表收集的结束时间,收集失败,则结束时间为 NULL。
举例说明:
示例请参考《DM8 系统管理员手册》的 22.5 统计信息章节。
19)SP_FLUSH_MODIFICATIONS_INFO
定义:
SP_FLUSH_MODIFICATIONS_INFO ()
功能说明:
更新系统表 SYSMODIFICATIONS 中的数据,将内存中表对象的监控信息记录到系统表 SYSMODIFICATIONS 中。
举例说明:
将内存中表对象的监控信息记录到系统表 SYSMODIFICATIONS 中。
SP_FLUSH_MODIFICATIONS_INFO();
20)SP_CLEAN_MODIFICATIONS
定义:
SP_CLEAN_MODIFICATIONS ()
功能说明:
清理系统表 SYSMODIFICATIONS 中的冗余数据,将已经不存在的对象从该系统表中清除。
举例说明:
清除系统表 SYSMODIFICATIONS 中已经不存在的对象:
SP_CLEAN_MODIFICATIONS();
21)SP_CREATE_ET_PROCEDURE
定义:
SP_CREATE_ET_PROCEDURE (
id_in int
)
功能说明:
支持对 DM8 中的系统存储过程 ET 进行手动升降级到指定的数据字典版本。
参数说明:
id_in:DM8 对应的全局数据字典版本号 global_dct_version8。ID_IN 没有填或者小于等于 0 时报错“无效的参数值”。
举例说明:
设置 ET 系统表与 global_dct_version8 为 55 时相同
SP_CREATE_ET_PROCEDURE(55);
设置 ET 系统表与 global_dct_version8 为 53 时相同
SP_CREATE_ET_PROCEDURE(53);
11. 资源监测
1)SP_CHECK_IDLE_MEM
定义:
SP_CHECK_IDLE_MEM ()
功能说明:
对可用内存空间进行检测,并在低于阈值(对应 INI 参数 IDLE_MEM_THRESHOLD)的情况下打印报警记录到日志,同时报内存不足的异常。
举例说明:
监测当前系统的内存空间是否低于阀值:
SP_CHECK_IDLE_MEM ();
2)SP_CHECK_IDLE_DISK
定义:
SP_CHECK_IDLE_DISK (
path varchar(256)
)
功能说明:
对指定位置的磁盘空间进行检测,并在低于阈值(对应 INI 参数 IDLE_DISK_THRESHOLD)的情况下打印报警记录到日志,同时报磁盘空间不足的异常。
参数说明:
path:监测的路径。
举例说明:
监测 d:\data 路径下的磁盘空间是否低于阀值:
SP_CHECK_IDLE_DISK ('d:\data');
3)SF_GET_CMD_RESPONSE_TIME
定义:
SF_GET_CMD_RESPONSE_TIME()
功能说明:
查看 DM 服务器对用户命令的平均响应时间。
返回值:
命令的平均响应时间,单位秒。
举例说明:
在 dm.ini 中 ENABLE_MONITOR 取值不小于 2 的前提下执行:
SELECT SYS.SF_GET_CMD_RESPONSE_TIME();
4)SF_GET_TRX_RESPONSE_TIME
定义:
SF_GET_TRX_RESPONSE_TIME()
功能说明:
查看事务的平均响应时间。
返回值:
事务的平均响应时间,单位秒。
举例说明:
在 dm.ini 中 ENABLE_MONITOR 取值不为 0 的前提下执行:
SELECT SYS.SF_GET_TRX_RESPONSE_TIME();
5)SF_GET_DATABASE_TIME_PER_SEC
定义:
SF_GET_DATABASE_TIME_PER_SEC()
功能说明:
查看数据库中用户态时间占总处理时间的比值。
返回值:
用户态时间占总处理时间的比值,该比值越大表明用于 IO、事务等待等耗费的时间越少。
举例说明:
在 dm.ini 中 ENABLE_MONITOR 取值不小于 2 的前提下执行:
SELECT SYS.SF_GET_DATABASE_TIME_PER_SEC();
6)TABLE_USED_SPACE
定义:
BIGINT
TABLE_USED_SPACE (
schname varchar(256);
tabname varchar(256)
)
功能说明:
获取指定表所占用的页数。
参数说明:
schname:模式名,必须大写。
tabname:表名,必须大写。
返回值:
表所占用的页数。
举例说明:
查看 SYSOJBECTS 的所占用的页数:
SELECT TABLE_USED_SPACE ('SYS','SYSOBJECTS');
查询结果如下:
32
7)HUGE_TABLE_USED_SPACE
定义:
BIGINT
HUGE_TABLE_USED_SPACE (
schname varchar(256);
tabname varchar(256)
)
功能说明:
获取指定 HUGE 表所占用的大小。
参数说明:
schname:模式名,必须大写。
tabname:huge 表名,必须大写。
返回值:
HUGE 表所占用的大小,单位:MB。
举例说明:
查看 huge 表 test 所占用的大小:
CREATE HUGE TABLE TEST(A INT);
HUGE_TABLE_USED_SPACE ('SYSDBA','TEST');
查询结果如下:
64
- USER_USED_SPACE
定义:
BIGINT
USER_USED_SPACE (
username varchar(256)
)
功能说明:
获取指定用户所占用的页数,不包括用户占用的 HUGE 表页数。
参数说明:
username:用户名。
返回值:
用户所占用的页数。
举例说明:
查看 SYSDBA 的所占用的页数:
SELECT USER_USED_SPACE ('SYSDBA');
查询结果如下:
64
9)TS_USED_SPACE
定义:
BIGINT
TS_USED_SPACE (
tsname varchar(256)
)
功能说明:
获取指定表空间所有文件所占用的页数之和。RLOG 和 ROLL 表空间不支持。
参数说明:
tsname:表空间名。
返回值:
表空间占用的页数。
举例说明:
查看 MAIN 表空间所有文件占用的页数之和:
SELECT TS_USED_SPACE ('MAIN');
查询结果如下:
16384
10)DB_USED_SPACE
定义:
BIGINT
DB_USED_SPACE ()
功能说明:
获取整个数据库占用的页数。
返回值:
整个数据库占用的页数。
举例说明:
查看数据库所占用的页数:
SELECT DB_USED_SPACE ();
查询结果如下:
19712
11)INDEX_USED_SPACE
定义:
BIGINT
INDEX_USED_SPACE (
indexid int
)
功能说明:
根据索引 ID,获取指定索引所占用的页数。
参数说明:
indexid:索引 ID。
返回值:
索引占用的页数。
举例说明:
查看索引号为 33554540 的索引所占用的页数:
SELECT INDEX_USED_SPACE (33554540);
查询结果如下:
32
12)INDEX_USED_SPACE
定义:
BIGINT
INDEX_USED_SPACE (
schname varchar(256),
indexname varchar(256)
)
功能说明:
根据索引名获取指定索引占用的页数。
参数说明:
schname:模式名。
indexname:索引名。
返回值:
索引占用的页数。
举例说明:
查看 SYSDBA 模式下索引名为 INDEX_TEST 的索引占用的页数:
SELECT INDEX_USED_SPACE ('SYSDBA', 'INDEX_TEST');
查询结果如下:
14
13)INDEX_USED_SPACE
定义:
BIGINT
INDEX_USED_SPACE (
schname varchar(256),
tablename varchar(256),
nth_index int
)
功能说明:
获取表指定序号的索引占用的页数。
参数说明:
schname:模式名。
tablename:表名。
nth_index:要获取表的第几个索引。
返回值:
索引占用的页数。
举例说明:
查看 SYSDBA 模式下,TEST 表的第二个索引占用的页数:
SELECT INDEX_USED_SAPCE ('SYSDBA', 'TEST', 2);
查询结果如下:
14
14)INDEX_USED_PAGES
定义:
BIGINT
INDEX_USED_PAGES (
indexid int
)
功能说明:
根据索引 id,获取指定索引已使用的页数。
参数说明:
indexid:索引 ID。
返回值:
索引已使用的页数。
举例说明:
查看索引号为 33554540 的索引已使用的页数:
SELECT INDEX_USED_PAGES (33554540);
查询结果如下:
14
15)INDEX_USED_PAGES
定义:
BIGINT
INDEX_USED_PAGES (
schname varchar(256),
indexname varchar(256)
)
功能说明:
根据索引名,获取指定索引已使用的页数。
参数说明:
schname:模式名。
indexname:索引名。
返回值:
索引占用的页数。
举例说明:
查看 SYSDBA 模式下索引名为 INDEX_TEST 的索引已使用的页数:
SELECT INDEX_USED_PAGES ('SYSDBA', 'INDEX_TEST');
查询结果如下:
14
16)INDEX_USED_PAGES
定义:
BIGINT
INDEX_USED_PAGES (
schname varchar(256),
tablename varchar(256),
nth_index int
)
功能说明:
根据表的索引序号,获取指定索引已使用的页数。
参数说明:
schname:模式名。
tablename:表名。
nth_index:要获取表的第几个索引。
返回值:
索引占用的页数。
举例说明:
查看 SYSDBA 模式下,TEST 表的第二个索引已使用的页数:
SELECT INDEX_USED_PAGES ('SYSDBA', 'TEST', 2);
查询结果如下:
14
17)TABLE_USED_PAGES
定义:
BIGINT
TABLE_USED_PAGES (
schname varchar(256);
tabname varchar(256)
)
功能说明:
获取指定表已使用的页数。
参数说明:
schname:模式名。
tabname:表名。
返回值:
表已使用的页数。
举例说明:
查看 SYSOJBECTS 已使用的页数:
SELECT TABLE_USED_PAGES('SYS','SYSOBJECTS');
查询结果如下:
14
18)TS_FREE_SPACE
定义:
INT
TS_FREE_SPACE (
tsname varchar(256)
)
功能说明:
获取指定表空间可分配的空闲页数。RLOG 和 ROLL 表空间不支持。
参数说明:
tsname:表空间名。
返回值:
表空间可分配的空闲页数,包含 TS_RESERVED_SPACE()的预留页数。
举例说明:
查看 MAIN 表空间可分配的空闲页数:
SELECT TS_FREE_SPACE ('MAIN');
查询结果如下:
8192
19)TS_RESERVED_SPACE
定义:
INT
TS_RESERVED_SPACE (
tsname varchar(256)
)
功能说明:
获取指定表空间系统预留的页数。RLOG 和 ROLL 表空间不支持。系统启动时根据 dm.ini 参数 TS_RESERVED_EXTENTS 预留部分空间,避免 ROLLBACK/PURGE 等操作过程中分配数据页失败,这些预留空间用户无法使用。
参数说明:
tsname:表空间名。
返回值:
表空间系统预留的页数。
举例说明:
查看 MAIN 表空间系统预留的页数:
SELECT TS_RESERVED_SPACE ('MAIN');
查询结果如下:
512
20)TS_FREE_SPACE_CALC
定义:
INT
TS_FREE_SPACE_CALC (
tsname varchar(256)
)
功能说明:
重新计算指定表空间可分配的空闲页数。RLOG 和 ROLL 表空间不支持。
参数说明:
tsname:表空间名。
返回值:
表空间可分配的空闲页数,包含 TS_RESERVED_SPACE 的预留页数。
举例说明:
重新计算 MAIN 表空间可分配的空闲页数:
SELECT TS_FREE_SPACE_CALC('MAIN');
查询结果如下:
8192
- TABLE_USED_LOB_PAGES
定义:
BIGINT
TABLE_USED_LOB_PAGES (
schname varchar(256);
tabname varchar(256)
)
功能说明:
获取指定表已使用的 lob 页数,包括大字段列使用的行外数据 lob 页和指定了 USING LONG ROW 存储选项时变长字符串列使用的行外数据 lob 页。
参数说明:
schname:模式名。
tabname:表名。
返回值:
表已使用的 lob 页数。
举例说明:
查看 SYS.SYSTEXTS 表已使用的 lob 页数:
SELECT TABLE_USED_LOB_PAGES('SYS','SYSTEXTS');
查询结果如下:
139
22)ABLE_FREE_LOB_PAGES
定义:
BIGINT
TABLE_FREE_LOB_PAGES(
schema_name in varchar,
table_name in varchar
)
功能说明:
获取指定表的大字段的段首页登记的空闲页个数。
参数说明:
schema_nme:表所在模式名。
table_nme:表名。
返回值:
失败则报错,成功返回空闲页个数。
举例说明:
查询 T_CLOB 表的大字段的段首页登记的空闲页个数:
SELECT TABLE_FREE_LOB_PAGES('SYSDBA','T_CLOB');
23)SP_TABLE_LOB_RECLAIM
定义:
SP_TABLE_LOB_RECLAIM(
schema_name in varchar,
table_name in varchar
)
功能说明:
清理指定表的大字段的段首页登记的空闲页。
参数说明:
schema_nme:表所在模式名。
table_nme:表名。
返回值:
无。失败则报错。
举例说明:
清理表 T_CLOB 的大字段的段首页登记的空闲页:
SP_TABLE_LOB_RECLAIM('SYSDBA','T_CLOB');
24)SP_SET_SQL_STAT_THRESHOLD
定义:
SP_SET_SQL_STAT_THRESHOLD(
name varchar,
val int64)
功能说明:
设置语句级资源监控,SQL 监控项生成的条件阀值,当资源大于设置的阀值时才生成统计项。可以设置的监控项为 VSQL_STAT/VSQL_STAT_HISTORY 视图中的 5~58 列。该过程只有 DBA 权限才能执行。
参数说明:
name:允许为 NULL。需要设置阀值的监控项名字,可选名字为 VSQL_STAT/VSQL_STAT_HISTORY 视图中第 5~58 列的列名。当 name 为 NULL 时,val 只能设置为 0 或者-1。0 表示无条件生成历史监控项,-1 表示不生成历史监控项。
val:不允许为 NULL 且必须大于等于 0。表示需要设置的阀值。
返回值:
无
举例说明:
SP_SET_SQL_STAT_THRESHOLD('INS_IN_PL_CNT', 60000);
- INDEX_USED_PAGES
定义:
BIGINT
INDEX_USED_PAGES (
schema_name varchar(128),
index_name varchar(128)
)
功能说明:
根据模式下的索引名获取指定索引已使用的页数。
参数说明:
schema_name:模式名。
index_name:索引名。
返回值:
指定索引已使用的页数。
举例说明:
查看模式 SYSDBA 下索引名为 IDX1 的索引已使用的页数:
SELECT INDEX_USED_PAGES('SYSDBA','IDX1');
26)INDEX_USED_PAGES
定义:
BIGINT
INDEX_USED_PAGES (
schema_name varchar(128),
table_name varchar(128),
index_no int
)
功能说明:
根据模式下的指定表的第 index_no 个索引获取该索引使用的页数。
参数说明:
schema_name:模式名。
table_name:表名。
index_no:索引序号(从 1 开始)。
返回值:
指定索引已使用的页数。
举例说明:
查看模式 SYSDBA 下表名为 TAB1 的第一个索引已使用的页数:
SELECT INDEX_USED_PAGES('SYSDBA','TAB1',1);
27)TABLE_ROWCOUNT
定义:
INT
TABLE_ROWCOUNT (
schema_name varchar(128),
table_name varchar(128)
)
功能说明:
获取指定模式下指定表的总行数。
参数说明:
schema_name:模式名。
table_name:表名。
返回值:
指定表的总行数。
举例说明:
查看模式 SYSDBA 下表 TAB1 的总行数:
SELECT TABLE_ROWCOUNT('SYSDBA','TAB1');
12. 类型别名
DM 支持用户对各种基础数据类型定义类型别名,定义的别名可以在 SQL 语句和 DMSQL 程序中使用。
1)SP_INIT_DTYPE_SYS
定义:
SP_INIT_DTYPE_SYS (
create_flag int
)SELECT SF_CHECK_SYSTEM_PACKAGES
功能说明:
初始化或清除类型别名运行环境。
参数说明:
create_flag:1 表示创建,0 表示删除。
返回值:
无
举例说明:
初始化类型别名运行环境:
SP_INIT_DTYPE_SYS(1);
2)SF_CHECK_DTYPE_SYS
定义:
INT
SF_CHECK_DTYPE_SYS ()
功能说明:
系统类型别名系统的启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得系统类型别名系统的启用状态:
SELECT SF_CHECK_DTYPE_SYS;
3)SP_DTYPE_CREATE
定义:
SP_DTYPE_CREATE (
name varchar(32),
base_name varchar(32),
len int,
scale int
)
功能说明:
创建一个类型别名。最多只能创建 100 个类型别名。
参数说明:
name:类型别名的名称。
base_name:基础数据类型名。
len:基础数据类型长度,当为固定精度类型时,应该设置为 NULL。
scale:基础数据类型刻度。
返回值:
无
举例说明:
创建 VARCHAR(100)的类型别名‘STR’:
SP_DTYPE_CREATE('STR', 'VARCHAR', 100, NULL);
4)SP_DTYPE_DELETE
定义:
SP_DTYPE_DELETE (
name varchar(32)
)
功能说明:
删除一个类型别名。
参数说明:
name:类型别名的名称。
返回值:
无
举例说明:
删除类型别名‘STR’:
SP_DTYPE_DELETE('STR');
13. 杂类函数/过程
1)TO_DATETIME
定义:
DATETIME
TO_DATETIME(
year int,
month int,
day int,
hour int,
minute int
)
功能说明:
将 int 类型值组合并转换成日期时间类型。
参数说明:
year:年份,必须介于-4713 和 +9999 之间,且不为 0。
month:月份。
day:日。
hour:小时。
minute:分钟。
返回值:
日期时间值。
举例说明:
将整型数 2010,2,2,5,5 转换成日期时间类型:
SELECT TO_DATETIME (2010,2,2,5,5);
查询结果如下:
2010-02-02 05:05:00.000000
2)SP_SET_ROLE*****
定义:
SP_SET_ROLE (
role_name varchar(128),
enable int
)
功能说明:
设置角色启用禁用。
参数说明:
role_name: 角色名。
enable:0/1 (0:禁用 1:启用)。
返回值:
无
举例说明:
禁用角色 ROLE1:
SP_SET_ROLE ( 'ROLE1', 0);
3)SF_CHECK_SYSTEM_VIEWS
定义:
INT
SF_CHECK_SYSTEM_VIEWS()
功能说明:
系统视图的启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得系统视图的启用状态:
SELECT SF_CHECK_SYSTEM_VIEWS;
4)SP_DYNAMIC_VIEW_DATA_CLEAR
定义:
SP_DYNAMIC_VIEW_DATA_CLEAR (
view_name varchar(128)
)
功能说明:
清空动态性能视图的历史数据,仅对存放历史记录的动态视图起作用。
参数说明:
view_name:动态性能视图名。
返回值:
无
举例说明:
清空动态性能视图 V$SQL_HISTORY 的历史数据:
SP_DYNAMIC_VIEW_DATA_CLEAR('V$SQL_HISTORY');
5)SP_INIT_DBG_SYS
定义:
SP_INIT_DBG_SYS(
create_flag int
)
功能说明:
创建或删除 DBMS_DBG 系统包。
参数说明:
create_flag:为 1 时表示创建 DBMS_DBG 包;为 0 表示删除该系统包。
返回值:
无
举例说明:
创建 DBMS_DBG 系统包:
SP_INIT_DBG_SYS(1);
6)SF_CHECK_DBG_SYS
定义:
INT
SF_CHECK_DBG_SYS ()
功能说明:
系统的 DBG 系统包启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得 DBG 系统包的启用状态:
SELECT SF_CHECK_DBG_SYS;
7)SP_INIT_GEO_SYS
定义:
SP_INIT_GEO_SYS(
create_flag int
)
功能说明:
创建或删除 DMGEO 系统包。
参数说明:
create_flag:为 1 时表示创建 DMGEO 包;为 0 表示删除该系统包。
返回值:
无
举例说明:
创建 DMGEO 系统包:
SP_INIT_GEO_SYS(1);
8)SF_CHECK_GEO_SYS
定义:
INT
SF_CHECK_GEO_SYS ()
功能说明:
系统的 GEO 系统包启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得 GEO 系统包的启用状态:
SELECT SF_CHECK_GEO_SYS;
9)SP_CREATE_SYSTEM_PACKAGES
定义:
SP_CREATE_SYSTEM_PACKAGES (
create_flag int
)
功能说明:
创建或删除除了 DMGEO、DBMS_JOB 和 DBMS_WORKLOAD_REPOSITORY 以外的所有系统包。若在创建过程中某个系统包由于特定原因未能创建成功,会跳过继续创建后续的系统包。
参数说明:
create_flag:为 1 时表示创建除了 DMGEO、DBMS_JOB 和 DBMS_WORKLOAD_REPOSITORY 以外的所有系统包;为 0 表示删除这些系统包。
返回值:
无
举例说明:
创建除了 DMGEO、DBMS_JOB 和 DBMS_WORKLOAD_REPOSITORY 以外的所有系统包:
SP_CREATE_SYSTEM_PACKAGES (1);
10)SP_CREATE_SYSTEM_PACKAGES*****
定义:
SP_CREATE_SYSTEM_PACKAGES (
create_flag int,
pkgname varchar(128)
)
功能说明:
创建或删除除了 DMGEO、DBMS_JOB 和 DBMS_WORKLOAD_REPOSITORY 以外的指定名字的系统包。
参数说明:
create_flag:为 1 时表示创建指定的系统包;为 0 表示删除这个系统包。
pkgname:指定的除 DMGEO、DBMS_JOB 和 DBMS_WORKLOAD_REPOSITORY 以外的系统包名。
返回值:
无
举例说明:
创建 DBMS_LOB 系统包:
SP_CREATE_SYSTEM_PACKAGES(1, 'DBMS_LOB');
11) SF_CHECK_SYSTEM_PACKAGES
定义:
INT
SF_CHECK_SYSTEM_PACKAGES()
功能说明:
系统包的启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得系统包的启用状态:
SELECT SF_CHECK_SYSTEM_PACKAGES;
- SF_CHECK_SYSTEM_PACKAGE
定义:
INT
SF_CHECK_SYSTEM_PACKAGE(
package_name varchar(128)
)
功能说明:
检测指定系统包的启用状态。
参数说明:
package_name: 指定的系统包名。
返回值:
0:未启用;1:已启用。
举例说明:
获得系统包DBMS_SCHEDULER的启用状态:
SELECT SF_CHECK_SYSTEM_PACKAGE('DBMS_SCHEDULER');
13)SP_INIT_INFOSCH
定义:
SP_INIT_INFOSCH (
create_flag int
)
功能说明:
创建或删除信息模式。
参数说明:
create_flag:为 1 时表示创建信息模式;为 0 表示删除信息模式。
举例说明:
创建信息模式:
SP_INIT_INFOSCH (1);
14)SF_CHECK_INFOSCH
定义:
INT
SF_CHECK_INFOSCH ()
功能说明:
系统的信息模式启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得系统信息模式的启用状态:
SELECT SF_CHECK_INFOSCH;
15)SP_INIT_CPT_SYS
定义:
int
SP_INIT_CPT_SYS (
flag int
)
功能说明:
初始化数据捕获环境。
参数说明:
flag: 1 表示初始化环境;0 表示删除环境。
举例说明:
初始化数据捕获环境:
SP_INIT_CPT_SYS(1);
16)SF_CHECK_CPT_SYS
定义:
INT
SF_CHECK_CPT_SYS ()
功能说明:
系统的数据捕获环境启用状态检测。
返回值:
0:未启用;1:已启用。
举例说明:
获得系统数据捕获环境的启用状态:
SELECT SF_CHECK_CPT_SYS;
17)SF_SI
定义:
VARCHAR
SF_SI(
index_sql varchar
)
功能说明:
输入索引创建语句,查看预计的执行信息。
参数说明:
INDEX_SQL: 指定的索引创建语句。
返回值:
索引创建的统计信息,排序区大小的建议值。
举例说明:
SELECT SF_SI('create index idx_t1 on t1(c1,c2);');
18)SP_UNLOCK_USER
语法:
SP_UNLOCK_USER(
user_name varchar(128) not null
)
参数说明:
user_name:需要解锁的用户名。
功能说明:
为指定的用户解锁。
举例说明:
CREATE USER USER123 IDENTIFIED BY USER123456;
//错误登录3次,导致用户被锁
SQL>LOGIN
服务名:
用户名:USER123456
密码:
端口号:
SSL路径:
SSL密码:
UKEY名称:
UKEY PIN码:
MPP类型:
[-2501]:用户名或密码错误.
//解锁
//SYSDBA用户登录:
SP_UNLOCK_USER('USER123');
19)DUMP 函数
定义:
VARCHAR
DUMP(
exp int/bigint/dec/double/float/varbinary/ varchar/date/time/datetime/time with time zone/timestamp with time zone/interval year/interval day/blob/clob/rowid,
fmt int,
start int,
len int
)
功能说明:
获得表达式的内部存储字节。
参数说明:
exp:输入参数,必选。可以是任何基本数据类型。
fmt:输出格式进制,可选,缺省为 10。8:以八进制的形式返回结果集;10:以十进制的形式返回结果集;16:以十六进制的形式返回结果集;17:以字符的形式返回结果集;1000+N: 以上四种加上 1000,表示在返回值中加上当前字符集名称,N 为 8、10、16 或 17。
start:开始进行返回的字节的位置。可选。
len:需要返回的字节长度。可选。
返回值:
依次是数据类型代码、字节长度、表达式在系统内部存储字节。其中,数据类型代码有:2 代表 VARCHAR、7 代表 INT、8 代表 BIGINT、9 代表 DEC、10 代表 FLOAT、11 代表 DOUBLE、12 代表 BLOB、14 代表 DATE、15 代表 TIME、16 代表 DATETIME、18 代表 VARBINARY、19 代表 CLOB、20 代表 INTERVAL YEAR MONTH、21 代表 INTERVAL DAY TIME、22 代表 TIME WITH TIME ZONE、23 代表 TIMESTAMP WITH TIME ZONE、28 代表 ROWID。
举例说明:
例 1 查询字符串’an’的存储字节,显示字符集,显示成字符:
select dump('an',1017);
查询结果如下:
Typ=2 Len=2 CharacterSet=GBK: a,n
例 2 查询日期类型'2005-01-01'的默认字节,默认进制显示:
select dump(date '2005-01-01' ) ;
查询结果如下:
Typ=14 Len=13: 213,7,1,1,0,0,0,0,0,0,232,3,0
例 3 查询数字 123 的从第 2 个字节开始的 4 个字节,以 16 进制显示:
select dump(1234567890,16,2,4);
查询结果如下:
Typ=7 Len=4: 2,96,49
例 4 查询 clob 类型的默认字节,默认进制显示。
create table testdump(c1 clob);
insert into testdump values('adbca');
insert into testdump values('1.曹雪芹,是中国文学史上最伟大也是最复杂的作家,《红楼梦》也是中国文学史上最伟大而又最复杂的作品。《红楼梦》写的是封建贵族的青年贾宝玉、林黛王、薛宝钗之间的恋爱和婚姻悲剧,而且以此为中心,写出了当时具有代表性的贾、王、史、薛四大家族的兴衰,其中又以贾府为中心,揭露了封建社会后期的种种黑暗和罪恶,及其不可克服的内在矛盾,对腐朽的封建统治阶级和行将崩溃的封建制度作了有力的批判,使读者预感到它必然要走向覆灭的命运。本书是一部具有高度思想性和高度艺术性的伟大作品,从本书反映的思想倾向来看,作者具有初步的民主主义思想,他对现实社会包括宫廷及官场的黑暗,封建贵族阶级及其家庭的腐朽,封建的科举制度、婚姻制度、奴婢制度、等级制度,以及与此相适应的社会统治思想即孔孟之道和程朱理学、社会道德观念等等,都进行了深刻的批判并且提出了朦胧的带有初步民主主义性质的理想和主张。这些理想和主张正是当时正在滋长的资本主义经济萌芽因素的曲折反映。2.曹雪芹,是中国文学史上最伟大也是最复杂的作家,《红楼梦》也是中国文学史上最伟大而又最复杂的作品。《红楼梦》写的是封建贵族的青年贾宝玉、林黛王、薛宝钗之间的恋爱和婚姻悲剧,而且以此为中心,写出了当时具有代表性的贾、王、史、薛四大家族的兴衰,其中又以贾府为中心,揭露了封建社会后期的种种黑暗和罪恶,及其不可克服的内在矛盾,对腐朽的封建统治阶级和行将崩溃的封建制度作了有力的批判,使读者预感到它必然要走向覆灭的命运。本书是一部具有高度思想性和高度艺术性的伟大作品,从本书反映的思想倾向来看,作者具有初步的民主主义思想,他对现实社会包括宫廷及官场的黑暗,封建贵族阶级及其家庭的腐朽,封建的科举制度、婚姻制度、奴婢制度、等级制度,以及与此相适应的社会统治思想即孔孟之道和程朱理学、社会道德观念等等,都进行了深刻的批判并且提出了朦胧的带有初步民主主义性质的理想和主张。这些理想和主张正是当时正在滋长的资本主义经济萌芽因素的曲折反映。');
select dump(c1) from testdump;
查询结果如下:
DUMP(C1)
--------------------------------------------------------------------------------------------------------------------------------
Typ=19 Len=52: 1,104,2,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,146,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,97,100,98,99,97
Typ=19 Len=47: 2,105,2,0,0,0,0,0,0,108,6,0,0,4,0,0,0,86,0,0,0,146,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0
例 5 查询 ROWID 类型数据内部存储字节。
select DUMP(cast('AAACAAAAAAAAAAAAAC'AS ROWID));
查询结果如下:
DUMP(CAST('AAACAAAAAAAAAAAAAC'ASROWID))
---------------------------------------
Typ=28 Len=12: 0,2,0,0,0,0,0,0,0,0,0,2
20)SP_CREATE_SYSTEM_PACKAGES
定义:
SP_CREATE_SYSTEM_PACKAGES (
create_flag int,
pkgname varchar(128)
)
功能说明:
单独创建或删除除了 DBMS_DBG、DMGEO 和 DBMS_JOB 以外的系统包。
参数说明:
create_flag:为 1 时表示创建除了 DBMS_DBG、DMGEO 和 DBMS_JOB 以外的指定系统包;为 0 时表示删除指定系统包。
pkgname: 指定创建或删除的包名。
返回值:
无
举例说明:
创建系统包 DBMS_SQL:
SP_CREATE_SYSTEM_PACKAGES (1, 'DBMS_SQL');
删除系统包 DBMS_SQL:
SP_CREATE_SYSTEM_PACKAGES (0, 'DBMS_SQL');
21)SP_CLOSE_DBLINK
定义:
SP_CLOSE_DBLINK(
dblink varchar(128)
)
功能说明:
关闭系统缓冲区中指定的空闲的外部链接,若指定的外部链接不处于空闲状态(可通过 V$DBLINK 查询),则不关闭。
参数说明:
dblink :指定的待关闭的外部链接名。
返回值:
无
举例说明:
关闭之前创建的外部链接 LINK1:
SP_CLOSE_DBLINK('LINK1');
22)SP_XA_TRX_PROCESS
定义:
SP_XA_TRX_PROCESS(
trxid bigint,
flag boolean
)
功能说明:
指定提交或回滚 TRXID 对应的 XA TRX。指定的 TRXID 对应的 TRX 必须是 XA TRX,且已经通过接口执行过 xa_end 或 xa_prepare 操作,否则报错。
TRXID 可通过 V$TRX 中的 ID 查询。
参数说明:
trxid:事务的 ID 号。
flag:false 表示回滚,true 表示提交。
返回值:
无
23)GETUTCDATE
定义:
DATETIME
GETUTCDATE ()
功能说明:
获取当前 UTC 时间。
返回值:
当前 UTC 时间。
举例说明:
获取当前 UTC 时间:
SELECT GETUTCDATE();
24)SLEEP
定义:
SLEEP(time dec)
功能说明:
表示让一个线程进入睡眠状态,等待一段时间 time 之后,该线程自动醒来进入到可运行状态。
参数说明:
time:睡眠时间,单位秒。
返回值:
无
举例说明:
让一个线程睡眠 1 秒钟之后,再醒过来继续运行:
sleep(1);
25)SF_GET_TRIG_EP_SEQ
定义:
INT
SF_GET_TRIG_EP_SEQ(id int)
功能说明:
获取 DMDSC 环境下时间触发器执行节点号。
参数说明:
id:时间触发器 id。
返回值:
执行节点号。
举例说明:
SELECT SF_GET_TRIG_EP_SEQ(117440523);
26)SF_EXTRACT_BIND_DATA
定义:
VARCHAR
SF_EXTRACT_BIND_DATA(
binddata varbinary,
nth integer,
attr integer
)
功能说明:
获取绑定参数的信息。
参数说明:
binddata:绑定的参数数据。
nth:指定参数序号,从 1 开始以 1 为单位递增。
attr:为 1 时表示获取参数类型,对于小数类型,不显示精度和标度;为 2 时表示获取参数内容。
返回值:
指定参数的参数类型或参数内容。若 binddata 为 NULL 或空值,则返回 NULL;若 nth 大于实际绑定的参数个数且小于等于绑定语句中的参数个数,则返回字符串“NO DATA”;若 nth<=0 或大于绑定语句中的参数个数,则报错;若 attr 不为 1 或 2,则报错。
举例说明:
获取执行号为 1701 的绑定语句中绑定的第 3 个参数的参数类型和参数内容:
SELECT SF_EXTRACT_BIND_DATA(BINDDATA, 3, 1), SF_EXTRACT_BIND_DATA(BINDDATA, 3, 2) FROM V$SQL_BINDDATA_HISTORY WHERE EXEC_ID=1701;
查询结果如下:
DEC 123456789.123
27)SF_EXTRACT_BIND_DATA_NUM
定义:
INT
SF_EXTRACT_BIND_DATA_NUM(
binddata varbinary,
num int
)
功能说明:
获取绑定参数的个数。
参数说明:
binddata:绑定的参数数据。
num:为 1 时表示获取实际绑定的参数个数,参数个数最多为 100 个;为 2 时表示获取绑定语句中的参数个数。
返回值:
参数个数。
举例说明:
获取执行号为 1701 的绑定语句实际绑定的参数个数:
SELECT SF_EXTRACT_BIND_DATA_NUM(BINDDATA, 1) FROM V$SQL_BINDDATA_HISTORY WHERE EXEC_ID=1701;
查询结果如下:
17
28)SP_CREATE_SYS_OBJTYPE
定义:
SP_CREATE_SYS_OBJTYPE(
create_flag int
)
功能说明:
创建或删除内置对象。
参数说明:
create_flag:1 表示创建,0 表示删除。
返回值:
无
举例说明:
创建内置对象:
SP_CREATE_SYS_OBJTYPE(1);
29)SP_SET_PLN_BINDED
定义:
SP_SET_PLN_BINDED(
sql_text varchar(8187),
schname varchar(128),
type varchar(12),
binded int
)
或者
SP_SET_PLN_BINDED(
hash_value int,
schid int,
type varchar(12),
binded int
)
或者
SP_SET_PLN_BINDED(
sql_text varchar(8187),
schid int,
type varchar(12),
binded int
)
或者
SP_SET_PLN_BINDED(
hash_value int,
schname varchar(128),
type varchar(12),
binded int
)
功能说明:
绑定或解绑指定的执行计划。
参数说明:
sql_text:执行计划对应的 SQL 语句,该语句可以从动态视图 V$SQL_PLAN 中的 SQLSTR 列获得。
schname:执行计划的模式名。
type:执行计划的类型,可取值:SQL:查询语句类型;PL/OBJ:存储过程或触发器类型。
binded:是否绑定执行计划,可取值:0、1、2。0:解除内存中绑定;1:内存中绑定;2:持久化绑定。解除持久化绑定可以通过系统过程函数 SP_REMOVE_STORE_PLN 完成。
hash_value:执行计划的哈希值,其值可以从动态视图 V$SQL_PLAN 中的 HASH_VALUE 列获得。
schid:执行计划的模式 ID。
返回值:
无
举例说明:
绑定 SQL 语句“SELECT * FROM T1”对应的执行计划:
SP_SET_PLN_BINDED('SELECT * FROM T1;', 'SYSDBA', 'SQL', 1);
30)SP_SET_PLN_DISABLED
定义:
SP_SET_PLN_DISABLED(
pln_id bigint,
disabled int
)
功能说明:
设置绑定执行计划为禁用或启用。
参数说明:
pln_id:绑定执行计划 ID,对应于系统表 SYSPLNINFO 的 PLN_ID 列。系统表 SYSPLNINFO 请参考《DM8 系统管理员手册》中的附录 1。
disabled:是否禁用执行计划。取值为 0、1。0 表示启用;1 表示禁用。
返回值:
无
举例说明:
禁用系统表 SYSPLNINFO 中 PLN_ID 为 1 的执行计划:
SP_SET_PLN_DISABLED(1, 1);
31)SF_GET_PLN_VERSION
定义:
SF_GET_PLN_VERSION(
type int
)
功能说明:
获取执行计划指定类型的版本号。
参数说明:
type:版本号类型。取值为0、1、2。0表示操作符版本号;1表示指令版本号;2表示格式版本号。
返回值:
执行计划指定类型的版本号。
举例说明:
获取执行计划的操作符版本号:
SELECT SF_GET_PLN_VERSION(0);
32)SP_REMOVE_STORE_PLN
定义:
SP_REMOVE_STORE_PLN(
pln_id bigint
)
功能说明:
移除持久化绑定的执行计划。
参数说明:
pln_id:绑定执行计划 ID,对应于系统表 SYSPLNINFO 的 PLN_ID 列。系统表 SYSPLNINFO 请参考《DM8 系统管理员手册》中的附录 1。
返回值:
无
举例说明:
移除系统表 SYSPLNINFO 中 PLN_ID 为 1 的执行计划:
SP_REMOVE_STORE_PLN(1);
33)$$PLSQL_UNIT
定义:
$$PLSQL_UNIT
功能说明:
获取当前方法所在 DMSQL 程序名称。其中,语句块因为无名称所以不显示。
返回值:
DMSQL 程序名称。
举例说明:
使用$$PLSQL_UNIT 获取当前方法所在的 DMSQL 程序名称。
create or replace package test_dm
is
procedure test_plsql_prc;
function test_plsql_fnc return varchar;
end test_dm;
create or replace package body test_dm is
procedure test_plsql_prc IS
i pls_integer;
begin
DBMS_OUTPUT.PUT_LINE('Inside test_plsql_prc');
i := $$PLSQL_LINE;
DBMS_OUTPUT.PUT_LINE('i = ' || i);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_LINE = ' || $$PLSQL_LINE);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_UNIT = ' || $$PLSQL_UNIT);
end test_plsql_prc;
function test_plsql_fnc return varchar
IS
j pls_integer;
res varchar(100);
begin
DBMS_OUTPUT.PUT_LINE('Inside test_plsql_fnc');
j := $$PLSQL_LINE;
res := $$PLSQL_UNIT;
DBMS_OUTPUT.PUT_LINE('j = ' || j);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_LINE = ' || $$PLSQL_LINE);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_UNIT = ' || $$PLSQL_UNIT);
return (res);
end test_plsql_fnc;
end test_dm;
declare
res varchar(100);
begin
res := test_dm.test_plsql_fnc;
DBMS_OUTPUT.PUT_LINE('$$PLSQL_UNIT2 = ' || res);
end;
打印结果如下:
Inside test_plsql_fnc
j = 19
$$PLSQL_LINE = 22
$$PLSQL_UNIT = TEST_DM
$$PLSQL_UNIT2 = TEST_DM
34)$$PLSQL_LINE
定义:
$$PLSQL_LINE
功能说明:
获取当前方法在 DMSQL 程序中的行号。
返回值:
行号。
举例说明:
使用$$PLSQL_LINE 获取当前方法在 DMSQL 程序中的行号。
CREATE OR REPLACE PROCEDURE p
IS
i pls_integer;
c varchar(100);
BEGIN
DBMS_OUTPUT.PUT_LINE('Inside p');
i := $$PLSQL_LINE;
DBMS_OUTPUT.PUT_LINE('i = ' || i);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_LINE = ' || $$PLSQL_LINE);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_UNIT = ' || $$PLSQL_UNIT);
END;
BEGIN
DBMS_OUTPUT.PUT_LINE('当前块中的信息:');
DBMS_OUTPUT.PUT_LINE($$PLSQL_LINE);
DBMS_OUTPUT.PUT_LINE('$$PLSQL_LINE = ' || $$PLSQL_LINE);
DBMS_OUTPUT.PUT_LINE('P中的信息:');
p;
END;
打印结果如下:
当前块中的信息:
3
$$PLSQL_LINE = 4
P中的信息:
Inside p
i = 7
$$PLSQL_LINE = 9
$$PLSQL_UNIT = P
35)SP_SESSION_BT
定义:
SP_SESSION_BT (
session_id bigint
)
功能说明:
通过会话 ID,查询该会话虚拟机当前执行的堆栈信息。如果输入的会话处于空闲状态,则本过程不输出信息。当一个会话执行一个复杂存储过程,长时间没有结束时,本过程提供了一个手段,让 DBA 可以通过另一个活动的会话,来查询长耗过程的执行情况,定位到正在执行的过程名、代码行及对应的 SQL 文本片段,便于诊断可能的性能问题。
参数说明:
session_id:指定的会话 ID。
返回值:
无
举例说明:
SP_SESSION_BT(510180488);
36)SF_WHO_CALLED_ME
定义:
SF_WHO_CALLED_ME(
owner_name varchar2,
caller_name varchar2,
line_num number,
caller_type varchar2
)
功能说明:
获取上层语句块对当前语句块的调用信息。
参数说明:
owner_name:输出参数,上层语句块所属模式名。
caller_name:输出参数,上层语句块的过程名或函数名。
line_num:输出参数,上层语句块调用当前语句块的行号。
caller_type:输出参数,上层语句块类型,取值包括:ANONYMOUS BLOCK:匿名块;PROCEDURE:过程;FUNCTION:函数。当上层语句块非过程或函数时,语句块类型为 ANONYMOUS BLOCK,此时参数 owner_name 和 caller_name 均为空串。
返回值:
无
举例说明:
创建过程 CHILD_PROC 和 PARENT_PROC,PARENT_PROC 调用 CHILD_PROC,使用系统函数 SF_WHO_CALLED_ME 获取 PARENT_PROC 对 CHILD_PROC 的调用信息。
//创建过程CHILD_PROC
CREATE OR REPLACE PROCEDURE CHILD_PROC(ID NUMBER)
AS
OWNER_NAME VARCHAR2(100);
CALLER_NAME VARCHAR2(100);
LINE_NUMBER NUMBER;
CALLER_TYPE VARCHAR2(100);
BEGIN
SF_WHO_CALLED_ME(OWNER_NAME, CALLER_NAME, LINE_NUMBER, CALLER_TYPE);
DBMS_OUTPUT.PUT_LINE('[ID:] ' || ID || ' [CALLER_TYPE:] ' || CALLER_TYPE || ' [OWNER_NAME:] ' || OWNER_NAME || ' [CALLER_NAME:] ' || CALLER_NAME || ' [LINE_NUMBER:] ' || LINE_NUMBER);
END;
/
//创建过程PARENT_PROC
CREATE OR REPLACE PROCEDURE PARENT_PROC
AS
V_CHILD_PROC VARCHAR2(100) := 'BEGIN SYSDBA.CHILD_PROC (1); END;';
BEGIN
EXECUTE IMMEDIATE V_CHILD_PROC;
SYSDBA.CHILD_PROC(2);
END;
/
//调用过程PARENT_PROC
CALL PARENT_PROC();
执行结果如下:
[ID:] 1 [CALLER_TYPE:] ANONYMOUS BLOCK [OWNER_NAME:] [CALLER_NAME:] [LINE_NUMBER:] 1
[ID:] 2 [CALLER_TYPE:] PROCEDURE [OWNER_NAME:] SYSDBA [CALLER_NAME:] PARENT_PROC [LINE_NUMBER:] 6
14. 编目函数调用的系统函数
1)SF_GET_BUFFER_LEN
定义:
SF_GET_BUFFER_LEN(
name varchar,
length int,
scale int
)
参数说明:
name:某列数据类型名,数据类型为 VARCHAR。
length:列的精度,INT 类型。
scale:列的刻度,INT 类型。
功能说明:
根据某列数据类型名 name 和列的精度 length 刻度 scale 获取该列存贮在硬盘上的长度。
返回值:
列存贮长度,数据类型为 INT。
举例说明:
SELECT SF_GET_BUFFER_LEN('VARCHAR',3,2);
查询结果如下:
3
2)SF_GET_DATA_TYPE
定义:
INT
SF_GET_DATA_TYPE(
name varchar,
scale int,
version int
)
参数说明:
name:某列数据类型名,数据类型为 VARCHAR。
scale:时间间隔类型刻度,INT 类型。
version:版本号,INT 类型。
功能说明:
根据数据类型关键字获取对应的 SQL 数据类型。
返回值:
数据类型值,数据类型为 INT。
举例说明:
SELECT SF_GET_DATA_TYPE('VARCHAR',3,2);
查询结果如下:
12
3)SF_GET_DATE_TIME_SUB
定义:
INT
SF_GET_DATE_TIME_SUB(
name varchar,
scale int
)
参数说明:
name:某列数据类型名,数据类型为 VARCHAR。
scale:类型刻度,INT 类型。
功能说明:
获得时间类型的子类型。
返回值:
时间类型子类型值,数据类型为 INT。
举例说明:
SELECT SF_GET_DATE_TIME_SUB('datetime',2);
查询结果如下:
3
4)SF_GET_DECIMAL_DIGITS
定义:
INT
SF_GET_DECIMAL_DIGITS(
name varchar,
scale int
)
参数说明:
name:某列数据类型名,数据类型为 VARCHAR。
scale:预期类型刻度,INT 类型。
功能说明:
根据某数据类型名和预期的刻度获取该数据类型的实际刻度。
返回值:
类型实际刻度值,数据类型为 INT。
举例说明:
SELECT SF_GET_DECIMAL_DIGITS('INT',2);
查询结果如下:
0
5)SF_GET_SQL_DATA_TYPE
定义:
INT
SF_GET_SQL_DATA_TYPE(
name varchar
)
参数说明:
name:某列数据类型名,数据类型为 VARCHAR。
功能说明:
根据某数据类型名返回该数据类型的 SQL 数据类型值。
返回值:
SQL 数据类型值,数据类型为 INT。
举例说明:
SELECT SF_GET_SQL_DATA_TYPE('INT');
查询结果如下:
4
6)SF_GET_SYS_PRIV
定义:
VARCHAR
SF_GET_SYS_PRIV(
privid int
)
参数说明:
privid:数据类型为 INT。取值范围:数据库权限 4096~4244,对象权限 8192~8198。除了 4123、4204 和 4205。
功能说明:
获得 privid 所代表的权限操作。
返回值:
前导字符串,数据类型为 VARCHAR。
举例说明:
SELECT SF_GET_SYS_PRIV(4096);
SELECT SF_GET_SYS_PRIV(4099);
查询结果如下:
CREATE DATABASE
CREATE LOGIN
7)SF_GET_OCT_LENGTH
定义:
INT
SF_GET_OCT_LENGTH(
name varchar,
length int
)
参数说明:
name:数据类型名,数据类型为 VARCHAR。
length:类型长度,INT 类型。
功能说明:
返回变长数据类型的长度。
返回值:
类型长度,数据类型为 INT。
举例说明:
SELECT SF_GET_OCT_LENGTH('VARCHAR',3);
查询结果如下:
3
8)SF_GET_TABLES_TYPE
定义:
VARCHAR
SF_GET_TABLES_TYPE(
type varchar
)
参数说明:
type:表的类型名,数据类型为 VARCHAR。
功能说明:
返回表类型名。
返回值:
表类型名,数据类型为 VARCHAR。
举例说明:
SELECT SF_GET_TABLES_TYPE('UTAB');
查询结果如下:
TABLE
9)CURRENT_SCHID
定义:
INT
CURRENT_SCHID()
参数说明:
无
功能说明:
返回当前会话的当前模式 ID。
返回值:
当前会话的当前模式 ID。
举例说明:
SELECT CURRENT_SCHID();
查询结果如下:
150994945
10)SF_GET_SCHEMA_NAME_BY_ID
定义:
VARCHAR
SF_GET_SCHEMA_NAME_BY_ID(
schid int
)
参数说明:
schid:模式 ID,INT 类型。
功能说明:
根据模式 ID 返回模式名。
返回值:
模式名,数据类型为 VARCHAR。
举例说明:
SELECT SF_GET_SCHEMA_NAME_BY_ID(150994945);
查询结果如下:
SYSDBA
11)SF_COL_IS_IDX_KEY
定义:
INT
SF_COL_IS_IDX_KEY(
key_num int,
key_info varbinary,
col_id int
)
参数说明:
key_num:键值个数,数据类型为 INT。
key_info:键值信息,数据类型为 VARBINARY。
col_id:列 ID,INT 类型。
功能说明:
判断所给的 colid 是否是 index key。
返回值:
是否索引键,数据类型为 INT。
举例说明:
CREATE TABLE TT1(C1 INT);
CREATE INDEX ID1 ON TT1(C1);
SELECT ID FROM SYSOBJECTS WHERE NAME LIKE 'TT1';//1334
SELECT INDS.KEYNUM, INDS.KEYINFO, SF_COL_IS_IDX_KEY(INDS.KEYNUM, INDS.KEYINFO, COLS.COLID) FROM (SELECT ID,PID,NAME FROM SYSOBJECTS WHERE SUBTYPE$='INDEX') AS OBJ_INDS, SYSCOLUMNS AS COLS, SYSINDEXES AS INDS WHERE COLS.ID = 1334 AND OBJ_INDS.PID = 1334 AND INDS.ID = OBJ_INDS.ID;
查询结果如下:
1 000041 1 //ID1
0 0 //聚集索引
12)SF_GET_INDEX_KEY_ORDER
定义:
VARCHAR
SF_GET_INDEX_KEY_ORDER(
key_num int,
key_info varbinary,
col_id int
)
参数说明:
key_num:索引键个数,数据类型为 INT。
key_info:键值信息,数据类型为 VARBINARY。
col_id:列 ID,INT 类型。
功能说明:
获得当前 column 的 key 的排序。
返回值:
类型长度,数据类型为 VARCHAR。
举例说明:
CREATE TABLE TT1(C1 INT);
CREATE INDEX ID1 ON TT1(C1);
SELECT ID FROM SYSOBJECTS WHERE NAME LIKE 'TT1';//1135
SELECT SF_GET_INDEX_KEY_ORDER(INDS.KEYNUM, INDS.KEYINFO, COLS.COLID) FROM (SELECT ID,PID,NAME FROM SYSOBJECTS WHERE SUBTYPE$='INDEX') AS OBJ_INDS, SYSCOLUMNS AS COLS, SYSINDEXES AS INDS WHERE COLS.ID = 1135 AND OBJ_INDS.PID = 1135 AND INDS.ID = OBJ_INDS.ID;
查询结果:
A
NULL
13)SF_GET_INDEX_KEY_SEQ
定义:
INT
SF_GET_INDEX_KEY_SEQ(
key_num int,
key_info varbinary,
col_id int
)
参数说明:
key_num:索引键个数,数据类型为 INT。
key_info:键值信息,数据类型为 VARBINARY。
col_id:列 ID,INT 类型。
功能说明:
获得当前 column 所在的 key 序号。
返回值:
当前列 KEY 序号,数据类型为 INT。
举例说明:
CREATE TABLE TT1(C1 INT);
CREATE INDEX ID1 ON TT1(C1);
SELECT ID FROM SYSOBJECTS WHERE NAME LIKE 'TT1';//1135
SELECT SF_GET_INDEX_KEY_SEQ(INDS.KEYNUM, INDS.KEYINFO, COLS.COLID) FROM (SELECT ID,PID,NAME FROM SYSOBJECTS WHERE SUBTYPE$='INDEX') AS OBJ_INDS, SYSCOLUMNS AS COLS, SYSINDEXES AS INDS WHERE COLS.ID = 1135 AND OBJ_INDS.PID = 1135 AND INDS.ID = OBJ_INDS.ID;
查询结果如下:
1
-1
14)SF_GET_UPD_RULE
定义:
INT
SF_GET_UPD_RULE(
rule varchar(2)
)
参数说明:
rule:规则名,数据类型为 VARCHAR。rule 参数只会用到 rule[0],取值为''/'C'/'N'/'D',分别表示 no act/cascade/set null/set default。
功能说明:
解析在 SYSCONS 中 faction 中保存的外键更新规则。
返回值:
外键更新规则值,数据类型为 INT。
举例说明:
SELECT SF_GET_UPD_RULE('C');
查询结果如下:
0
15)SF_GET_DEL_RULE
定义:
INT
SF_GET_DEL_RULE(
rule varchar(2)
)
参数说明:
rule:规则名,数据类型为 VARCHAR,rule 参数只会用到 rule[1],取值为''/'C'/'N'/'D',分别表示 no act/cascade/set null/set default。
功能说明:
解析在 SYSCONS 中 faction 中保存的外键删除规则。
返回值:
外键删除规则值,数据类型为 INT。
举例说明:
SELECT SF_GET_DEL_RULE('AC');
查询结果如下:
0
16)SF_GET_OLEDB_TYPE
定义:
INT
SF_GET_OLEDB_TYPE(
name varchar
)
参数说明:
name:类型名,数据类型为 VARCHAR。
功能说明:
获得 OLEDB 的数据类型长度。
返回值:
数据类型值,数据类型为 INT。
举例说明:
SELECT SF_GET_OLEDB_TYPE('INT');
查询结果如下:
3
17)SF_GET_OLEDB_TYPE_PREC
定义:
INT
SF_GET_OLEDB_TYPE_PREC(
name varchar,
length int )
参数说明:
name:类型名,数据类型为 VARCHAR。
length:类型长度,数据类型为 INT。
功能说明:
获得 OLEDB 的数据类型的精度。
返回值:
数据类型的精度值,数据类型为 INT。
举例说明:
SELECT SF_GET_OLEDB_TYPE_PREC('INT',2);
查询结果如下:
10
18)SP_GET_TABLE_COUNT
定义:
BIGINT
SP_GET_TABLE_COUNT(
table_id int
)
参数说明:
table_id:类型长度,数据类型为 INT。
功能说明:
获得表行数。
返回值:
表的行数,数据类型为 BIGINT。
举例说明:
SELECT SP_GET_TABLE_COUNT(1097);
查询结果如下:
69
19)SF_OLEDB_TYPE_IS_LONG
定义:
INT
SF_OLEDB_TYPE_IS_LONG(
typename varchar )
参数说明:
typename:类型名,数据类型为 VARCHAR。
功能说明:
判断类型是否较长。
返回值:
0 或者 1,数据类型为 INT。
举例说明:
SELECT SF_OLEDB_TYPE_IS_LONG('IMAGE');
SELECT SF_OLEDB_TYPE_IS_LONG('INT');
查询结果如下:
1
0
20)SF_OLEDB_TYPE_IS_BESTMATCH
定义:
INT
SF_OLEDB_TYPE_IS_BESTMATCH(
typename varchar
)
参数说明:
typename:类型名,数据类型为 VARCHAR。
功能说明:
判断类型是否精确匹配类型。
返回值:
0 或者 1,数据类型为 INT。
举例说明:
SELECT SF_OLEDB_TYPE_IS_BESTMATCH('INT');
SELECT SF_OLEDB_TYPE_IS_BESTMATCH('IMAGE');
查询结果如下:
1
0
21)SF_OLEDB_TYPE_IS_FIXEDLEN
定义:
INT
SF_OLEDB_TYPE_IS_FIXEDLEN(
typename varchar )
参数说明:
typename:类型名,数据类型为 VARCHAR。
功能说明:
判断类型是否为定长类型。
返回值:
0 或者 1,数据类型为 INT。
举例说明:
SELECT SF_OLEDB_TYPE_IS_FIXEDLEN('INT');
SELECT SF_OLEDB_TYPE_IS_FIXEDLEN('IMAGE');
查询结果如下:
1
0
22)SF_GET_TABLE_COUNT
定义:
BIGINT
SF_GET_TABLE_COUNT(
schema_name varchar(128),
table_name varchar(128))
参数说明:
schema_name:模式名,数据类型为 varchar。
table_name:表名,数据类型为 varchar。
功能说明:
获得表行数。功能和 SP_GET_TABLE_COUNT 一样。
返回值:
表的行数,数据类型为 BIGINT。
举例说明:
SELECT SF_GET_TABLE_COUNT('SYSDBA','T');
查询结果如下:
69
15. BFILE
1)BFILENAME
定义:
BFILE
BFILENAME(
dir varchar,
filename varchar
)
参数说明:
dir:数据库的目录对象名,字符串中不能包含“:”。
filename:操作系统文件名,字符串中不能包含“:”。
功能说明:
生成一个 BFILE 类型数据。
返回值:
BFILE 数据类型对象。
16. 定制会话级 INI 参数
提供用户定制会话级 ini 参数默认值的功能。定制以后,当用户再次登录时无需复杂的设置就可以在当前会话中使用定制的会话级 ini 参数,并且使无法设置参数的 B/S 或者 C/S 应用也能使用特定的会话级 ini 参数。
定制后的 ini 参数值可以通过数据字典 SYSUSERINI 查看。
使用时有以下限制:
- 用户对会话级参数的定制和取消对于当前会话不会立刻生效,也不会影响当前已经连接的该用户的其他会话。该用户新登录的会话会使用定制的值作为默认值。
- MPP 环境下,参数的定制在整个 MPP 环境所有的服务器节点生效。
- 对于一个会话级 ini 参数,其取值优先级顺序为: 会话中设置的值 > 用户定制的值 > INI 文件中匹配的值。
- DBA 用户拥有定制、查询和删除所有用户 ini 的权限;普通用户拥有定制、查询和删除自身 ini 的权限。
对于不同数据类型的参数要使用不同的系统过程。ini 参数的 VALUE 有三种类型:INT、VARCHAR 和 DOUBLE,分别对应三个系统过程:
1)SP_SET_USER_INI
定义:
SP_SET_USER_INI(
user varchar,
para_name varchar,
value int
)
功能说明:
定制 INT 类型的 ini 参数。
参数说明:
user:用户名。
para_name:参数名。
value:INT 类型参数值。
举例说明:
SP_SET_USER_INI('USER1','SORT_BUF_SIZE','1234');
2)SP_SET_USER_STRING_INI
定义:
SP_SET_USER_STRING_INI(
user varchar,
para_name varchar,
value varchar
)
功能说明:
定制 VARCHAR 类型的 ini 参数。
参数说明:
user:用户名。
para_name:参数名。
value:VARCHAR 类型参数值。
3)SP_SET_USER_DOUBLE_INI
定义
SP_SET_USER_STRING_INI(
user varchar,
para_name varchar,
value varchar
)
功能说明:
定制 DOUBLE 类型的 ini 参数。
参数说明:
user:用户名。
para_name:参数名。
value:DOUBLE 类型参数值。
举例说明:
SP_SET_USER_DOUBLE_INI('USER2','INDEX_SKIP_SCAN_RATE','0.0035');
4)SP_CLEAR_USER_INI
定义
SP_CLEAR_USER_INI(
user varchar,
para_name varchar
)
功能说明:
清除用户 USER 的 PARA_NAME 的参数定制。当 USER 和 PARA_NAME 都等于 NULL 时,表示清除所有用户的所有定制;当 PARA_NAME 为 NULL 时,表示清除用户 USER 的所有定制。不支持 USER 为 NULL,PARA_NAME 不为 NULL 的情况。
参数说明:
user:用户名。
para_name:参数名。
举例说明:
SP_CLEAR_USER_INI('USER2',NULL);
17. 为 SQL 指定 HINT
提供无需修改 SQL 语句但依然能按照指定的 HINT 运行语句的相关功能。
使用时有以下限制:
- INI 参数 ENABLE_INJECT_HINT 需设置为 1;
- SQL 只能是语法正确的增删改查语句;
- SQL 会经过系统格式化,格式化之后的 SQL 和指定的规则名称必须全局唯一;
- HINT 一指定,则全局生效;
- 系统检查 SQL 匹配时,必须是整条语句完全匹配,不能是语句中子查询匹配;
- 可通过 SYSINJECTHINT 视图查看已指定的 SQL 语句和对应的 HINT。
1)SF_INJECT_HINT
定义
VARCHAR
SF_INJECT_HINT (
sql_text text,
hint_text text,
name varchar(128),
description varchar(256),
validate boolean
)
或者
VARCHAR
SF_INJECT_HINT (
sql_text text,
hint_text text,
name varchar(128),
description varchar(256),
validate boolean,
fuzzy boolean
)
功能说明:
对指定 SQL 增加 HINT。
参数说明:
sql_text:要指定 HINT 的 SQL 语句。
hint_text:要为 SQL 指定的 HINT。
name:可以指定名称,或者设为 NULL 让系统自动创建名称。
description: 对规则的详细描述,可为 NULL。
validata:规则是否生效,可为 NULL,则为默认值 TRUE。
fuzzy:SQL 的匹配规则为精准匹配或模糊匹配。值为 TRUE 或 NULL 时,模糊匹配;值为 FALSE 或缺省时,精准匹配。
返回值:
执行成功返回名称,执行失败报错误信息。
举例说明:
为以下语句指定 HINT 为 MMT_SIZE = 4 的精准匹配规则:
SF_INJECT_HINT('SELECT * FROM A;', 'MMT_SIZE(4)', 'TEST_INJECT', 'to test function of injecting hint', TRUE);
或者:
SF_INJECT_HINT('SELECT * FROM A;', 'MMT_SIZE(4)', 'TEST_INJECT', 'to test function of injecting hint', TRUE, FALSE);
为以下语句指定 HINT 为 MMT_SIZE = 4 的模糊匹配规则:
SF_INJECT_HINT('SELECT * FROM A;', 'MMT_SIZE(4)', 'TEST_INJECT', 'to test function of injecting hint', TRUE, TRUE);
或者:
SF_INJECT_HINT('SELECT * FROM A;', 'MMT_SIZE(4)', 'TEST_INJECT', 'to test function of injecting hint', TRUE, NULL);
2)SF_DEINJECT_HINT
定义:
INT
SF_DEINJECT_HINT (
name varchar(128)
)
功能说明:
对指定 SQL 撤回已增加的 HINT。
参数说明:
name: 要删除的规则名称。
返回值:
执行成功返回 0,执行失败返回错误码。
举例说明:
为 SQL 撤回已指定的 HINT:
SF_DEINJECT_HINT('TEST_INJECT');
3)SF_ALTER_HINT
定义:
INT
SF_ALTER_HINT (
name varchar(128),
attribute_name varchar(12),
attribute_value varchar(256)
)
功能说明:
修改已指定 HINT 的规则属性。
参数说明:
name: 要修改的规则名称。
attribute_name:要修改的属性名。
attribute_value:设置的属性值。
返回值:
执行成功返回 0,执行失败返回错误码。
举例说明:
让已指定的 HINT 的规则失效:
SF_ALTER_HINT('TEST_INJECT', 'STATUS', 'DISABLED');
18. 时区设置
本小节的过程与函数都是用来设置时区相关信息。
1)SP_SET_TIME_ZONE
定义:
SP_SET_TIME_ZONE(interval day)
SP_SET_TIME_ZONE(interval day to hour)
SP_SET_TIME_ZONE(interval day to minute)
SP_SET_TIME_ZONE(interval day to second)
SP_SET_TIME_ZONE(interval hour)
SP_SET_TIME_ZONE(interval hour to minute)
SP_SET_TIME_ZONE(interval hour to second)
功能说明:
设置时区为标准时区加上 interval day 中的小时和分钟。
返回值:
无
举例说明:
SP_SET_TIME_ZONE(INTERVAL '12 3:9' hour to second);
drop table ttime;
create table ttime (c2 timestamp with time zone);
insert into ttime values('1977-01-10 8:0:0');
select * from ttime;
查询结果如下:
1977-01-10 08:00:00.000000 +12:03
2)SP_SET_TIME_ZONE_STRING
定义:
SP_SET_TIME_ZONE_STRING(
varchar
)
功能说明:
设置时区为标准时区加上 varchar 的 interval hour。varchar 只能是 interval hour 或 hour to minute。
返回值:
无。
举例说明:
SP_SET_TIME_ZONE_string('7 3');
drop table ttime;
create table ttime (c2 timestamp with local time zone);
insert into ttime values('1977-01-10 8:0:0 +4:00');
select * from ttime;
查询结果如下:
1977-01-10 11:03:00.000000
3)SP_SET_TIME_ZONE_LOCAL
定义:
SP_SET_TIME_ZONE_LOCAL()
功能说明:
设置时区为当前服务器的时区。
返回值:
无。
举例说明:
SP_SET_TIME_ZONE_LOCAL();
drop table ttime;
create table ttime (c2 timestamp with local time zone);
insert into ttime values('1977-01-10 8:0:0 +3:00');
select * from ttime;
查询结果如下:
1977-01-10 13:00:00.000000
4)SF_TIME_ADD_TIME_ZONE_INTERVAL/ SF_DATETIME_ADD_TIME_ZONE_INTERVAL
定义:
DATETIME SF_TIME_ADD_TIME_ZONE_INTERVAL(time)
或
DATETIME SF_DATETIME_ADD_TIME_ZONE_INTERVAL(datetime)
功能说明:
将指定时间加上 LOCAL 时区时间。调用 SF_TIME_ADD_TIME_ZONE_INTERVAL 时,日期将被强制设置为 1900-01-01。
返回值:
无
举例说明:
select SF_TIME_ADD_TIME_ZONE_INTERVAL('2:00:36');
或
select SF_DATETIME_ADD_TIME_ZONE_INTERVAL('1988-01-01 2:00:36');
查询结果如下:
1900-01-01 10:00:36 +00:00
或
1988-01-01 10:00:36 +00:00
19. XML
本小节的过程与函数都是用来解析和查询 XML 数据的,目前 DM 支持解析的 XML 数据大小不得超过 500M。
1)SF_XMLQUERY
定义:
CLOB
SF_XMLQUERY(
xmldata clob,
xpath clob
)
功能说明:
解析得到的 XML 数据。xmldata 或 xpath 为 NULL 的情况下一律返回空串。
参数说明:
xmldata:待解析的 XML 数据。
xpath:指定的解析路径。
返回值:
解析得到的 XML 数据。
举例说明:
SELECT SF_XMLQUERY('<a><b>b</b></a>', '/a');
查询结果如下:
<a>
<b>b</b>
</a>
2)XMLQUERY
定义:
CLOB
XMLQUERY(
xmldata clob,
xpath varchar
)
功能说明:
解析得到的 XML 数据。xmldata 或 xpath 为 NULL 的情况下一律返回空串。
参数说明:
xmldata:待解析的 XML 数据。
xpath:指定的解析路径。
返回值:
解析得到的 XML 数据。
举例说明:
SELECT XMLQUERY('<a><b>b</b></a>', '/a');
查询结果如下:
<a>
<b>b</b>
</a>
3)EXISTSNODE
定义:
INT
EXISTSNODE(
xmldata clob,
xpath varchar
)
功能说明:
xmldata 中是否存在指定的路径节点,若存在则返回 1,不存在返回 0。
参数说明:
xmldata:待解析的 XML 数据。
xpath:指定的路径节点。
返回值:
1 代表节点存在,0 代表节点不存在。xmldata 或 xpath 为 NULL 的情况下一律返回空串。
举例说明:
SELECT EXISTSNODE('<a><b>b</b></a>', '/a');
查询结果如下:
1
4)EXTRACTVALUE
定义:
VARCHAR
EXTRACTVALUE(
xmldata clob,
xpath varchar
)
功能说明:
获取 xmldata 中指定路径下的结点值,若路径下不止一个结点,或者结点不是叶子结点,将报错处理。
参数说明:
xmldata:待解析的 XML 数据。
xpath:指定的路径。
返回值:
获取的节点值。xmldata 或 xpath 为 NULL 的情况下一律返回空串。
举例说明:
SELECT EXTRACTVALUE('<a><b>b</b></a>', '/a/b');
查询结果如下:
b
5)APPENDCHILDXML
定义:
CLOB
APPENDCHILDXML(
xmldata clob,
xpath varchar,
child clob
)
功能说明:
将 child 结点插入到 xmldata 的 xpath 下的结点中,并将插入结点后的新 xmldata 返回。
参数说明:
xmldata:源 XML 数据。
xpath:指定的插入节点路径。
child:指定的待插入节点。
返回值:
插入节点后的新 XML 数据。xmldata 或 xpath 为 NULL 的情况下一律返回空串。
举例说明:
SELECT APPENDCHILDXML('<a><b>b</b></a>', '/a', '<d>xxx</d>');
查询结果如下:
<a>
<b>b</b>
<d>xxx</d>
</a>
6)XMLPARSE
语法格式:
XMLPARSE(DOCUMENT <value_expr> [WELLFORMED])
图例:
功能说明:
XMLPARSE 用于解析 XMLTYPE 类型数据,亦即 value_expr 的值。若指定了 WELLFORMED 参数,则不对 XML 内容进行检查,否则会对内容的合法性进行检查,内容不合法则报错。
举例说明:
SELECT XMLPARSE(DOCUMENT '<a>good</a>' WELLFORMED);
查询结果如下:
<a>good</a>
7)XMLTABLE
语法格式:
XMLTABLE(<xmlpath> PASSING <xmldata> [COLUMNS <xmlcoldef_lst>])
图例:
功能说明:
查询 XML 数据的子选项。
参数说明:
xmlpath:XML 数据的路径。
xmldata:XMLTYPE 类型数据。
xmlcoldef_lst:列定义列表。
举例说明:
CREATE TABLE T3(C1 VARCHAR);
SF_SET_SESSION_PARA_VALUE('ENABLE_TABLE_EXP_REF_FLAG', 1); //开启同层列引用参数。SELECT语句中T3.C引用了同层表T3的列。
INSERT INTO T3 VALUES('<A><标签 属性="属性名">HELLO</标签></A>');
SELECT X1,X2 FROM T3, XMLTABLE('/A/标签' PASSING T3.C1 COLUMNS X1 VARCHAR(12) PATH '@属性', X2 VARCHAR(12) PATH 'text()');
查询结果如下:
行号 X1 X2
------- ------ -----
1 属性名 HELLO
8)XMLSEQUENCE
语法格式:
XMLSEQUENCE (EXTRACT ( <xmldata>, <xmlpath>) )
图例:
功能说明:
XMLSEQUENCE 用于获取 xmlpath 路径下 xmldata 中不同节点的数据,并将各结点数据按数组表的形式展示出来。
举例说明:
SELECT * FROM TABLE(XMLSEQUENCE(EXTRACT('<a><b>shanghai</b><b>dameng</b></a>','/a/b')));
查询结果如下:
行号 COLUMN_VALUE
---------- ---------------
1 <b>shanghai</b>
2 <b>dameng</b>
9)XMLELEMENT
语法格式:
XMLELEMENT(<identifier>, <exp> {,<exp>})
图例:
功能说明:
XMLELEMENT 用于将 exp 构建成 xml 数据类型元素,返回 xmltype 类型数据。
参数说明:
identifier:标识符。
exp:字符串类型的数据。
举例说明:
SELECT XMLELEMENT(DM, 'TXT1', 'TXT2') FROM DUAL;
查询结果如下:
行号 XMLELEMENT(DM,'TXT1','TXT2')
---------- --------------------
1 <DM>TXT1TXT2</DM>
10)XMLFOREST
语法格式:
XMLFOREST(<exp> [AS <identifier>] {,<exp> [AS <identifier>]})
图例:
功能说明:
XMLFOREST 用于将 exp 构建成 xml 数据类型元素,返回 xmltype 类型数据。当 exp 为列名时,可以省略标识符,此时将列名作为标识符,并将该列的查询结果作为字符串类型数据,其他情况不能省略标识符。
参数说明:
exp:字符串类型的数据。
identifier:标识符。
举例说明:
exp 不为列名,不能省略标识符:
SELECT XMLFOREST('TXT1' AS A, 'TXT2' AS B) FROM DUAL;
查询结果如下:
行号 XMLFOREST('TXT1'ASA,'TXT2'ASB)
---------- --------------------
1 <A>TXT1</A><B>TXT2</B>
exp为列名,可以省略标识符,省略后将列名作为标识符:
CREATE TABLE TEST(C1 INT,C2 VARCHAR);
INSERT INTO TEST VALUES(1, 'TXT');
SELECT XMLFOREST(C1,C2) FROM TEST;
查询结果如下:
行号 XMLFOREST(C1,C2)
---------- --------------------
1 <C1>1</C1><C2>TXT</C2>
11)XMLAGG
语法格式:
XMLAGG(<XMLdata>[<ORDER BY 子句 >])
图例:
功能说明:
XMLAGG 函数,拼接 xml 数据。
参数说明:
XMLdata:待拼接的数据。
ORDER BY 子句:请参考第 4 章 数据查询语句。
举例说明:
create table X (A varchar(10),B int);
insert into X values('aaa',3);
insert into X values('bb',2);
insert into X values('c',1);
select XMLAGG(XMLPARSE(content A WELLFORMED) order by B) from X;
查询结果如下:
cbbaaa
12)DELETEXML
定义:
CLOB
DELETEXML(
xmldata clob,
xpath clob
)
功能说明:
从 xmldata 中删除 xpath 路径下的结点。
参数说明:
xmldata:XML 数据。
xpath:XML 路径。
返回值:
删除结点后的 XML 数据。
举例说明:
SELECT deleteXML('<a><b2>地方<c>d</c></b2><b2>dd</b2></a>', 'a/b2/c');
查询结果如下:
<a>
<b2>地方</b2>
<b2>dd</b2>
</a>
13)INSERTCHILDXML
定义:
CLOB
INSERTCHILDXML(
xmldata clob,
xpath varchar,
exp varchar,
insnode clob
)
功能说明:
将 insnode 结点插入到 xmldata 的 xpath 路径下,其中 insnode 结点名必须与 exp 保持一致。
参数说明:
xmldata:XML 数据。
xpath:XML 路径。
exp:结点名。
insnode:待插入的 XML 结点。
返回值:
已插入结点后的 XML 数据。
举例说明:
SELECT INSERTchildXML('<a><b2>地方</b2><b2>dd</b2></a>', 'a/b2','c', xmltype('<c>china</c>'));
查询结果如下:
<a>
<b2>地方<c>china</c></b2>
<b2>dd<c>china</c></b2>
</a>
14)INSERTCHILDXMLAFTER
定义:
CLOB
INSERTCHILDXMLAFTER(
xmldata clob,
xpath varchar,
exp varchar,
insnode clob
)
功能说明:
将 insnode 结点插入到 xmldata 的 xpath 路径下 exp 子结点后面。
参数说明:
xmldata:XML 数据。
xpath:XML 路径。
exp:xpath 下的子结点名,insonde 在此结点之后插入。
insnode:待插入的 XML 结点。
返回值:
已插入结点后的 XML 数据。
举例说明:
SELECT INSERTchildXMLafter('<a><b2>地方</b2><b2>dd</b2></a>', 'a/','b2', xmltype('<c>china</c>'));
查询结果如下:
<a>
<b2>地方</b2>
<c>china</c>
<b2>dd</b2>
<c>china</c>
</a>
15)INSERTCHILDXMLBEFORE
定义:
CLOB
INSERTCHILDXMLBEFORE (
xmldata clob,
xpath varchar,
exp varchar,
insnode clob
)
功能说明:
将 insnode 结点插入到 xmldata 的 xpath 路径下 exp 子结点前面。
参数说明:
xmldata:XML 数据。
xpath:XML 路径。
exp:xpath 下的子结点名,insonde 在此结点之前插入。
insnode:待插入的 XML 结点。
返回值:
已插入结点后的 XML 数据。
举例说明:
SELECT INSERTchildXMLbefore('<a><b2>地方</b2><b2>dd</b2></a>', 'a/','b2', xmltype('<c>china</c>'));
查询结果如下:
<a>
<c>china</c>
<b2>地方</b2>
<c>china</c>
<b2>dd</b2>
</a>
16)INSERTXMLBEFORE
定义:
CLOB
INSERTXMLBEFORE(
xmldata clob,
xpath varchar,
insnode clob
)
功能说明:
将 insnode 结点插入到 xmldata 的 xpath 路径下 exp 结点前面。
参数说明:
xmldata:XML 数据。
xpath:XML 路径。
insnode:待插入的 XML 结点。
返回值:
已插入结点后的 XML 数据。
举例说明:
SELECT INSERTXMLbefore('<a><b2>hello</b2><b2>dd</b2></a>', '/a/b2[1]', xmltype('<c>china</c>'));
查询结果如下:
<a>
<c>china</c>
<b2>hello</b2>
<b2>dd</b2>
</a>
17)INSERTXMLAFTER
定义:
CLOB
INSERTXMLAFTER(
xmldata clob,
xpath varchar,
insnode clob
)
功能说明:
将 insnode 结点插入到 xmldata 的 xpath 路径下 exp 结点后面。
参数说明:
xmldata:XML 数据。
xpath:XML 路径。
insnode:待插入的 XML 结点。
返回值:
已插入结点后的 XML 数据。
举例说明:
SELECT INSERTXMLAFTER(xmltype('<a><b2>地方</b2><b2>dd</b2></a>'), 'a/b2', xmltype('<c>china</c>'));
查询结果如下:
<a>
<b2>地方</b2>
<c>china</c>
<b2>dd</b2>
<c>china</c>
</a>
18)UPDATEXML
定义:
CLOB
UPDATEXML(
xmldata clob,
xpath varchar,
updnode clob
)
功能说明:
用updnode替换xmldata的xpath路径下结点。
参数说明:
xmldata:XML数据。
xpath:XML路径。
updnode:用于替换的XML结点。
返回值:
更新结点后的XML数据。
举例说明:
SELECT UPDATEXML('<a><a1>d1</a1><a2>d2</a2></a>', '/a/a2', '<x>f</x>');
查询结果如下:
<a>
<a1>d1</a1>
<x>f</x>
</a>
20. IP
本小节的过程与函数都是用来进行 IP 地址比较的。
1)SF_INET_EQUAL
定义:
INT
SF_INET_EQUAL(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较两个 IP 地址是否相等。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
是否相等,1 表示相等,0 表示不相等。
举例说明:
SELECT SF_INET_EQUAL('192.168.1.1', '192.168.2.1') FROM DUAL;
查询结果如下:
0
2)SF_INET_NEQUAL
定义:
INT
SF_INET_NEQUAL(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较两个 IP 地址是否不等。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
是否不等,1 表示不等,0 表示相等。
举例说明:
SELECT SF_INET_EQUAL('192.168.1.1', '192.168.2.1') FROM DUAL;
查询结果如下:
1
3)SF_INET_LESS
定义:
INT
SF_INET_LESS(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否小于第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果。
举例说明:
SELECT SF_INET_LESS('192.168.1.1', '192.168.2.1') FROM DUAL;
查询结果如下:
1
4)SF_INET_LESS_EQUAL
定义:
INT
SF_INET_LESS_EQUAL(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否小于等于第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果。
举例说明:
SELECT SF_INET_LESS_EQUAL('192.168.1.1', '192.168.2.1') FROM DUAL;
查询结果如下:
1
5)SF_INET_GREAT
定义:
INT
SF_INET_GREAT(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否大于第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果。
举例说明:
SELECT SF_INET_GREAT('192.168.1.1', '192.168.2.1') FROM DUAL;
查询结果如下:
0
6)SF_INET_GREAT_EQUAL
定义:
INT
SF_INET_GREAT_EQUAL(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否大于等于第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果。
举例说明:
SELECT SF_INET_GREAT_EQUAL('192.168.1.1', '192.168.2.1') FROM DUAL;
查询结果如下:
0
7)SF_INET_CONTAIN
定义:
INT
SF_INET_CONTAIN(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否包含第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果,1 表示包含,0 表示不包含。
举例说明:
SELECT SF_INET_CONTAIN('145.13.255.1/16', '145.13.176.1/16') FROM DUAL;
查询结果如下:
0
8)SF_INET_CONTAIN_EQUAL
定义:
INT
SF_INET_CONTAIN_EQUAL(
ip1 varchar2(256),
ip2 varchar2(256)
)
功能说明:
比较第一个 IP 地址是否包含或等于第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果,1 表示包含或等于,0 表示不包含且不等于。
举例说明:
SELECT SF_INET_CONTAIN_EQUAL('145.13.255.1/16', '145.13.176.1/16') FROM DUAL;
查询结果如下:
1
9)SF_INET_BECONTAINED
定义:
INT
SF_INET_BECONTAINED(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否被第二个 IP 地址包含。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果,1 表示包含,0 表示不包含。
举例说明:
SELECT SF_INET_BECONTAINED('145.13.255.1/16', '145.13.176.1/16') FROM DUAL;
查询结果如下:
0
10)SF_INET_BECONTAINED_EQUAL
定义:
INT
SF_INET_BECONTAINED_EQUAL(
ip1 varchar(256),
ip2 varchar(256)
)
功能说明:
比较第一个 IP 地址是否被包含或等于第二个 IP 地址。
参数说明:
ip1:进行比较的第一个 IP 地址。
ip2:进行比较的第二个 IP 地址。
返回值:
比较结果,1 表示包含或等于,0 表示不包含且不等于。
举例说明:
SELECT SF_INET_BECONTAINED_EQUAL('145.13.255.1/16', '145.13.176.1/16') FROM DUAL;
查询结果如下:
1
11)SF_INET_SORT
定义:
VARCHAR
SF_INET_SORT(
ip varchar2,
)
功能说明:
将 IP 转换成一个可用来比较的字符串值。
参数说明:
ip:待转换的 IP 串,IP 串中的子网掩码为可选项。
返回值:
转换后的字符串。
举例说明:
将 IP 地址 192.168.100.2/12 转换成可比较的字符串值,其中/12 为子网掩码。
SELECT SF_INET_SORT ('192.168.100.2/12') FROM DUAL;
查询结果如下:
A192160000000012192168100002
21. ROWID
1)ROWIDTOCHAR
定义:
VARCHAR(18)
ROWIDTOCHAR (
rowid rowid
)
功能说明:
将 ROWID 类型的 ROWID 值转换成 BASE64 编码的定长为 18 字节的字符串。
参数说明:
rowid:ROWID 类型的数据。
返回值:
以 BASE64 编码的定长为 18 字节的字符串。
举例说明:
查询 TEST 表中的 ROWIDTOCHAR(ROWID)和 ROWID:
CREATE TABLE TEST(C1 INT);
INSERT INTO TEST VALUES(10);
INSERT INTO TEST VALUES(11);
SELECT ROWIDTOCHAR(ROWID),ROWID FROM TEST;
查询结果如下:
ROWIDTOCHAR(ROWID) ROWID
------------------ ------------------
AAAAAAAAAAAAAAAAAB AAAAAAAAAAAAAAAAAB
AAAAAAAAAAAAAAAAAC AAAAAAAAAAAAAAAAAC
2)CHARTOROWID
定义:
ROWID
CHARTOROWID (
c1 varchar(18)
)
功能说明:
将 BASE64 编码的定长 18 字节的字符串 STR 转换成 ROWID 数据类型。
参数说明:
C1:BASE64 编码的定长 18 字节的字符串,可为 NULL 或空串。
返回值:
ROWID 类型的值,参数为 NULL 或空串时返回 NULL。
举例说明:
将 BASE64 编码的定长 18 字节的字符串转换成 ROWID 类型的值:
CREATE TABLE T1(C1 INT);
CREATE TABLE T2(D1 ROWID,D2 VARCHAR(18));
INSERT INTO T1 SELECT LEVEL FROM DUAL CONNECT BY LEVEL<=5;
INSERT INTO T2(D1,D2) SELECT ROWID,ROWIDTOCHAR(ROWID) FROM T1;
SELECT D1,D2,CHARTOROWID(D2) FROM T2;
查询结果如下:
D1 D2 CHARTOROWID(D2)
------------------ ------------------ ------------------
AAAAAAAAAAAAAAAAAB AAAAAAAAAAAAAAAAAB AAAAAAAAAAAAAAAAAB
AAAAAAAAAAAAAAAAAC AAAAAAAAAAAAAAAAAC AAAAAAAAAAAAAAAAAC
AAAAAAAAAAAAAAAAAD AAAAAAAAAAAAAAAAAD AAAAAAAAAAAAAAAAAD
AAAAAAAAAAAAAAAAAE AAAAAAAAAAAAAAAAAE AAAAAAAAAAAAAAAAAE
AAAAAAAAAAAAAAAAAF AAAAAAAAAAAAAAAAAF AAAAAAAAAAAAAAAAAF
3)SF_BUILD_ROWID
定义:
ROWID
SF_BUILD_ROWID(
epno int,
partno bigint,
real_rowid bigint
)
功能说明:
根据站点号、分区号和数据在表中的物理行号构造一个 ROWID 类型的数据。
参数说明:
epno:站点号。取值范围 0~65535。
partno:分区号。取值范围 0~65534。
real_rowid:数据在表中的物理行号。取值范围 1~281474976710655。
返回值:
一个 ROWID 类型的数据。
举例说明:
假定站点号为 1,分区号为 2,数据的物理行号为 50。使用 SF_BUILD_ROWID 函数构造出一个 ROWID 类型数据。
SELECT SF_BUILD_ROWID(1,2,50);
查询结果如下:
AAABAAAAACAAAAAAAy
其中,AAAB 为站点号、AAAAAC 为分区号、AAAAAAAy 为 ROWID 值。
4)SF_GET_EP_SEQNO
定义:
INT
SF_GET_EP_SEQNO(
rowid rowid
)
功能说明:
在 DSC 环境下返回配置的站点号;MPP 或者 DPC 环境下返回 ROWID 上的站点号;否则返回 0。
参数说明:
rowid:ROWID 类型的数据。
返回值:
EP 站点号。
举例说明:
SELECT SF_GET_EP_SEQNO('AAABAAAAACAAAAAAAy');
查询结果如下:
0
5)SF_ROWID_GET_EP_SEQNO
定义:
INT
SF_GET_EP_SEQNO(
rowid rowid
)
功能说明:
根据 ROWID 数据类型获取本条数据来自哪个 EP 站点。本函数不适用于堆表的 ROWID。
参数说明:
rowid:ROWID 类型的数据。
返回值:
EP 站点号。
举例说明:
SELECT SF_ROWID_GET_EP_SEQNO('AAABAAAAACAAAAAAAy');
查询结果如下:
1
6)SF_ROWID_GET_PARTNO
定义:
INT
SF_ROWID_GET_PARTNO(
rowid rowid
)
功能说明:
根据 ROWID 数据类型获取本条数据的分区号。本函数不适用于堆表的 ROWID。
参数说明:
rowid:ROWID 类型的数据。
返回值:
分区号。
举例说明:
SELECT SF_ROWID_GET_PARTNO('AAABAAAAACAAAAAAAy');
查询结果如下:
2
7)SF_GET_REAL_ROWID
定义:
BIGINT
SF_GET_REAL_ROWID(
rowid rowid
)
功能说明:
根据 ROWID 数据类型获取本条数据的物理行号。本函数不适用于堆表的 ROWID。
参数说明:
rowid:ROWID 类型的数据。
返回值:
物理行号。
举例说明:
SELECT SF_GET_REAL_ROWID('AAABAAAAACAAAAAAAy');
查询结果如下:
50
附录 4 DM 技术支持
如果您在安装或使用 DM 及其相应产品时出现了问题,请首先访问我们的 Web 站点 http://www.dameng.com/。在此站点我们收集整理了安装使用过程中一些常见问题的解决办法,相信会对您有所帮助。
您也可以通过以下途径与我们联系,我们的技术支持工程师会为您提供服务。
武汉达梦数据库股份有限公司
地址:武汉市东湖高新技术开发区高新大道 999 号未来科技大厦 C3 栋 16-19 层
邮编:430073
电话:(+86)027-87588000
传真:(+86)027-87588000-8039
达梦数据库(北京)有限公司
地址:北京市海淀区北三环西路 48 号数码大厦 A 座 905
邮编:100086
电话:(+86)010-51727900
传真:(+86)010-51727983
达梦数据库(上海)有限公司
地址:上海市闸北区江场三路 28 号 301 室
邮编:200436
电话:(+86)021-33932716
传真:(+86)021-33932718
地址:上海市浦东张江高科技园区博霞路 50 号 201 室
邮编:201203
电话:(+86)021-33932717
传真:(+86)021-33932717-801
达梦数据库(广州)有限公司
地址:广州市荔湾区中山七路 330 号荔湾留学生科技园 703 房
邮编:510145
电话:(+86)020-38371832
传真:(+86)020-38371832
达梦数据库(海南)有限公司
地址:海南省海口市玉沙路富豪花园 B 座 1602 室
邮编:570125
电话:(+86)0898-68533029
传真:(+86)0898-68531910
达梦数据库(南宁)办事处
地址:广西省南宁市科园东五路四号南宁软件园五楼
邮编:530003
电话:(+86)0771-2184078
传真:(+86)0771-2184080
达梦数据库(合肥)办事处
地址:合肥市包河区马鞍山路金帝国际城 7 栋 3 单元 706 室
邮编:230022
电话:(+86)0551-3711086
达梦数据库(深圳)办事处 地址:深圳市福田区皇岗路高科利大厦 A 栋 24E
邮编:518033
电话:0755-83658909
传真:0755-83658909
技术服务:
电话:400-991-6599