按:SE14危险吗?如果是故意删除数据库、清空数据,那当然是危险的,但是,如果是正常操作导致的问题,比如SE14失败、超时DUMP、丢失了表等等,相信你看完本文会感觉这都不是问题,使用工具程序顺手就能解决了。
下面正文开始:
SE14作为SAP透明表在数据库层的处理工具,作用很多,但是最经常使用的还是在SE11修改了表字段后调整之用。本文要讲的就是这个场景,阐述SE14调整表的过程以及遇到问题后如何恢复数据,文末附上一个解决问题需要用到工具程序。
1. 什么时候需要运行SE14?
当SE11修改了表的字段,新的类型长度如果小于原长度,或者是修改了字段的数据类型,比如C类型变成了P类型等等这些需要强制转换的场景,并且表内已经有了数据,这个时候就需要运行SE14,使数据库内已存在的数据符合新的数据类型。
2. SE14的处理过程是怎样的?
以表ZTEST为例,正常的处理过程分下面几个步骤:
①、给表改名,RENAME 'ZTEST' TO 'QCMZTEST',即在表的前面加上QCM
②、删除表的所有索引,DROP INDEX 'ZTEST~0'
③、根据修改后的透明表字段创建数据库表QCM8ZTEST
④、QCM8表创建所有索引,
CREATE UNIQUE INDEX 'ZTEST~0' ON 'QCM8ZTEST'
⑤、数据从QCMZTEST 复制到 QCM8ZTEST。方法为取出QCM表内的数据放到内表,然后MOVE-
CORRESPONDING到新的表结构的内表,然后内表数据插入到QCM8表。
⑥、删除QCM表,DROP TABLE 'QCMZTEST'.
⑦、把QCM8表改名为透明表表名,RENAME 'QCM8ZTEST' TO 'ZTEST'。(
因为RENAME后数据库会自动把索引带过去,所以不需要删除索引重建 )。
出错后的继续调整过程:
DROP TABLE 'QCM8ZTEST'
CREATE TABLE 'QCM8ZTEST'
CREATE UNIQUE INDEX 'ZTEST~0' ON 'QCM8ZTEST'......
即继续调整的时候首先把QCM8表删除,然后从第三步开始执行
3. SE14为什么会失败?失败有哪些原因?
SE14的失败主要是发生第 ⑤ 步,MOVE-CORRESPONDING失败导致程序DUMP。
MOVE-CORRESPONDING为什么会失败呢?
因为MOVE-
CORRESPONDING属于强制赋值,当字段的新旧类型不同,比如旧类型是C类型,值为“ABC”,新类型为P类型,强制赋值的时候,把“ABC”赋值给P类型就会导致程序DUMP,然后SE14就失败了。
另外,前台执行超时也是一个常见的原因。
①、使用后台执行的方式执行SE14
②、先把字段删除,激活后再把字段加上,同时类型改为新类型
③、使用工具程序把更改的字段Update为空,然后再运行SE14
5. 如果已经失败了应该怎么办?
①、如果是前台执行超时导致的,只要勾中"后台",然后继续调整就行了
②、如果是第5步失败,那么再继续调整也是没有用的,这个时候有两个办法,一是使用工具程序的Update功能把QCMZTEST表的更改字段清空,再运行“继续调整”,二是“解锁表格”,然后使用SE14的“创建数据库表”或者SE11保存直接生成ZTEST表,如果报索引无法创建的错误就使用工具程序DROP
INDEX。使用第二种方法创建的表是空的,需要把数据再复制回来。
①、如果更改的字段数据不要了,删除再创建,如果还要,确保新格式能放下老数据
②、如果使用先删除再创建的方法,记得传输请求也是分两次
③、SE14尽量以后台的方式执行
本辅助程序基本上能解决所有的SE14造成的问题,最起码价值20 Manday,但是因为直接操作数据库,也请谨慎使用。
功能介绍:
①、查找表,可以根据表名查找是否存在,比如下面:
②、查看表内容,可以查看非SAP DDIC表的内容,比如QCM表
③、备份表,数据安全第一,任何时候多一个备份动作都是应该的
④、复制数据,核心功能,恢复数据用。可以把源表内容复制到目的表,主要是把QCMZTEST表的内容复制到ZTEST
⑤、DROP INDEX,因为SE14的Bug,在解锁表后索引并没有删除,导致新建表失败或者没有索引,需要先DROP INDEX
⑥、Update Table,可以update指定字段。在这儿用于把无法转换的字段清空。
8. 代码:
• * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *&---------------------------------------------------------------------**& Report ZSE14*&---------------------------------------------------------------------**& Baitianzhen*& SE14辅助工具,请谨慎使用!*&---------------------------------------------------------------------*REPORT zse14 NO STANDARD PAGE HEADING.
TABLES:dd02l,dd03l.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE btxt1. PARAMETERS: p_find RADIOBUTTON GROUP g1 USER-COMMAND uc DEFAULT 'X', p_view RADIOBUTTON GROUP g1, p_back RADIOBUTTON GROUP g1, p_copy RADIOBUTTON GROUP g1, p_drop RADIOBUTTON GROUP g1, p_updt RADIOBUTTON GROUP g1.SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE btxt2. PARAMETERS: p_index TYPE char20 MODIF ID a, p_uptab TYPE tabname MODIF ID c, p_upfld TYPE fieldname MODIF ID c, p_upval TYPE char255 MODIF ID c, p_frtab TYPE tabname MODIF ID g, p_totab TYPE tabname MODIF ID g, p_tanam TYPE tabname MODIF ID e, p_where TYPE char255 MODIF ID b, p_uprow TYPE i MODIF ID f DEFAULT 1000. SELECT-OPTIONS s_exfld FOR dd03l-fieldname NO INTERVALS MODIF ID d. PARAMETERS p_trunc AS CHECKBOX MODIF ID d.SELECTION-SCREEN END OF BLOCK b2.SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE btxt3. PARAMETERS p_usejob AS CHECKBOX.SELECTION-SCREEN END OF BLOCK b3.SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE btxt4. SELECTION-SCREEN COMMENT /1(79): txt1,txt2,txt3,txt4,txt5,txt6,txt7.SELECTION-SCREEN END OF BLOCK b4.AT SELECTION-SCREEN OUTPUT. btxt1 = '功能'. btxt2 = '操作'. btxt3 = '选项'. btxt4 = '说明'. %_p_drop_%_app_%-text = 'DROP INDEX'. %_p_copy_%_app_%-text = '复制数据'. %_p_updt_%_app_%-text = 'UPDATE TABLE'. %_p_view_%_app_%-text = '查看表数据'. %_p_find_%_app_%-text = '查找表'. %_p_back_%_app_%-text = '备份表'. %_p_frtab_%_app_%-text = '从表'. %_p_totab_%_app_%-text = '到表'. %_s_exfld_%_app_%-text = '排除源表字段'. %_p_trunc_%_app_%-text = '复制前清空目的表(所有Client所有数据)'. %_p_index_%_app_%-text = '索引名'. %_p_where_%_app_%-text = 'WHERE语句'. %_p_uptab_%_app_%-text = 'UPDATE表'. %_p_upfld_%_app_%-text = 'UPDATE字段'. %_p_upval_%_app_%-text = 'UPDATE值为'. %_p_tanam_%_app_%-text = '数据库表名'. %_p_uprow_%_app_%-text = '最大行数'. %_p_usejob_%_app_%-text = '后台执行
...