TRSWCM数据库常见操作
表字段关联关系:WCMSCHEDULE .OPTYPE=WCMOPER.OPERIDWCMDOCUMENT.DOCID=WCMCHNLDOC.DOCIDWCMDOCUMENT.DOCPUBURL =WCMCHNLDOC.DOCPUBURLWCMDOCUMENT.DOCRELTIME =WCMCHNLDOC. DOCRELTIMEwcmappendix.APPDOCID=WCMDOCUMENT.DO
表字段关联关系:
WCMSCHEDULE .OPTYPE=WCMOPER.OPERID
WCMDOCUMENT.DOCID=WCMCHNLDOC.DOCID
WCMDOCUMENT.DOCPUBURL =WCMCHNLDOC.DOCPUBURL
WCMDOCUMENT.DOCRELTIME =WCMCHNLDOC. DOCRELTIME
wcmappendix.APPDOCID=WCMDOCUMENT.DOCID
WCMDOCUMENT.DOCCHANNEL=WCMCHNLDOC.CHNLID=WCMCHANNEL.CHANNELID
WCMWEBSITE.SITEID=WCMDOCUMENT.SITEID =WCMCHANNEL.SITEID
待补充
1.删除引用
--1.删除所有引用
------1.1删除所有引用前,先进行备份
CREATE TABLE WCMCHNLDOCMODALBACK AS SELECT * FROM WCMCHNLDOC WHERE MODAL IN(2, -2, 3, -3);
------1.2在备份后,删除所有引用
DELETE FROM WCMCHNLDOC WHERE MODAL IN(2, -2, 3, -3);
--2.删除指定栏目(XXX,YYY)下的所有引用文档,其中XXX,YYY为栏目ID
------2.1删除引用前,先进行备份
CREATE TABLE WCMCHNLDOCMODALBACK AS SELECT * FROM WCMCHNLDOC WHERE MODAL IN(2, -2, 3, -3) AND CHNLID IN (XXX,-XXX,YYY,-YYY);
------2.2在备份后,删除指定栏目(XXX,YYY)下的所有引用文档
DELETE FROM WCMCHNLDOC WHERE MODAL IN(2, -2, 3, -3) AND CHNLID IN (XXX,-XXX,YYY,-YYY);
2.删除指定的站点
--删除站点XX,其中XX为站点的id
--删除附件
delete from WCMAppendix where exists(
select wcmdocument.DocId from wcmdocument
where DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx))
and wcmdocument.DocId=WCMAppendix.AppDocId);
commit;
--删除相关文档
ALTER TABLE WCMRelation NOLOGGING;
delete from WCMRelation where exists(
select wcmdocument.DocId from wcmdocument
where DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx))
and (WCMRelation.DocId=WCMDocument.DocId or WCMRelation.RelDocId=WCMDocument.DocId));
commit;
--删除文档的关键词
ALTER TABLE WCMDocKeyword NOLOGGING;
delete from WCMDocKeyword where exists(
select wcmdocument.DocId from wcmdocument
where DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx))
and WCMDocKeyword.DocId=WCMDocument.DocId);
commit;
--删除文档工作流流转信息(WCMFlowDoc,WCMFlowDocBak)
ALTER TABLE WCMFlowDoc NOLOGGING;
delete WCMFlowDoc where
exists(
select DocId from WCMDocument where WCMFlowDoc.ObjId = WCMDocument.DocId
and DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx)) );
commit;
ALTER TABLE WCMFlowDocBak NOLOGGING;
delete WCMFlowDocBak where
exists(
select DocId from WCMDocument where WCMFlowDocBak.ObjId = WCMDocument.DocId
and DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx)) );
commit;
--删除文档备份信息(WCMDOCBAK)
ALTER TABLE WCMDOCBAK NOLOGGING;
delete WCMDOCBAK where
exists(
select DocId from WCMDocument where WCMDOCBAK.DocId = WCMDocument.DocId
and DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx)));
commit;
--删除文档实体
ALTER TABLE wcmdocument NOLOGGING;
delete from wcmdocument where DocChannel in(select CHANNELID from WCMWEBSITE where SITEID in (xx));
commit;
--删除文档引用
ALTER TABLE wcmchnldoc NOLOGGING;
delete from WCMCHNLDOC where CHNLID in(select CHANNELID from WCMWEBSITE where SITEID in (xx));
commit;
--删除栏目
ALTER TABLE wcmchannel NOLOGGING;
delete from wcmchannel where siteid in(xx);
commit;
--删除站点
ALTER TABLE wcmwebsite NOLOGGING;
delete from wcmwebsite where siteid in(XX);
commit;
3.WCMChnlDoc,WCMDocument表SiteId为空的历史数据处理
siteid为空可能是历史数据导致,因为后面在添加一篇文档的时候,都会给siteid赋值;
关于历史的siteid为空的问题,请执行以下SQL:
WCMChnlDoc表siteid为空的处理:
update wcmchnldoc set siteid = (select siteid from wcmchannel where wcmchnldoc.chnlid= wcmchannel.channelid)
where exists(select siteid from wcmchannel where wcmchnldoc.chnlid= wcmchannel.channelid);
WCMDOCUMENT表siteid为空的处理:
update WCMDOCUMENT set SITEID=(select SITEID from WCMCHANNEL where channelid = WCMDOCUMENT.DOCCHANNEL)
where exists(select siteid from wcmchannel where WCMDOCUMENT.DOCCHANNEL= wcmchannel.channelid);
4.对指定的表进行归档
4.1按照年份生成归档表
说明:归档表按照年份作为表的后缀名称,不同年份将产生不同的归档表,如:WCMDocument2012;同时归档表的前缀名称也可以指定,如:MyWCMDocument2012
添加了一个对Oracle数据库中的表进行归档的存储过程
--对指定的表“STABLENAME”进行归档,在表“STABLENAME”中仅保留前“NPAGESIZE”个月的数据
--历史数据则保留在归档表中
--归档时,以时间字段“SFIELDNAME”作为时间划分的标准
--归档后,以“SARCHIVETABLENAMEPRE”作为产生的归档表名的前缀,后面跟着年份值
--如果表名前缀为空串"",则使用“STABLENAME”作为前缀,如归档后表名:WCMDOCUMENT2009
CREATE OR REPLACE PROCEDURE TRS_P_TABLE_ARCHIVE(
STABLENAME IN VARCHAR2, --需要进行归档的表名
SFIELDNAME IN VARCHAR2, --对表进行归档时,参考的时间类型的字段名称
NPAGESIZE IN NUMBER, --对前多少个月的数据进行归档
SARCHIVETABLENAMEPRE IN VARCHAR2 --历史数据存放的归档后的表名前缀
)
AS
--当前待处理数据所在的年份(YYYY)
SDATAYEAR VARCHAR2(10);
--当前待处理数据所在的日期(YYYY-MM)
PREVIOUSMONTH VARCHAR2(20);
--产生的新的归档表名称
SARCHIVETABLENAME VARCHAR2(30);
--临时变量,用于判断归档表是否存在
NTABLECOUNT NUMBER;
BEGIN
--获取当前待处理的数据的年份信息
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -NPAGESIZE), 'YYYY') INTO SDATAYEAR FROM DUAL;
--初始化归档表前缀信息,没有传入,则取原始表名称
SARCHIVETABLENAME := SARCHIVETABLENAMEPRE;
IF SARCHIVETABLENAME IS NULL THEN
SARCHIVETABLENAME := STABLENAME;
END IF;
--构造归档后的表名(表前缀加上年份)
SARCHIVETABLENAME := SARCHIVETABLENAME || SDATAYEAR;
--判断当前处理的归档表是否存在,不存在则创建
SELECT COUNT(*) INTO NTABLECOUNT FROM USER_TABLES WHERE TABLE_NAME = UPPER(SARCHIVETABLENAME);
IF NTABLECOUNT <= 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE ' || SARCHIVETABLENAME || ' AS SELECT * FROM ' || STABLENAME || ' WHERE 0 != 0';
END IF;
--初始化月份值
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -NPAGESIZE), 'YYYY-MM') INTO PREVIOUSMONTH FROM DUAL;
--在备份表中插入数据
EXECUTE IMMEDIATE 'INSERT INTO ' || SARCHIVETABLENAME || ' SELECT * FROM ' || STABLENAME || ' WHERE TO_CHAR(' || SFIELDNAME || ', ''YYYY-MM'') = ''' || PREVIOUSMONTH || '''';
COMMIT;
--删除原表中的数据
EXECUTE IMMEDIATE 'DELETE FROM ' || STABLENAME || ' WHERE TO_CHAR(' || SFIELDNAME || ', ''YYYY-MM'') = ''' || PREVIOUSMONTH || '''';
COMMIT;
--对原表进行统计分析优化
DBMS_STATS.GATHER_TABLE_STATS (
ownname => 'TRSWCM65CNR',
tabname => STABLENAME,
estimate_percent => 100
);
END;
/
使用方式:
如:添加一个定时任务,对表tt中的数据,每一个月第一天凌晨12点进行数据归档
VARIABLE jobno number;
begin
dbms_job.submit(:jobno, 'TRS_P_TABLE_ARCHIVE(''tt'',''tdate'',2,'''' );', SYSDATE, 'TRUNC(LAST_DAY(SYSDATE) + 1)');
commit;
end;
/
4.2仅生产唯一归档表
说明:对每一张需要归档的表,系统只会产生一张归档表,归档表的名称可以在调用存储过程时指定,也可以采用默认值【原始表明】+【ARCHIVE】
添加了一个对Oracle数据库中的表进行归档的存储过程
--对指定的表“STABLENAME”进行归档,在表“STABLENAME”中仅保留前“NPAGESIZE”个月的数据
--历史数据则保留在归档表中
--归档时,以时间字段“SFIELDNAME”作为时间划分的标准
--归档后,以“SARCHIVETABLENAME”作为产生的归档表
--如果归档表为空串"",则使用“STABLENAME”+ARCHIVE作为前缀,如归档后表名:WCMDOCUMENTARCHIVE
CREATE OR REPLACE PROCEDURE TRS_P_TABLE_ARCHIVE2(
STABLENAME IN VARCHAR2, --需要进行归档的表名
SFIELDNAME IN VARCHAR2, --对表进行归档时,参考的时间类型的字段名称
NPAGESIZE IN NUMBER, --对前多少个月的数据进行归档
SARCHIVETABLENAME0 IN VARCHAR2 --历史数据存放的归档后的表名前缀
)
AS
--当前待处理数据所在的年份(YYYY)
SDATAYEAR VARCHAR2(10);
--当前待处理数据所在的日期(YYYY-MM)
PREVIOUSMONTH VARCHAR2(20);
--产生的新的归档表名称
SARCHIVETABLENAME VARCHAR2(30);
--临时变量,用于判断归档表是否存在
NTABLECOUNT NUMBER;
BEGIN
--获取当前待处理的数据的年份信息
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -NPAGESIZE), 'YYYY') INTO SDATAYEAR FROM DUAL;
--初始化归档,没有传入,则取原始表名称+ARCHIVE
SARCHIVETABLENAME := SARCHIVETABLENAME0;
IF SARCHIVETABLENAME IS NULL THEN
SARCHIVETABLENAME := STABLENAME || 'ARCHIVE';
END IF;
--判断当前处理的归档表是否存在,不存在则创建
SELECT COUNT(*) INTO NTABLECOUNT FROM USER_TABLES WHERE TABLE_NAME = UPPER(SARCHIVETABLENAME);
IF NTABLECOUNT <= 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE ' || SARCHIVETABLENAME || ' AS SELECT * FROM ' || STABLENAME || ' WHERE 0 != 0';
END IF;
--初始化月份值
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -NPAGESIZE), 'YYYY-MM') INTO PREVIOUSMONTH FROM DUAL;
--在备份表中插入数据
EXECUTE IMMEDIATE 'INSERT INTO ' || SARCHIVETABLENAME || ' SELECT * FROM ' || STABLENAME || ' WHERE TO_CHAR(' || SFIELDNAME || ', ''YYYY-MM'') = ''' || PREVIOUSMONTH || '''';
COMMIT;
--删除原表中的数据
EXECUTE IMMEDIATE 'DELETE FROM ' || STABLENAME || ' WHERE TO_CHAR(' || SFIELDNAME || ', ''YYYY-MM'') = ''' || PREVIOUSMONTH || '''';
COMMIT;
--对原表进行统计分析优化
DBMS_STATS.GATHER_TABLE_STATS (
ownname => 'TRSWCM65CNR',
tabname => STABLENAME,
estimate_percent => 100
);
END;
/
使用方式:
如:添加一个定时任务,对表tt中的数据,每一个月第一天凌晨12点进行数据归档
VARIABLE jobno number;
begin
dbms_job.submit(:jobno, 'TRS_P_TABLE_ARCHIVE2(''tt'',''tdate'',2,'''' );', SYSDATE, 'TRUNC(LAST_DAY(SYSDATE) + 1)');
commit;
end;
/
4.3WCMDocument及WCMChnlDoc的归档示例
对于WCMDocument及WCMChnlDoc的归档,我们采用4.2章节的介绍,都归档到一张固定的表中,如:WCMDocumentArchive,WCMChnlDocArchive。
但WCMChnlDoc表有些特殊,因为存在如下情况:
假定对WCMDocument、WCMChnlDoc表中12个月前的数据进行归档,WCMChnlDoc表中存在一条引用记录A,该引用创建时间在12个月以内,但它的实体文档已经被归档到了备份表,因为实体在12个月之前。
对于这种场景,我们需要将引用A也转移至归档表中。
--定义一个存储过程,将不存在实体的引用文档都转移到归档表
CREATE OR REPLACE PROCEDURE TRS_P_SYNCHNLDOC(
SWCMCHNLDOCARCHIVENAME IN VARCHAR2 --WCMCHNLDOC归档后的表名
)
BEGIN
--初始化归档,没有传入,则取原始表名称+ARCHIVE
IF SWCMCHNLDOCARCHIVENAME IS NULL THEN
SWCMCHNLDOCARCHIVENAME := 'WCMCHNLDOCARCHIVE';
END IF;
--将不存在实体的引用文档都转移到归档表
INSERT INTO WCMCHNLDOCARCHIVE SELECT * FROM WCMCHNLDOC WHERE NOT EXISTS(SELECT 1 FROM WCMDOCUMENT WHERE WCMDOCUMENT.DOCID = WCMCHNLDOC.DOCID);
--将不存在实体的引用文档删除
DELETE FROM WCMCHNLDOC WHERE NOT EXISTS(SELECT 1 FROM WCMDOCUMENT WHERE WCMDOCUMENT.DOCID = WCMCHNLDOC.DOCID);
END;
/
使用方式:
添加一个定时任务,对表WCMDocumnent、WCMChnlDoc中的数据进行归档、同时将无实体的引用归档;
每一个月第一天凌晨12点进行数据归档
VARIABLE jobno number;
begin
dbms_job.submit(:jobno, 'TRS_P_TABLE_ARCHIVE2(''WCMDocument'',''CrTime'',12,'''' );TRS_P_TABLE_ARCHIVE2(''WCMChnlDoc'',''CrTime'',12,'''' );TRS_P_SYNCHNLDOC('''');', SYSDATE, 'TRUNC(LAST_DAY(SYSDATE) + 1)');
commit;
end;
/
注意:需要按照顺序,先归档WCMDocument,再归档WCMChnldoc,再归档无实体的引用。
5 我的工作列表已处理页面分页信息错乱问题
//删除彻底删除文档,还存在的FLOWDOC
DELETE FROM WCMFLOWDOC WHERE OBJID NOT IN(
SELECT DOCID FROM WCMDOCUMENT WHERE ObjType = 605);
//设置已标记为删除的文档,流转轨迹标记为已删除
UPDATE WCMFLOWDOC SET ISOBJDELETED = 1 WHERE OBJID IN(
SELECT DOCID FROM WCMDOCUMENT WHERE DOCSTATUS < 0 AND ObjType = 605);
6 垃圾或错误数据查找
Edit
由于某些原因,数据库中的数据可能不正确,以下SQL可以查找出一些不正确的数据,如果查询后结果集存在数据,则这些数据在某种程度上有问题。
SELECT * FROM WCMAPPENDIX WHERE NOT EXISTS(SELECT 1 FROM WCMDOCUMENT WHERE WCMDOCUMENT.DOCID = WCMAPPENDIX.APPDOCID);
SELECT * FROM WCMCHANNEL WHERE NOT EXISTS(SELECT 1 FROM WCMWEBSITE WHERE WCMWEBSITE.SITEID = WCMCHANNEL.SITEID);
SELECT * FROM WCMCHANNELCONTENTLINK WHERE NOT EXISTS(SELECT 1 FROM WCMCHANNEL WHERE WCMCHANNEL.CHANNELID = WCMCHANNELCONTENTLINK.CHANNELID);
SELECT * FROM WCMCHANNELSYN WHERE NOT EXISTS(SELECT 1 FROM WCMCHANNEL WHERE WCMCHANNEL.CHANNELID=WCMCHANNELSYN.SRCCHANNEL OR WCMCHANNEL.CHANNELID=WCMCHANNELSYN.TOCHANNEL);
SELECT * FROM WCMCHNLDOC WHERE NOT EXISTS(SELECT 1 FROM WCMDOCUMENT WHERE WCMDOCUMENT.DOCID=WCMCHNLDOC.DOCID);
SELECT CHNLID, DOCID, COUNT(*) FROM WCMCHNLDOC GROUP BY CHNLID, DOCID HAVING COUNT(*) >= 2;
SELECT * FROM WCMCHNLDOC WHERE NOT EXISTS(SELECT 1 FROM WCMCHANNEL WHERE WCMCHANNEL.CHANNELID = WCMCHNLDOC.CHNLID OR WCMCHANNEL.CHANNELID=-WCMCHNLDOC.CHNLID);
SELECT * FROM WCMDOCUMENT WHERE NOT EXISTS(SELECT 1 FROM WCMCHNLDOC WHERE WCMDOCUMENT.DOCID=WCMCHNLDOC.DOCID);
SELECT * FROM WCMDOCUMENT WHERE NOT EXISTS(SELECT 1 FROM WCMCHANNEL WHERE WCMCHANNEL.CHANNELID = WCMDOCUMENT.DOCCHANNEL OR WCMCHANNEL.CHANNELID=-WCMDOCUMENT.DOCCHANNEL);
--扩展字段相关垃圾数据
SELECT * FROM WCMCONTENTEXTFIELD WHERE NOT EXISTS(SELECT 1 FROM WCMEXTFIELD WHERE WCMEXTFIELD.EXTFIELDID=WCMCONTENTEXTFIELD.EXTFIELDID);
SELECT * FROM WCMDOCKEYWORD WHERE NOT EXISTS(SELECT 1 FROM WCMDOCUMENT WHERE WCMDOCUMENT.DOCID = WCMDOCKEYWORD.DOCID);
SELECT * FROM WCMFLOWDOC WHERE OBJTYPE=605 AND NOT EXISTS(SELECT 1 FROM WCMDOCUMENT WHERE WCMDOCUMENT.DOCID=WCMFLOWDOC.OBJID);
SELECT EMPLOYERTYPE, EMPLOYERID, COUNT(*) FROM WCMFLOWEMPLOY GROUP BY EMPLOYERTYPE,EMPLOYERID HAVING COUNT(*) >= 2;
SELECT * FROM WCMFLOWEMPLOY WHERE EMPLOYERTYPE=101 AND NOT EXISTS(SELECT 1 FROM WCMCHANNEL WHERE WCMCHANNEL.CHANNELID = WCMFLOWEMPLOY.EMPLOYERID);
SELECT * FROM WCMGRPUSER WHERE NOT EXISTS(SELECT 1 FROM WCMUSER WHERE WCMUSER.USERID = WCMGRPUSER.USERID);
SELECT * FROM WCMGRPUSER WHERE NOT EXISTS(SELECT 1 FROM WCMGROUP WHERE WCMGROUP.GROUPID = WCMGRPUSER.GROUPID);
SELECT * FROM WCMGRPROLE WHERE NOT EXISTS(SELECT 1 FROM WCMROLE WHERE WCMROLE.ROLEID = WCMGRPROLE.ROLEID);
SELECT * FROM WCMGRPROLE WHERE NOT EXISTS(SELECT 1 FROM WCMGROUP WHERE WCMGROUP.GROUPID = WCMGRPROLE.GROUPID);
SELECT * FROM WCMROLEUSER WHERE NOT EXISTS(SELECT 1 FROM WCMUSER WHERE WCMUSER.USERID = WCMROLEUSER.USERID);
SELECT * FROM WCMROLEUSER WHERE NOT EXISTS(SELECT 1 FROM WCMROLE WHERE WCMROLE.ROLEID = WCMROLEUSER.ROLEID);
--模板相关的垃圾数据
----该模板在栏目上创建,但不存在所属栏目的模板
SELECT * FROM WCMTEMPLATE WHERE FOLDERTYPE=101 AND NOT EXISTS(SELECT 1 FROM WCMCHANNEL WHERE WCMCHANNEL.CHANNELID = WCMTEMPLATE.FOLDERID);
----该模板在站点上创建,但不存在所属站点的模板
SELECT * FROM WCMTEMPLATE WHERE FOLDERTYPE=103 AND NOT EXISTS(SELECT 1 FROM WCMWEBSITE WHERE WCMWEBSITE.SITEID = WCMTEMPLATE.ROOTID);
----按照模板所属的站点和栏目,显示首页模板超过2个的站点或栏目,理论上一个站点或栏目只能有一个首页模板
SELECT EMPLOYERTYPE, EMPLOYERID, TEMPLATETYPE, COUNT(*) FROM WCMTEMPLATEEMPLOY WHERE ISDEFAULT=1 GROUP BY EMPLOYERTYPE, EMPLOYERID, TEMPLATETYPE HAVING COUNT(*) >= 2;
--元数据垃圾数据,其中XXX换成真实的元数据英文名称
select * from wcmmetatableXXX where not exists(select 1 from wcmdocument where wcmdocument.docid=wcmmetatableXXX.metadataid);
select * from wcmmetatableXXX where not exists(select 1 from wcmchnldoc where wcmchnldoc.docid=wcmmetatableXXX.metadataid);
7.WCM52升级后文档列表没有数据
将WCM52升级到WCM65,升级后,进入栏目文档列表,发现文档列表没有数据,但数据库中WCMChnlDoc和WCMDocument表中的确存在文档,出现这种情况的原因是:WCMChnlDoc的docChannel字段为空导致;
可以通过在数据库中执行以下SQL进行修复:
update wcmchnldoc set docchannel= (select docchannel from wcmdocument where wcmchnldoc.docid= wcmdocument.docid) where exists(select docchannel from wcmdocument where wcmchnldoc.docid= wcmdocument.docid);
8.将指定站点已发文档变成新稿
将里面的?换成真实的siteid
UPDATE WCMCHNLDOC SET DOCSTATUS=1 WHERE DOCSTATUS=10 AND CHNLID IN (SELECT CHANNELID FROM WCMCHANNEL WHERE SITEID=?);
UPDATE WCMDOCUMENT SET DOCSTATUS=1 WHERE DOCSTATUS=10 AND DOCCHANNEL IN (SELECT CHANNELID FROM WCMCHANNEL WHERE SITEID=?);
应客户要求,统计一个时间段内某几个站点的发稿量。
样本,ORACLE11G:
select(SELECT WCMWEBSITE.SITENAME FROM WCMWEBSITE whereWCMDOCUMENT.SITEID=WCMWEBSITE.SITEID) as zhandian,DOCTITLE as biaoti,(SELECTchnlname FROM wcmchannel where WCMDOCUMENT.DOCCHANNEL=wcmchannel.channelid) aslanmuming,WCMDOCUMENT.DOCSOURCENAME as laiyuan,WCMDOCUMENT.DOCRELTIME asshijian,WCMDOCUMENT.OPERUSER as faburen from WCMDOCUMENT where SITEID in (1,20)and DOCSTATUS=10 AND CRTIME-to_date('2017-06-01 00:00:00','yyyy-mm-ddhh24:mi:ss')>0 AND CRTIME-to_date('2017-06-20 00:00:00','yyyy-mm-ddhh24:mi:ss')<0
批量修改某些文档状态
自定义表单栏目1375中,回复内容不为空以及用户选择允许公开发布的信息,批量设置为已签。
设置之后还需要人工校验。因判断回复内容有误差
表[TRSWCMV7].[dbo].[WCMCHNLDOC] [TRSWCMV7].[dbo].[WCMDOCUMENT]
已签
[TRSWCMV7].[dbo].[WCMCHNLDOC].docstatus=16
[TRSWCMV7].[dbo].[WCMDOCUMENT].docstatus=16
频道
[TRSWCMV7].[dbo].[WCMDOCUMENT].DOCCHANNEL=1375
[TRSWCMV7].[dbo].[WCMCHNLDOC].chnlid=1375
条件 [TRSWCMV7].[dbo].[WCMDOCUMENT]DOCCHANNEL=1375 and[TRSWCMV7].[dbo].[WCMDOCUMENT].DOCCONTENT like '%<my:回复内容>%'and DOCCONTENT like '%Yes%'
[TRSWCMV7].[dbo].[WCMDOCUMENT].docid=[TRSWCMV7].[dbo].[WCMCHNLDOC].docid
修改 [TRSWCMV7].[dbo].[WCMCHNLDOC].docstatus=16 与[TRSWCMV7].[dbo].[WCMDOCUMENT].docstatus=16
最后:
生成检索语句
select * from [TRSWCMV7].[dbo].[WCMCHNLDOC]
where [TRSWCMV7].[dbo].[WCMCHNLDOC].docid in (select docid from[TRSWCMV7].[dbo].[WCMDOCUMENT] where[TRSWCMV7].[dbo].[WCMDOCUMENT].DOCCHANNEL=1375 and [TRSWCMV7].[dbo].[WCMDOCUMENT].DOCCONTENTlike '%<my:回复内容>%' and DOCCONTENT like '%Yes%')
生成更改数据语句
update [TRSWCMV7].[dbo].[WCMCHNLDOC] set[TRSWCMV7].[dbo].[WCMCHNLDOC].DOCSTATUS=16
where[TRSWCMV7].[dbo].[WCMCHNLDOC].chnlid=1375 and [TRSWCMV7].[dbo].[WCMCHNLDOC].docidin
(select docid from[TRSWCMV7].[dbo].[WCMDOCUMENT] where[TRSWCMV7].[dbo].[WCMDOCUMENT].DOCCHANNEL=1375 and[TRSWCMV7].[dbo].[WCMDOCUMENT].DOCCONTENT like '%<my:回复内容>%'and DOCCONTENT like '%Yes%')
数据库内删除不能在wcm里删除的文档
站点4废稿箱中删除文档,部分文档报错,废稿箱中文档标题消失,无法删除无法清空废稿箱,检查数据库发现文档对应的记录在WCMDOCUMENT中已经删除但是在WCMCHNLDOC里还存在,使用如下语句可以得到数据差异列表。
select * from[TRSWCMV7].[dbo].[WCMCHNLDOC] wheredocid not in (select DOCID from [TRSWCMV7].[dbo].[WCMDOCUMENT] whereDOCSTATUS=-10) and DOCSTATUS=-10 and SITEID=4 order by DOCID
查看WCMDOCUMENT表语句,可人工查看差异
select * from[TRSWCMV7].[dbo].[WCMDOCUMENT] whereDOCSTATUS=-10 and SITEID=4
order by DOCID
删除数据语句(谨慎操作,未证实安全,注意备份)
delete from[TRSWCMV7].[dbo].[WCMCHNLDOC] wheredocid not in (select DOCID from [TRSWCMV7].[dbo].[WCMDOCUMENT] whereDOCSTATUS=-10) and DOCSTATUS=-10 and SITEID=4
wcm发布置标中如何知道该文档是否有附件
exists(select APPDOCID from WCMAppendixwhere AppFlag=10 and WCMAppendix.AppDocId=WCMChnlDoc.DocId)
AppFlag=10 文件附件; AppFlag=20 图片附件; AppFlag=40 链接附件
数据库迁移文档、频道、站点数据后,批量更改旧ip到新ip:
update wcmdocument set doclink=replace(doclink,'156.9.12.9','156.9.18.126') where doclink like 'http://156.9.12.9%';
update wcmdocument set docpuburl=replace(docpuburl,'156.9.12.9','156.9.18.126') where docpuburl like 'http://156.9.12.9%';
update wcmchnldoc set docpuburl=replace(docpuburl,'156.9.12.9','156.9.18.126') where docpuburl like 'http://156.9.12.9%';
update WCMFOLDERPUBLISHCONFIG set rootdomain=replace(rootdomain,'156.9.12.9','156.9.18.126') where foldertype=103 and rootdomain like 'http://156.9.12.9%';
操作数据表实现分发站点的停用及批量新建分发站点
需求:
1、停用WCM现有的所有分发点
2、每个站点增加新的分发点
不能在页面上操作的原因:
由于网站群的站点太多,而且切换时间必须断,在页面上操作工作量太大,考虑直接修改数据表来实现,需要提供SQL语句。
实现方法
1、禁用所有分发站点
sql语句:update WCMPUBLISHDISTRIBUTION set ENABLED=0;
2、每个站点建立一个分发站点
下面sql语句中,红色的部分为本地分发站点的存储目录,相当于在WCM中新建分发站点时要填的存储路径。
蓝字‘FILE’表示新建站点里面的类型。
QQ截图20121112162339.png
insert into WCMPUBLISHDISTRIBUTION(PUBLISHDISTRIBUTIONID, FOLDERTYPE, FOLDERID, TARGETTYPE, TARGETSERVER, LOGINUSER, LOGINPASSWORD, DATAPATH, ENABLED, CRUSER, CRTIME, ANONYMFTP, TARGETPORT, PASSIVEMODE) select SITEID+(select max(PUBLISHDISTRIBUTIONID)+1 from WCMPUBLISHDISTRIBUTION),103,siteid,'FILE','','','','e:\',1,CRUSER,CRTIME,0,null,1 from WCMWEBSITE;
3、其它必要操作
更新WCMID表:
update WCMID set NEXTID=0 where TABLENAME='WCMPUBLISHDISTRIBUTION';
4、重启WCM
因为涉及到数据库的更新,所以要重启一下WCM。
注意
上面第2步中的SQL语句适用于没有建过分发站点的系统,也就是说,WCMPUBLISHDISTRIBUTION表中之前必须有数据。如果系统没有建过分发站点,WCMPUBLISHDISTRIBUTION表中无数据,那么第2步中的语句会报错,需要改成如下语句:
insert into WCMPUBLISHDISTRIBUTION(PUBLISHDISTRIBUTIONID, FOLDERTYPE, FOLDERID, TARGETTYPE, TARGETSERVER, LOGINUSER, LOGINPASSWORD, DATAPATH, ENABLED, CRUSER, CRTIME, ANONYMFTP, TARGETPORT, PASSIVEMODE) select SITEID,103,siteid,'FILE','','','','e:\',1,CRUSER,CRTIME,0,null,1 from WCMWEBSITE;
更多推荐
所有评论(0)