bootadmin.sql 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966
  1. {**************************************************************************}
  2. {* *}
  3. {* Licensed Materials - Property of IBM and/or HCL *}
  4. {* *}
  5. {* IBM Informix Dynamic Server *}
  6. {* (c) Copyright IBM Corporation 1996, 2016 All rights reserved. *}
  7. {* (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved. *}
  8. {* *}
  9. {**************************************************************************}
  10. { }
  11. { Title: db_install.sql }
  12. { Description: }
  13. { setup sysadmin database }
  14. {*****************************************************************
  15. ******************************************************************
  16. Create the SQL admin UDRs
  17. ******************************************************************
  18. ******************************************************************}
  19. create function
  20. is_hdr_allowed()
  21. returns informix.integer
  22. external name '(is_hdr_allowed)'
  23. language C
  24. NOT VARIANT;
  25. create function
  26. is_cdr_allowed()
  27. returns informix.integer
  28. external name '(is_cdr_allowed)'
  29. language C
  30. NOT VARIANT;
  31. create function
  32. is_compression_allowed()
  33. returns informix.integer
  34. external name '(is_compression_allowed)'
  35. language C
  36. NOT VARIANT;
  37. create function
  38. is_fragm_allowed()
  39. returns informix.integer
  40. external name '(is_fragm_allowed)'
  41. language C
  42. NOT VARIANT;
  43. create function
  44. is_pdq_allowed()
  45. returns informix.integer
  46. external name '(is_pdq_allowed)'
  47. language C
  48. NOT VARIANT;
  49. create function
  50. informix_get_product_type()
  51. returns informix.integer
  52. external name '(get_product_type)'
  53. language C
  54. NOT VARIANT;
  55. create function
  56. string_to_utf8(string lvarchar(4096), source_locale lvarchar)
  57. returns lvarchar
  58. external name '(string_to_utf8)'
  59. language C;
  60. create function
  61. informix.task(informix.lvarchar)
  62. returns informix.lvarchar
  63. external name '(task)'
  64. language C;
  65. create function
  66. informix.task(informix.lvarchar, informix.lvarchar)
  67. returns informix.lvarchar
  68. external name '(task_c)'
  69. language C;
  70. create function
  71. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar)
  72. returns informix.lvarchar
  73. external name '(task_cc)'
  74. language C;
  75. create function
  76. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  77. informix.lvarchar)
  78. returns informix.lvarchar
  79. external name '(task_ccc)'
  80. language C;
  81. create function
  82. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  83. informix.lvarchar, informix.lvarchar)
  84. returns informix.lvarchar
  85. external name '(task_cccc)'
  86. language C;
  87. create function
  88. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  89. informix.lvarchar, informix.lvarchar, informix.lvarchar)
  90. returns informix.lvarchar
  91. external name '(task_ccccc)'
  92. language C;
  93. create function
  94. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  95. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  96. informix.lvarchar)
  97. returns informix.lvarchar
  98. external name '(task_cccccc)'
  99. language C;
  100. create function
  101. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  102. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  103. informix.lvarchar, informix.lvarchar)
  104. returns informix.lvarchar
  105. external name '(task_ccccccc)'
  106. language C;
  107. create function
  108. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  109. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  110. informix.lvarchar, informix.lvarchar, informix.lvarchar)
  111. returns informix.lvarchar
  112. external name '(task_cccccccc)'
  113. language C;
  114. create function
  115. informix.task(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  116. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  117. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  118. informix.lvarchar)
  119. returns informix.lvarchar
  120. external name '(task_ccccccccc)'
  121. language C;
  122. create function
  123. informix.admin(informix.lvarchar)
  124. returns integer
  125. external name '(admin)'
  126. language C;
  127. create function
  128. informix.admin(informix.lvarchar, informix.lvarchar)
  129. returns integer
  130. external name '(admin_c)'
  131. language C;
  132. create function
  133. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar)
  134. returns integer
  135. external name '(admin_cc)'
  136. language C;
  137. create function
  138. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  139. informix.lvarchar)
  140. returns integer
  141. external name '(admin_ccc)'
  142. language C;
  143. create function
  144. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  145. informix.lvarchar, informix.lvarchar)
  146. returns integer
  147. external name '(admin_cccc)'
  148. language C;
  149. create function
  150. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  151. informix.lvarchar, informix.lvarchar, informix.lvarchar)
  152. returns integer
  153. external name '(admin_ccccc)'
  154. language C;
  155. create function
  156. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  157. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  158. informix.lvarchar)
  159. returns integer
  160. external name '(admin_cccccc)'
  161. language C;
  162. create function
  163. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  164. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  165. informix.lvarchar, informix.lvarchar)
  166. returns integer
  167. external name '(admin_ccccccc)'
  168. language C;
  169. create function
  170. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  171. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  172. informix.lvarchar, informix.lvarchar, informix.lvarchar)
  173. returns integer
  174. external name '(admin_cccccccc)'
  175. language C;
  176. create function
  177. informix.admin(informix.lvarchar, informix.lvarchar, informix.lvarchar,
  178. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  179. informix.lvarchar, informix.lvarchar, informix.lvarchar,
  180. informix.lvarchar)
  181. returns integer
  182. external name '(admin_ccccccccc)'
  183. language C;
  184. create function
  185. informix.exectask(informix.lvarchar)
  186. returns integer
  187. external name '(ph_sensor_c)'
  188. language C;
  189. create function
  190. informix.exectask(lvarchar, lvarchar)
  191. returns integer
  192. external name '(ph_sensor_cc)'
  193. language C;
  194. create function
  195. informix.exectask(informix.integer)
  196. returns integer
  197. external name '(ph_sensor_i)'
  198. language C;
  199. create function
  200. informix.exectask(integer,lvarchar)
  201. returns integer
  202. external name '(ph_sensor_ic)'
  203. language C;
  204. create function
  205. informix.exectask_async(informix.lvarchar)
  206. returns integer
  207. external name '(ph_sensor_c_async)'
  208. language C;
  209. create function
  210. informix.exectask_async(lvarchar, lvarchar)
  211. returns integer
  212. external name '(ph_sensor_cc_async)'
  213. language C;
  214. create function
  215. informix.exectask_async(informix.integer)
  216. returns integer
  217. external name '(ph_sensor_i_async)'
  218. language C;
  219. create function
  220. informix.exectask_async(integer, lvarchar)
  221. returns integer
  222. external name '(ph_sensor_ic_async)'
  223. language C;
  224. create function informix.alert_exec_recommend(informix.integer)
  225. returns integer
  226. external name '(ph_alert_exec_recommend)'
  227. language C;
  228. create function informix.ph_dbs_alert(informix.integer, informix.integer,
  229. informix.pointer)
  230. returns integer
  231. external name '(ph_dbs_alert)'
  232. language C;
  233. create function informix.refreshstats(informix.integer, informix.integer,
  234. informix.pointer)
  235. returns integer
  236. external name '(refreshstats)'
  237. language C;
  238. create function informix.admin_list_perms(informix.lvarchar)
  239. returns informix.lvarchar
  240. external name '(admin_list_perms)'
  241. language C;
  242. CREATE FUNCTION informix.ph_reset_next_execution(attr INTEGER)
  243. RETURNING DATETIME YEAR TO SECOND, INTEGER
  244. DEFINE curr_time DATETIME YEAR TO SECOND;
  245. DEFINE flags INTEGER;
  246. -- Set TK_ATTR_EVALUTE_TIME_ONLY (0x2) flag
  247. LET flags = BITOR(attr, 2);
  248. LET curr_time = CURRENT;
  249. RETURN curr_time, flags;
  250. END FUNCTION;
  251. CREATE PROCEDURE informix.ph_task_delete_check(attr INTEGER);
  252. -- Check if we are trying to delete a system generated task
  253. -- Marked via TK_ATTR_SYSTEM_TASK (0x4) flag
  254. IF BITAND(attr, 4) <> 0 THEN
  255. RAISE EXCEPTION -274, -107;
  256. END IF
  257. END PROCEDURE;
  258. {*****************************************************************
  259. ******************************************************************
  260. Create the admin API tables
  261. ******************************************************************
  262. ******************************************************************}
  263. DROP ROLE IF EXISTS db_monitor;
  264. CREATE ROLE IF NOT EXISTS db_monitor;
  265. DROP ROLE IF EXISTS db_admin;
  266. CREATE ROLE IF NOT EXISTS db_admin;
  267. REVOKE EXECUTE ON ROUTINE exectask(lvarchar) FROM public;
  268. REVOKE EXECUTE ON ROUTINE exectask(lvarchar,lvarchar) FROM public;
  269. REVOKE EXECUTE ON ROUTINE exectask(integer) FROM public;
  270. REVOKE EXECUTE ON ROUTINE exectask(integer,lvarchar) FROM public;
  271. REVOKE EXECUTE ON ROUTINE exectask_async(lvarchar) FROM public;
  272. REVOKE EXECUTE ON ROUTINE exectask_async(lvarchar,lvarchar) FROM public;
  273. REVOKE EXECUTE ON ROUTINE exectask_async(integer) FROM public;
  274. REVOKE EXECUTE ON ROUTINE exectask_async(integer,lvarchar) FROM public;
  275. GRANT EXECUTE ON ROUTINE exectask(integer) TO db_admin as informix;
  276. GRANT EXECUTE ON ROUTINE exectask(integer,lvarchar) TO db_admin as informix;
  277. GRANT EXECUTE ON ROUTINE exectask(lvarchar) TO db_admin as informix;
  278. GRANT EXECUTE ON ROUTINE exectask(lvarchar,lvarchar) TO db_admin as informix;
  279. GRANT EXECUTE ON ROUTINE exectask_async(integer) TO db_admin as informix;
  280. GRANT EXECUTE ON ROUTINE exectask_async(integer,lvarchar) TO db_admin as informix;
  281. GRANT EXECUTE ON ROUTINE exectask_async(lvarchar) TO db_admin as informix;
  282. GRANT EXECUTE ON ROUTINE exectask_async(lvarchar,lvarchar) TO db_admin as informix;
  283. create table informix.command_history
  284. (
  285. cmd_number serial(100),
  286. cmd_exec_time datetime YEAR TO SECOND
  287. DEFAULT CURRENT YEAR TO SECOND,
  288. cmd_user varchar(254),
  289. cmd_hostname varchar(254),
  290. cmd_executed varchar(254),
  291. cmd_ret_status integer,
  292. cmd_ret_msg lvarchar(30000)
  293. );
  294. CREATE UNIQUE INDEX informix.ix_cmd_hist_01 ON command_history(cmd_number);
  295. CREATE INDEX informix.ix_cmd_hist_02 ON command_history(cmd_executed);
  296. CREATE INDEX informix.ix_cmd_hist_03 ON command_history(cmd_exec_time);
  297. {*****************************************************************
  298. ******************************************************************
  299. AUTO DBA
  300. ******************************************************************
  301. ******************************************************************}
  302. create procedure
  303. informix.wake_dba()
  304. external name '(ph_wakeup)'
  305. language C;
  306. create function
  307. informix.db_sch_worker()
  308. returns informix.integer
  309. external name '(db_sch_worker)'
  310. language C;
  311. create function
  312. informix.db_sched()
  313. returns informix.integer
  314. external name '(db_sched)'
  315. language C;
  316. create function
  317. informix.db_low_memory_mgr()
  318. returns informix.integer
  319. external name '(db_low_memory_mgr)'
  320. language C;
  321. create function
  322. informix.dbutil()
  323. returns informix.integer
  324. external name '(dbutil)'
  325. language C;
  326. create function
  327. informix.low_memory_mgr_message(informix.integer, informix.integer,
  328. informix.lvarchar, informix.integer default 1 )
  329. returns informix.integer
  330. external name '(dbcron_alert_msg_low_memory)'
  331. language C;
  332. create function
  333. informix.yieldn()
  334. returns informix.integer
  335. external name '(admin_yield)'
  336. language C;
  337. create function
  338. informix.yieldn(informix.integer)
  339. returns informix.integer
  340. external name '(admin_yieldn)'
  341. language C;
  342. create function
  343. informix.admin_check_auth(informix.lvarchar)
  344. returns informix.integer
  345. external name '(admin_check_auth)'
  346. language C;
  347. create function
  348. informix.run_job(informix.integer, informix.integer,
  349. informix.lvarchar default null)
  350. returns integer
  351. external name '(bg_jobs)'
  352. language C;
  353. {*****************************************************************
  354. ******************************************************************
  355. Create the AUTO DBA tables
  356. ******************************************************************
  357. ******************************************************************}
  358. CREATE TABLE informix.ph_group (
  359. group_id SERIAL,
  360. group_name varchar(129),
  361. group_description lvarchar
  362. ) LOCK MODE ROW;
  363. CREATE UNIQUE INDEX informix.ix_ph_group_01 ON ph_group(group_id);
  364. CREATE UNIQUE INDEX informix.ix_ph_group_02 ON ph_group(group_name);
  365. ALTER TABLE informix.ph_group ADD CONSTRAINT UNIQUE (group_name) CONSTRAINT u_ph_group_01;
  366. INSERT INTO ph_group VALUES (0,"MISC","no group was defined");
  367. CREATE TABLE informix.ph_task (
  368. tk_id SERIAL,
  369. tk_name CHAR(36)
  370. CHECK ( tk_name[1,1] != ' ' ),
  371. tk_description LVARCHAR,
  372. tk_type CHAR(18)
  373. DEFAULT 'SENSOR' NOT NULL
  374. CHECK ( UPPER(tk_type) IN
  375. ("SENSOR", "TASK",
  376. "STARTUP SENSOR", "STARTUP TASK" ) ) CONSTRAINT ph_task_constr1,
  377. tk_sequence INTEGER DEFAULT 0,
  378. tk_result_table LVARCHAR,
  379. tk_create LVARCHAR DEFAULT NULL,
  380. tk_dbs VARCHAR(250) DEFAULT 'sysadmin',
  381. tk_execute LVARCHAR,
  382. tk_delete INTERVAL day(2) TO second
  383. DEFAULT INTERVAL( 0 1:00:00 ) day to second,
  384. tk_start_time DATETIME hour to second
  385. DEFAULT DATETIME(08:00:00) hour to second,
  386. tk_stop_time DATETIME hour TO second
  387. DEFAULT DATETIME(19:00:00) hour to second,
  388. tk_frequency INTERVAL day(2) to second
  389. DEFAULT INTERVAL( 1 0:00:00 ) day to second
  390. CHECK (tk_frequency > INTERVAL(0 00:00:00) day to second)
  391. CONSTRAINT ph_task_constr2,
  392. tk_next_execution DATETIME year TO second
  393. DEFAULT CURRENT year to second,
  394. tk_total_executions INTEGER DEFAULT 0,
  395. tk_total_time FLOAT DEFAULT 0.0,
  396. tk_Monday BOOLEAN DEFAULT 'T',
  397. tk_Tuesday BOOLEAN DEFAULT 'T',
  398. tk_Wednesday BOOLEAN DEFAULT 'T',
  399. tk_Thursday BOOLEAN DEFAULT 'T',
  400. tk_Friday BOOLEAN DEFAULT 'T',
  401. tk_Saturday BOOLEAN DEFAULT 'T',
  402. tk_Sunday BOOLEAN DEFAULT 'T',
  403. tk_attributes INTEGER DEFAULT 0,
  404. tk_group VARCHAR(129) DEFAULT 'MISC'
  405. REFERENCES ph_group(group_name),
  406. tk_enable BOOLEAN DEFAULT 'T',
  407. tk_priority INTEGER DEFAULT 0
  408. ) LOCK MODE ROW;
  409. CREATE UNIQUE INDEX informix.ix_ph_task_01 ON ph_task(tk_id);
  410. CREATE UNIQUE INDEX informix.ix_ph_task_02 ON ph_task(tk_name);
  411. CREATE INDEX informix.ix_ph_task_03 ON ph_task(tk_next_execution, tk_id);
  412. CREATE TRIGGER informix.ph_task_trig1
  413. INSERT ON ph_task
  414. AFTER ( EXECUTE PROCEDURE wake_dba() );
  415. CREATE TRIGGER informix.ph_task_trig_update_exec_time
  416. UPDATE OF tk_frequency, tk_start_time, tk_stop_time,
  417. tk_Monday, tk_Tuesday, tk_Wednesday, tk_Thursday,
  418. tk_Friday, tk_Saturday, tk_Sunday, tk_enable
  419. ON ph_task
  420. REFERENCING OLD AS pre NEW AS post
  421. FOR EACH ROW
  422. (EXECUTE FUNCTION ph_reset_next_execution(post.tk_attributes)
  423. INTO tk_next_execution, tk_attributes)
  424. AFTER (EXECUTE PROCEDURE wake_dba());
  425. CREATE TRIGGER informix.ph_task_delete
  426. DELETE ON ph_task
  427. REFERENCING OLD AS pre
  428. FOR EACH ROW
  429. (EXECUTE PROCEDURE ph_task_delete_check(pre.tk_attributes));
  430. CREATE TABLE informix.ph_run (
  431. run_id SERIAL,
  432. run_task_id INTEGER,
  433. run_task_seq INTEGER,
  434. run_retcode INTEGER,
  435. run_time DATETIME year to second
  436. DEFAULT CURRENT year to second,
  437. run_duration FLOAT,
  438. run_ztime INTEGER,
  439. run_btime INTEGER,
  440. run_mttime INTEGER
  441. ) LOCK MODE ROW;
  442. CREATE UNIQUE INDEX informix.ix_ph_run_01 ON ph_run(run_id);
  443. CREATE INDEX informix.ix_ph_run_02 ON ph_run(run_task_seq,run_task_id);
  444. CREATE INDEX informix.ix_ph_run_03 ON ph_run(run_task_id,run_time);
  445. CREATE TABLE informix.ph_alert (
  446. ID SERIAL,
  447. alert_task_id INTEGER,
  448. alert_task_seq INTEGER,
  449. alert_type CHAR(8)
  450. DEFAULT 'INFO'
  451. CHECK ( UPPER(alert_type) IN
  452. ("INFO","WARNING","ERROR") ),
  453. alert_color CHAR(15)
  454. DEFAULT 'GREEN'
  455. CHECK ( UPPER(alert_color) IN
  456. ("RED","YELLOW","GREEN") ),
  457. alert_time DATETIME year TO second
  458. DEFAULT CURRENT year to second,
  459. alert_state CHAR(15)
  460. DEFAULT 'NEW'
  461. CHECK ( UPPER(alert_state) IN
  462. ("NEW","ADDRESSED",
  463. "ACKNOWLEDGED","IGNORED") ),
  464. alert_state_changed DATETIME year TO second
  465. DEFAULT CURRENT year to second,
  466. alert_object_type CHAR(15)
  467. DEFAULT 'MISC'
  468. CHECK ( UPPER(alert_object_type) IN
  469. ("SERVER","DATABASE","TABLE","INDEX", "DBSPACE",
  470. "CHUNK","USER","SQL","MISC","ALARM") ) CONSTRAINT ph_alert_constr1,
  471. alert_object_name VARCHAR(254),
  472. alert_message LVARCHAR,
  473. alert_action_dbs LVARCHAR(256)
  474. DEFAULT 'sysadmin',
  475. alert_action LVARCHAR,
  476. alert_object_info BIGINT
  477. DEFAULT 0
  478. ) LOCK MODE ROW;
  479. CREATE UNIQUE INDEX informix.ix_ph_alert_01 ON ph_alert(ID);
  480. CREATE INDEX informix.ix_ph_alert_02 ON
  481. ph_alert(alert_task_seq,alert_task_id);
  482. CREATE INDEX informix.ix_ph_alert_03 ON
  483. ph_alert(alert_time);
  484. CREATE TABLE informix.ph_threshold (
  485. ID SERIAL,
  486. name VARCHAR(254),
  487. task_name CHAR(36),
  488. value LVARCHAR,
  489. value_type VARCHAR(254)
  490. DEFAULT 'STRING'
  491. CHECK (UPPER(value_type) MATCHES "STRING" OR
  492. UPPER(value_type) MATCHES "NUMERIC" OR
  493. UPPER(value_type) MATCHES "NUMERIC(*.*)"),
  494. description LVARCHAR
  495. ) LOCK MODE ROW;
  496. CREATE UNIQUE INDEX informix.ix_ph_threshold_01 ON ph_threshold(ID);
  497. CREATE INDEX informix.ix_ph_threshold_02 ON ph_threshold(name);
  498. CREATE VIEW informix.ph_config ( ID, name, task_name, value, value_type )
  499. AS SELECT ID, name, task_name, value, value_type
  500. FROM ph_threshold;
  501. revoke all on informix.ph_task from public as informix;
  502. revoke all on informix.ph_run from public as informix;
  503. revoke all on informix.ph_alert from public as informix;
  504. revoke all on informix.ph_threshold from public as informix;
  505. grant select on informix.ph_alert to public as informix;
  506. CREATE VIEW informix.ph_alerts
  507. (
  508. alert_id, run_id, task_id,
  509. task_name, task_description,
  510. alert_type, alert_color, alert_time,
  511. alert_state, alert_object_type, alert_object_name,
  512. alert_message, alert_action_dbs, alert_action, alert_object_info
  513. )
  514. AS SELECT ph_alert.id, ph_run.run_id, ph_task.tk_id,
  515. tk_name, tk_description, alert_type, alert_color,
  516. alert_time,
  517. alert_state, alert_object_type, alert_object_name,
  518. alert_message, alert_action_dbs, alert_action, alert_object_info
  519. FROM ph_alert, ph_run, ph_task
  520. WHERE ph_alert.alert_task_id = ph_task.tk_id
  521. AND ph_run.run_task_id = ph_task.tk_id
  522. AND ph_alert.alert_task_seq = ph_run.run_task_seq;
  523. CREATE TABLE informix.ph_bg_jobs
  524. (
  525. ph_bg_id SERIAL NOT NULL,
  526. ph_bg_name VARCHAR(255) NOT NULL,
  527. ph_bg_job_id INTEGER NOT NULL,
  528. ph_bg_type VARCHAR(255) DEFAULT 'MISC' NOT NULL,
  529. ph_bg_desc VARCHAR(255),
  530. ph_bg_sequence SMALLINT NOT NULL,
  531. ph_bg_flags INTEGER DEFAULT 0 NOT NULL,
  532. ph_bg_stop_on_error BOOLEAN DEFAULT 'f' NOT NULL,
  533. ph_bg_database VARCHAR(255) NOT NULL,
  534. ph_bg_cmd LVARCHAR(30000) NOT NULL
  535. ) LOCK MODE ROW;
  536. CREATE UNIQUE INDEX informix.ph_bg_jobs_ix1 ON ph_bg_jobs (ph_bg_id);
  537. CREATE UNIQUE INDEX informix.ph_bg_jobs_ix2 ON ph_bg_jobs (ph_bg_job_id, ph_bg_sequence);
  538. CREATE UNIQUE INDEX informix.ph_bg_jobs_ix3 ON ph_bg_jobs (ph_bg_name, ph_bg_sequence);
  539. CREATE TABLE informix.ph_bg_jobs_results
  540. (
  541. ph_bgr_id SERIAL NOT NULL,
  542. ph_bgr_bg_id INTEGER NOT NULL,
  543. ph_bgr_tk_id INTEGER NOT NULL,
  544. ph_bgr_tk_sequence INTEGER NOT NULL,
  545. ph_bgr_starttime DATETIME YEAR TO SECOND
  546. DEFAULT CURRENT YEAR TO SECOND NOT NULL,
  547. ph_bgr_stoptime DATETIME YEAR TO SECOND DEFAULT NULL,
  548. ph_bgr_retcode INTEGER DEFAULT NULL,
  549. ph_bgr_retcode2 INTEGER DEFAULT NULL,
  550. ph_bgr_retmsg LVARCHAR(30000) DEFAULT NULL
  551. ) LOCK MODE ROW;
  552. CREATE UNIQUE INDEX informix.ph_bg_jobs_results_ix1 ON ph_bg_jobs_results (ph_bgr_id);
  553. CREATE INDEX informix.ph_bg_jobs_results_ix2 ON ph_bg_jobs_results (ph_bgr_bg_id);
  554. CREATE TRIGGER informix.ph_bg_jobs_delete
  555. DELETE ON ph_bg_jobs
  556. REFERENCING OLD AS pre
  557. FOR EACH ROW
  558. (DELETE FROM ph_bg_jobs_results
  559. WHERE ph_bg_jobs_results.ph_bgr_bg_id = pre.ph_bg_id);
  560. REVOKE ALL ON informix.ph_bg_jobs FROM public as informix;
  561. REVOKE ALL ON informix.ph_bg_jobs_results FROM public as informix;
  562. GRANT SELECT ON informix.ph_bg_jobs TO public as informix;
  563. GRANT SELECT ON informix.ph_bg_jobs_results TO public as informix;
  564. CREATE SEQUENCE informix.ph_bg_jobs_seq INCREMENT BY 1 START WITH 1 CYCLE NOCACHE ;
  565. CREATE TABLE IF NOT EXISTS informix.ph_allow
  566. (
  567. name CHAR(32) PRIMARY KEY,
  568. perms BIGINT,
  569. lastupdated DATETIME YEAR TO SECOND
  570. DEFAULT CURRENT YEAR TO SECOND
  571. ) LOCK MODE ROW;
  572. REVOKE ALL ON informix.ph_allow FROM public as informix;
  573. GRANT SELECT ON informix.ph_allow TO public as informix;
  574. CREATE VIEW IF NOT EXISTS
  575. ph_allow_list(name, perms, lastupdated, perm_list) AS
  576. SELECT name, perms, lastupdated, admin_list_perms(perms)
  577. FROM ph_allow;
  578. {
  579. **********************************************************************
  580. **********************************************************************
  581. EXAMPLE FUNCTIONS
  582. **********************************************************************
  583. **********************************************************************
  584. }
  585. create function
  586. informix.dbcron_submit_task(informix.lvarchar, informix.lvarchar)
  587. returns integer
  588. external name '(dbcron_submit_task)'
  589. language C;
  590. create function
  591. informix.dbcron_submit_task(informix.lvarchar, informix.pointer)
  592. returns integer
  593. external name '(dbcron_submit_task)'
  594. language C;
  595. create function
  596. informix.rhead()
  597. returns informix.pointer
  598. external name '(get_RHEAD)'
  599. language C;
  600. create function
  601. informix.dbcron_template_udr_ptr(informix.integer, informix.pointer)
  602. returns integer
  603. external name '(dbcron_template_udr_ptr)'
  604. language C;
  605. create function
  606. informix.ifx_ha_fire_logwrap_alarm ( varchar ( 128 ) )
  607. returns integer
  608. external name '(cloneFireLogWrapAlarm)'
  609. language C;
  610. create function
  611. informix.adm_add_storage(informix.pointer)
  612. returns informix.integer
  613. external name '(adm_add_storage)'
  614. language C;
  615. create function
  616. informix.mon_low_storage(informix.integer,informix.integer)
  617. returns informix.integer
  618. external name '(mon_low_storage)'
  619. language C;
  620. create function
  621. informix.adm_auto_compress(informix.integer, informix.integer,
  622. informix.pointer)
  623. returns informix.integer
  624. external name '(adm_auto_compress)'
  625. language C;
  626. {* This table should be the last one created. Its *
  627. * creation order ensures other object were created *
  628. * successfully.
  629. *}
  630. create table informix.ph_version
  631. (
  632. object varchar(129),
  633. type varchar(18),
  634. value integer
  635. );
  636. create unique index informix.ph_version_ix1 on ph_version (object,type);
  637. insert into ph_version values ("ph_version","value",1);
  638. insert into ph_version values ("ph_version","table",3);
  639. insert into ph_version values ("ph_task","table",27);
  640. insert into ph_version values ("ph_task","index",3);
  641. insert into ph_version values ("ph_task","colnames",291);
  642. insert into ph_version values ("ph_run","table",9);
  643. insert into ph_version values ("ph_run","index",3);
  644. insert into ph_version values ("ph_run","colnames",88);
  645. insert into ph_version values ("ph_alert","table",14);
  646. insert into ph_version values ("ph_alert","index",2);
  647. insert into ph_version values ("ph_alert","colnames",182);
  648. insert into ph_version values ("ph_threshold","table",6);
  649. insert into ph_version values ("ph_threshold","index",2);
  650. insert into ph_version values ("ph_threshold","colnames",41);
  651. insert into ph_version values ("command_history","table",7);
  652. insert into ph_version values ("command_history","index",3);
  653. insert into ph_version values ("command_history","colnames",80);
  654. insert into ph_version values ("ph_group","table",3);
  655. insert into ph_version values ("ph_group","index",2);
  656. insert into ph_version values ("ph_group","colnames",35);
  657. {*
  658. * Storage pool
  659. *
  660. * This table stores directories, cooked files and raw devices for use
  661. * by the storage provisioning feature. Columns are as follows:
  662. * entry_id -- Serial used to id an entry
  663. * path -- The path to the device/directory/file
  664. * beg_offset -- Starting offset of entry
  665. * end_offset -- End offset of entry
  666. * chunk_size -- Minimum size of an allocation from this entry
  667. * priority -- Affects order in which this entry will be considered
  668. * last_alloc -- Date/time of last allocation from this entry
  669. * logid -- We use the last two columns to store a log position
  670. * logused -- so we can allocate in round-robin fashion.
  671. *
  672. * All entries can be broken down into two categories: Fixed Length and
  673. * Extendable. The information stored in three of the columns is different
  674. * for the two types of entry:
  675. *
  676. * Fixed Length
  677. * beg_offset Starting offset into device
  678. * end_offset End offset into device
  679. * chunk_size minimum size of chunk allocated from this device
  680. *
  681. * Extendable
  682. * beg_offset Starting offset into device, 0 for directory
  683. * end_offset 0
  684. * chunk_size Initial size of either the device or the cooked
  685. * chunks within the directory
  686. *
  687. * Note that we can distinguish between fixed length and extendable items,
  688. * since fixed length entries always have a non-zero end_offset value. We
  689. * distinguish between directories and files/devices using the mt_aio_stat()
  690. * routine.
  691. *
  692. * Valid 'priority' values are:
  693. * 1 = High
  694. * 2 = Medium
  695. * 3 = Low
  696. *
  697. * Default: 2
  698. *}
  699. create table informix.storagepool
  700. (
  701. entry_id serial not null,
  702. path varchar(255) not null,
  703. beg_offset bigint not null,
  704. end_offset bigint not null,
  705. chunk_size bigint not null,
  706. status varchar(255),
  707. priority int default 2,
  708. last_alloc datetime year to second,
  709. logid int,
  710. logused int
  711. ) lock mode row;
  712. create unique index informix.ix_storagepool_1 ON storagepool(entry_id);
  713. {*****************************************************************
  714. ******************************************************************
  715. Create the DSAC Common SQL API procedures
  716. ******************************************************************
  717. ******************************************************************}
  718. create function SYSPROC.GET_MESSAGE
  719. ( INOUT MAJOR_VERSION INTEGER
  720. , INOUT MINOR_VERSION INTEGER
  721. , REQUESTED_LOCALE VARCHAR(33)
  722. , XML_INPUT BLOB
  723. , XML_FILTER BLOB
  724. , OUT XML_OUTPUT BLOB
  725. , OUT XML_MESSAGE BLOB)
  726. RETURNING INTEGER
  727. WITH (HANDLESNULLS)
  728. external name '(admin_get_message)'
  729. LANGUAGE C;
  730. create function SYSPROC.GET_CONFIG
  731. ( INOUT MAJOR_VERSION INTEGER
  732. , INOUT MINOR_VERSION INTEGER
  733. , REQUESTED_LOCALE VARCHAR(33)
  734. , XML_INPUT BLOB
  735. , XML_FILTER BLOB
  736. , OUT XML_OUTPUT BLOB
  737. , OUT XML_MESSAGE BLOB)
  738. RETURNING INTEGER
  739. WITH (HANDLESNULLS)
  740. external name '(admin_get_config)'
  741. LANGUAGE C;
  742. create function SYSPROC.GET_SYSTEM_INFO
  743. ( INOUT MAJOR_VERSION INTEGER
  744. , INOUT MINOR_VERSION INTEGER
  745. , REQUESTED_LOCALE VARCHAR(33)
  746. , XML_INPUT BLOB
  747. , XML_FILTER BLOB
  748. , OUT XML_OUTPUT BLOB
  749. , OUT XML_MESSAGE BLOB)
  750. RETURNING INTEGER
  751. WITH (HANDLESNULLS)
  752. external name '(admin_get_system_info)'
  753. LANGUAGE C;
  754. create function SYSPROC.SET_CONFIG
  755. ( INOUT MAJOR_VERSION INTEGER
  756. , INOUT MINOR_VERSION INTEGER
  757. , REQUESTED_LOCALE VARCHAR(33)
  758. , XML_INPUT BLOB
  759. , XML_FILTER BLOB
  760. , OUT XML_OUTPUT BLOB
  761. , OUT XML_MESSAGE BLOB)
  762. RETURNING INTEGER
  763. WITH (HANDLESNULLS)
  764. external name '(admin_set_config)'
  765. LANGUAGE C;
  766. create function SYSPROC.ITMA_SET_CONFIG (
  767. HOST LVARCHAR(256),
  768. PORT INTEGER,
  769. OPTIONS LVARCHAR(2048),
  770. ACTION SMALLINT,
  771. OUT SQLCODE INTEGER ,
  772. OUT MESSAGE LVARCHAR(1331))
  773. RETURNING INTEGER
  774. WITH (HANDLESNULLS)
  775. external name '(admin_itma_set_config)'
  776. LANGUAGE C;
  777. create function informix.autoregexe(integer, integer, lvarchar)
  778. RETURNS integer
  779. external name '(autoregexe)'
  780. LANGUAGE C;
  781. create function informix.autoregvp(integer, integer, lvarchar)
  782. RETURNS integer
  783. external name '(autoregvp)'
  784. LANGUAGE C;
  785. create function
  786. informix.rwt_db_purge_tables(integer, integer, lvarchar)
  787. returns integer
  788. external name '(rwt_db_purge_tables)'
  789. language C;
  790. revoke execute on function
  791. rwt_db_purge_tables(integer, integer, lvarchar)
  792. from public;
  793. create function
  794. informix.rwt_db_purge_tables(integer, integer,
  795. informix.pointer)
  796. returns integer
  797. external name '(rwt_fm_purge_tables)'
  798. language C;
  799. revoke execute on function
  800. rwt_db_purge_tables(integer, integer, informix.pointer)
  801. from public;
  802. create function
  803. informix.rwt_purge_tables(tk_id integer, id integer)
  804. returns integer
  805. define dbname char(128);
  806. define rc integer;
  807. on exception
  808. set rc
  809. end exception with resume;
  810. foreach select name into dbname from sysmaster:sysdatabases
  811. execute function exectask("db_purge_tables", dbname) into rc;
  812. end foreach;
  813. return 0;
  814. end function;
  815. revoke execute on rwt_purge_tables from public;
  816. DROP TABLE IF EXISTS tenant;
  817. CREATE TABLE informix.tenant (
  818. tenant_id INTEGER,
  819. tenant_dbsname VARCHAR(128) PRIMARY KEY,
  820. tenant_resources BSON,
  821. tenant_create_time DATETIME YEAR TO SECOND
  822. DEFAULT CURRENT YEAR TO SECOND,
  823. tenant_last_updated DATETIME YEAR TO SECOND
  824. DEFAULT CURRENT YEAR TO SECOND
  825. );
  826. CLOSE DATABASE;