ABAP changes to database table
来源:互联网 发布:java多线程编程题代码 编辑:程序博客网 时间:2024/06/06 17:56
Abap程序正确使用数据库表的前提条件是数据字典table的runtime object必须与数据库中的表保持一致。当abap dictionary中的table被修改时你必须得确认相应的数据库中table的信息是否也需要被调整,不是abap dictionary中table的任何修改都需要在数据库中做相应的调整,比如调整table中fields的顺序就不需要反映导数据库中,key fields除外。
当改变ABAP dictionary定义的时候,可以通过三种方式调整数据库中的表:
l 数据库中的table被删除然后重新创建,表中的内容将会丢失。
l 修改表的catalog,数据库中表的definition只是被简单的修改,数据仍然保留。但是索引应该需要重新创建。
l Covert table。这样可能会花费大量的时间。
表中没有数据时,数据表会被删除然后重新创建,如果表中有数据就会通过alter table的方式来实现,如果不能够实现就会通过covert table的方式来实现。
Table在conversion的过程当中,数据库中不会存在与dictionary同名的表,所以相应的程序将会得不到这张表,所以在conversion table时应尽量避免相关业务正在运行的情况。Table在convert的过程当中,需要有两份数据同时存在,所以在convert大表时应当考虑存储空间是否够用。数据库会在每16M的数据被convert后执行一次commit。所以rollback segment也需要至少16MB的存储空间。Commit之后需要的lock就会被释放掉,直到下16M的数据被请求时就会产生新的锁。
如果你减少了key fields,一个key对应多条记录的情况只能有一条记录保留,不能确定那条记录会被保留,所以在这种情况下应当先对表中的数据进行清理。如果conversion terminate,lock仍然存在,并产生restart log。在conversion过程中,数据库表的original name不会存在,所以不要在production时convert table。在conversion之前你必须deactivate跟这个表相关的所有的applications。如果conversion由于某种原因比如tablespace overflow,相应的application也不能正常运行,你必须找的terminate的原因然后continue直到complete。Conversion可能会导致的问题:
l Tablespace overflow
l Data loss if key is reduced in size
l Invalid change of type
在conversion中数据的copy是通过MOVE-CORRESPONDING来实现的,所以只有那些可以让MOVE-CORRESPONDING正常执行的type改变才能在conversion中被允许。否则就会导致conversion terminate。这种情况下你就不得不把表恢复到conversion之前的状态。通过数据库工具删除QCM8表,将QCM表重新命名为原始名。重新创建runtime object(在数据库层次)。在dictionary中把table structure改回到原始状态,然后重新激活这个表。
当conversion terminate时lock依然存在,你将无法通过dictionary编辑table。你可以通过se14分析terminate原因并继续进行conversion。通过这个utility你可以分析错误的原因以及当前正在conversion的表的状态。可以通过object log来查看错误的原因还可以查看dump和syslog。如果错误被排除可以通过点击continue来继续conversion。也可以unlock a table,不过如果数据仅存在于temporary table中就要禁止unlock table。
Append structure可以使你在不修改标准表的情况下为表添加客户字段。一个append structure只能添加给一个表,一个表可以拥有多个append structure。当一个表被激活所有激活的append structure的字段就会被发现,他们也会被增加到相应的表中。当append structure被创建或修改时,相应的表也会被激活,相应的变化也会被反映。在ABAP程序中append structure可以像普通的structure type一样使用。4.6C以后,append structure中的字段在table中激活后可以用于foreign key和search help。
Append structure是在customer namespace中定义的,所以其不会受sap version upgrade的影响。在升级的过程当中,新的表被导入,那么激活的append structure中的字段也会被自动加入新的表当中。Abap dictionary中的字段顺序与数据库中的可以不同,所以在添加append structure或者在append structure中增加字段时不需要covert table。这些字段在数据库中都是被加入到了最后面,你可以通过alter table来调整数据库中表的结构。关于append structure的几点注意事项:
l Pooled table和cluster table不能创建append structure。
l 如果长字段(LCHR LRAW)在表中存在,那就不能使用append structure,因为这些字段必须位于表的最后
l 如果在SAP standard table中创建append structure,那么这些字段应当以ZZ或YY开始,以避免与标准字段的名字冲突。
l 如果作为合作伙伴,你有自己的namespace那么这些字段的命名也应当在这个命名空间中。
- ABAP changes to database table
- No changes made to database
- ABAP中两个DATABASE TABLE 的JOIN方法
- How to convert CSV into Database Table?
- How to Create/Drop Database, Table
- MSSQL 2008 Saving changes is not permitted. THe changes you have made require the following table to
- Important Changes to Oracle Database Patch Sets Starting With 11.2.0.2 [ID 1189783.1]
- SQL SERVER – 2005 – Database Table Partitioning Tutorial – How to Horizontal Partition Database Table
- Enable saving of changes that require table to be re-created SQL server 2008
- Access Remote Database Table in ABAP Program Via DBLink of ORACLE
- No changes To Deploy
- How to: Generate XML file from database table
- MySQL how to show table in a database
- Flask-Migrate用法(Target database is not up to date原因、No changes in schema detected原因)
- Error message when you try to save a table in SQL Server 2008: "Saving changes is not permitted"
- ABAP Screen table structure
- ABAP screen table
- ABAP TABLE BUFFER
- Windows Via C/C++ 读书笔记 6
- CSS滤镜说明和用法
- C++类对象的复制-拷贝构造函数
- LG KF350常见问题大收集!!
- C#导API
- ABAP changes to database table
- Time::FormatL详解
- 【译】VC10中的C++0x特性 part 3 : 声明之类型
- 带有可变参数的宏
- SSH协议
- ASP.NET的26个性能优化方法
- linux常见文件及目录操作函数(转载)
- HttpSession常见问题
- unpivot,pivot联合使用示例