方法
定期的な圧縮処理の実行は、正常なバージョン対応ジオデータベースを管理および保守するために必要な処理です。 この処理により、バージョンで参照されなくなったステートが削除されて、差分テーブルのレコードが対応するビジネス テーブルに移行されます。 データが編集される頻度が、圧縮処理が完了するまでの時間に影響します。 10.3 および 10.2.1 の Utilities and Telecom Update 1 Patch では、このプロセス全体を通して実行されている処理について説明するために、補足の圧縮ログの機能が導入されています。
CREATE TABLE SDE.COMPRESS_LOG
( "SDE_ID" NUMBER(*,0) NOT NULL ENABLE,
"SERVER_ID" NUMBER(*,0) NOT NULL ENABLE,
"DIRECT_CONNECT" VARCHAR2(1) NOT NULL ENABLE,
"COMPRESS_START" DATE NOT NULL ENABLE,
"START_STATE_COUNT" NUMBER(*,0) NOT NULL ENABLE,
"COMPRESS_END" DATE,
"END_STATE_COUNT" NUMBER(*,0),
"COMPRESS_STATUS" VARCHAR2(20)
)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE SDE;
CREATE TABLE SDE.COMPRESS_LOG_TRACKER_TAB
(SDE_ID NUMBER(*,0),
SERVER_ID NUMBER(*,0),
LOG_DATE DATE,
COMPRESS_END DATE,
COMPRESS_STATUS VARCHAR2(20),
START_STATE_COUNT NUMBER(*,0),
END_STATE_COUNT NUMBER(*,0))
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 131072 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE
DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE SDE;
CREATE OR REPLACE TRIGGER SDE.COMPRESS_LOG_TRACKER_TRIG
AFTER INSERT OR UPDATE
OF COMPRESS_STATUS
ON SDE.COMPRESS_LOG
REFERENCING NEW AS new
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO SDE.COMPRESS_LOG_TRACKER_TAB (SDE_ID, SERVER_ID, LOG_DATE, COMPRESS_END, COMPRESS_STATUS, START_STATE_COUNT, END_STATE_COUNT)
VALUES (:new.SDE_ID, :new.SERVER_ID, sysdate, :new.COMPRESS_END, :new.COMPRESS_STATUS, :new.START_STATE_COUNT, :new.END_STATE_COUNT);
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/
圧縮追跡テーブルに対するクエリの実行:
SQL> select * from sde.compress_log_tracker_tab;
SDE_ID SERVER_ID LOG_DATE COMPRESS_END COMPRESS_STATUS START_STATE_COUNT END_STATE_COUNT
---------- ---------- ------------------------ ------------------------ -------------------- ----------------- ---------------
51 5896 Tue 07-Jul-2015 10:55:16 IN PROGRESS 15
51 5896 Tue 07-Jul-2015 10:55:16 DELETE LEAF STATES 15 15
51 5896 Tue 07-Jul-2015 10:55:17 TRIMMING 15 13
51 5896 Tue 07-Jul-2015 10:55:17 MOVE TO BASE 15 13
51 5896 Tue 07-Jul-2015 10:55:17 Tue 07-Jul-2015 10:55:17 SUCCESS 15 1
5 rows selected.
CREATE TABLE [sde].[SDE_compress_log](
[compress_id] [int] IDENTITY(1,1) NOT NULL,
[sde_id] [int] NOT NULL,
[server_id] [int] NOT NULL,
[direct_connect] [varchar](1) NOT NULL,
[compress_start] [datetime] NOT NULL,
[start_state_count] [int] NOT NULL,
[compress_end] [datetime] NULL,
[end_state_count] [int] NULL,
[compress_status] [varchar](20) NULL,
CONSTRAINT [compress_log_pk] PRIMARY KEY CLUSTERED
(
[compress_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [sde].[SDE_COMPRESS_LOG_TRACKER_TAB]
(
[SDE_ID] int NULL,
[SERVER_ID] int NULL,
[LOG_DATE] datetime NULL,
[COMPRESS_END] [datetime],
[COMPRESS_STATUS] varchar(20),
[START_STATE_COUNT] [int],
[END_STATE_COUNT] [int]
)
GO
CREATE TRIGGER sde.SDE_COMPRESS_LOG_TRACKER_TRIG
ON sde.SDE_COMPRESS_LOG
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
/* column variables declaration*/
DECLARE
@new$SDE_ID int,
@new$SERVER_ID int,
@new$LOG_DATE datetime,
@new$COMPRESS_END datetime,
@new$COMPRESS_STATUS varchar(20),
@new$START_STATE_COUNT int,
@new$END_STATE_COUNT int
DECLARE
ForEachInsertedRowTriggerCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR
SELECT SDE_ID, SERVER_ID, sysdatetime(), COMPRESS_END, COMPRESS_STATUS, START_STATE_COUNT, END_STATE_COUNT
FROM inserted
OPEN ForEachInsertedRowTriggerCursor
FETCH ForEachInsertedRowTriggerCursor
INTO @new$SDE_ID, @new$SERVER_ID, @new$LOG_DATE, @new$COMPRESS_END, @new$COMPRESS_STATUS, @new$START_STATE_COUNT, @new$END_STATE_COUNT
WHILE @@fetch_status = 0
BEGIN
/* trigger implementation: begin*/
BEGIN
IF (UPDATE(COMPRESS_STATUS))
BEGIN
INSERT sde.SDE_COMPRESS_LOG_TRACKER_TAB(SDE_ID, SERVER_ID, LOG_DATE, COMPRESS_END, COMPRESS_STATUS, START_STATE_COUNT, END_STATE_COUNT)
VALUES (@new$SDE_ID, @new$SERVER_ID, sysdatetime(), @new$COMPRESS_END, @new$COMPRESS_STATUS, @new$START_STATE_COUNT, @new$END_STATE_COUNT)
END
END
/* trigger implementation: end*/
FETCH ForEachInsertedRowTriggerCursor
INTO @new$SDE_ID, @new$SERVER_ID, @new$LOG_DATE, @new$COMPRESS_END, @new$COMPRESS_STATUS, @new$START_STATE_COUNT, @new$END_STATE_COUNT
END
CLOSE ForEachInsertedRowTriggerCursor
DEALLOCATE ForEachInsertedRowTriggerCursor
END
GO
圧縮追跡テーブルに対するクエリの実行:
select * from sde.SDE_COMPRESS_LOG_TRACKER_TAB
go
SDE_ID SERVER_ID LOG_DATE COMPRESS_END COMPRESS_STATUS START_STATE_COUNT END_STATE_COUNT
----------- ----------- ----------------------- ----------------------- -------------------- ----------------- ---------------
3035 9016 2015-07-02 12:36:07.690 NULL IN PROGRESS 8154 NULL
3035 9016 2015-07-02 12:36:07.720 NULL DELETE LEAF STATES 8154 8154
3035 9016 2015-07-02 12:52:03.113 NULL TRIMMING 8154 6308
3035 9016 2015-07-02 12:53:44.770 NULL MOVE TO BASE 8154 6306
3035 9016 2015-07-02 12:56:12.637 2015-07-02 12:56:12.623 SUCCESS 8154 6094
(5 rows affected)
注意: SQL Server エンタープライズ ジオデータベースが (SDE ではなく) DBO ユーザーによって管理されている場合は、テーブルとトリガーの所有者を SDE から DBO に変更します。
記事 ID: 000015219
ArcGIS エキスパートのサポートを受ける
今すぐチャットを開始