DROP COLUMN

要从现有表中删除列,请使用带有 ALTER TABLE 命令的 DROP COLUMN 设置。

在此命令中,删除列的语法按如下所示:

DROP [COLUMN] column_name

不能删除主键列。

删除列时,需要相当数量的初步操作以标识并除去列上的任何外部依赖性。 必须通过查询相关数据库表来搜索对触发器、过程、视图以及限制过滤器中的列的任何引用。 还必须搜索探测器规则文件和网关映射文件以获取列的引用。

注:
  • 如果删除触发器、过程、视图、限制过滤器或索引所依赖的列,这些依赖对象也将删除,且将有一个警告写入 ObjectServer 日志文件。 要避免无意中删除触发器、过程、视图或限制过滤器,请阅读用于删除列的以下指南。 (因为索引直接链接至列,所以删除索引的相关联列的同时将始终删除该索引)。
  • ObjectServers (在 OMNIbus v8.1之前)。 修订包 8。 如果在 alerts.status上删除某个字段,那么在删除该字段之后,必须重新启动所有探测器并除去任何 SAF 文件。
  • 在 FP8 中已解决ObjectServers ,位于 OMNIbus v8.1。 修订包 8 或更高版本。 探测器现在对于 alerts.status 上的字段删除具有足够的弹性,并且不再需要重新启动或除去 SAF 文件。

以下指南基于想要从 ObjectServer 中的表删除 Country 列的示例方法:

  1. 使用 SQL 交互式界面连接至 ObjectServer(例如,OWL),如下表中所示。 缺省情况下将假设用户名,但是您必须输入密码。
    表 1. 启动 SQL 交互式界面
    选项 描述
    UNIX 输入:

    $NCHOME/omnibus/bin/nco_sql -server OWL

    Windows 输入:

    %NCHOME%\omnibus\bin\isql -S OWL

  2. 使用 ALTER SYSTEM BACKUP 命令将 ObjectServer 备份到临时位置(例如,/tmp/mybackup)。 这种预防措施确保您可以在必要时恢复系统。
    1> alter system backup '/tmp/mybackup';
    2> go
  3. catalog.triggers 表中存储的那样,列出触发器的详细信息。
    1> describe catalog.triggers;
    2> go

    表中每个列的键类型、名称、数据类型和长度都将输出到屏幕。

  4. 检索在触发器主体或求值子句中引用 Country 列的所有触发器的名称:
    1> select TriggerName from catalog.triggers where CodeBlock like ' Country' or EvaluateBlock like ' Country';
    
  5. 记下所有列出的触发器,并通过编辑每个触发器来除去 Country 引用。 您可以从 Netcool/OMNIbus Administrator 中的 " 触发器详细信息 " 窗口 (操作 选项卡) 执行此操作。
    重要信息: 在进行此过程的其余步骤中描述的任何更改之前,请检查以下条件。
    • 模式中可能有两个或更多的表使用相同列名。 如果这样,请在执行任何更改前针对想要删除的表标识正确的触发器。
    • 检查触发器之间是否不存在可能导致不想要的更改的依赖性。
  6. 重复步骤 3 到 5 以标识引用 Country 列的任何其他对象,并除去引用的所有实例。 下表列出了需要搜索的数据库表,相关 SELECT 语句以及可用于编辑对象的 Netcool/OMNIbus Administrator 窗口。
    表 2. 要搜索的系统目录表, SELECT 语句和 Netcool/OMNIbus Administrator 窗口
    对象类型 表名 SELECT 语句 Netcool/OMNIbus Administrator 窗口
    过程 catalog.sql_procedures select ProcedureName from catalog.sql_procedures where CodeBlock like 'Country'; SQL 过程详细信息”窗口
    限制过滤器 catalog.restrictions select RestrictionName from catalog.restrictions where ConditionText like 'Country'; 限制过滤器详细信息”窗口
    视图 catalog.views select ViewName from catalog.views where CreationText like 'Country';  
  7. 搜索探测规则文件并除去任何列引用。
  8. 搜索网关映射文件 $NCHOME/omnibus/gates/objserv_type/objserv_type.map,其中 type 代表 unibi。 除去对列的任何引用。
  9. 对于 OMNIbus v8.1之前的 ObjectServers 。 修订包 8 ,停止探测器。 对于 OMNIbus v8.1上的 ObjectServers ,不需要执行此步骤。 修订包 8 或更高版本。
  10. 除去所有引用之后,请使用 ALTER TABLE ... DROP COLUMN 语法删除 Country 列。
  11. 对于 OMNIbus v8.1之前的 ObjectServers 。 修订包 8 ,重新启动探测器。 对于 OMNIbus v8.1上的 ObjectServers 。 修订包 8 或更高版本必须告知探测器重新读取已更改的规则。 有关 对规则文件进行重读的更多信息,请参阅 https://www.ibm.com/support/knowledgecenter/en/SSSHTQ_8.1.0/com.ibm.netcool_OMNIbus.doc_8.1.0/omnibus/wip/probegtwy/task/omn_prb_rereadingrulesfile.html