USのシニアエンジニアと1年程一緒にアプリ開発をしていた中で使っていたものです。
テーブルのデータを削除したい場面で一括でレコードを消すスクリプトです。
自分の業務で必要な範囲でしか動作確認していません。
background scriptで範囲はglobalで実行です。
recursive_table_deletion ( "cmdb" );
delete_cmdb_discovery_tables();
function recursive_table_deletion ( base_table ){
var cgr = new GlideRecord( "sys_db_object" );
cgr.addQuery("name", base_table);
cgr.query();
if (cgr.next()) {
var target_table = new GlideRecord( "sys_db_object" );
target_table.addQuery("super_class", cgr.sys_id );
target_table.query();
while (target_table.next()) {
var child = target_table.name ;
gs.log ("Deleting from " + child );
gs.truncateTable(child);
recursive_table_deletion( child ) ;
}
}
gs.log("Truncate " + base_table);
gs.truncateTable(base_table);
}
function delete_cmdb_discovery_tables() {
// 消したいテーブル名をtablesのリストに入れる
var tables = [
"cmdb_software_instance",
"cmdb_ci_ip_address",
"cmdb_ci_network_adapter",
"cmdb_sam_sw_install",
"cmdb_ci_cpkg",
"ast_license_software_instance",
"ast_license_package_instance",
"ast_software_license",
"ast_license_base",
"cmdb_rel_ci",
"cmdb_serial_number",
"cmdb_pid",
"ecc_agent_ci",
"discovery_printer_supplies",
"cmdb_switch_port",
"cmdb_discovery",
"cmdb_tcp_connection",
"cmdb_tcp_half",
"cmdb_tcp",
"cmdb_running_process",
"discovery_device_history",
"discovery_status",
"discovery_result",
"automation_error_discovery_category_stats",
"automation_error_discovery_code_stats",
"automation_error_discovery_msg",
"discovery_status_log",
"discovery_switch_bridge_port_table",
"discovery_switch_fwd_table",
"sys_object_source",
"vcenter_datastore_hostmount",
"discovery_switch_spanning_tree_table"
];
for (var i in tables) {
var table = tables[i];
var gr = new GlideRecord(table);
if (!gr.isValid())
continue;
gs.log("Truncate " + table);
gs.truncateTable(table);
}
}