有的時候,我們需要修改rpd展現層的主題名。雖然改完名稱之後,會自動創建舊名稱的別名,以便不影響現有使用該主題的分析。
但是這樣有的時候還是會有一些小問題,所以完美的解決辦法是同時也將現有分析的主題名一併修改。
如果分析少的話,直接在具體分析的高級頁面修改即可。但是如果分析多了,或者你根本不知道有哪些分析使用了該主題應該怎麼辦呢?
我們可以使用runcat.sh來批量替換catalog對象(不止是分析)的主題名、字段名、表名等。
runcat.sh位於$FMW/user_projects/domains/bi/bitools/bin目錄下
執行./runcat.sh -help可以查看幫助。如果需要查看具體某個命令的幫助,可以
./runcat.sh -cmd replace -help
replace就是我們此次需要使用的命令,該命令有兩種工作模式:online和offline,區別是offline不受對象權限控制。
replace可以完成文本、主題域、表、字段、公式的替換
示例如下:
./runcat.sh -cmd replace -online http://bjkjy-bi-devbiee01.bjkjy.com:8706/analytics/saw.dll -credentials user.txt -folderFromFile folder.txt -inputFile replaceCmds.xmluser.txt的內容如下:
login=weblogic
pwd=admin123
folder.txt內容如下:
/shared/groups/misc
/shared/groups/_filters
注:你還可以使用-skipFolderFromFile參數來排除某些目錄,具體請參見幫助
replaceCmds.xml的內容如下:
<?xml version="1.0" encoding="utf-8"?>
<actions>
<action command="textReplace" oldValue="paint" newValue="newPaint" ignoreCase="false"/>
<action command="renameSubjectArea" oldValue="SnowflakeSales" newValue="NEW SALES" ignoreCase="false"/>
<action command="renameTable" subjectArea="Paint Exec" oldValue="forecast measures" newValue="NEWFCMEASURES" ignoreCase="true"/>
<action command="renameColumn" subjectArea="SnowflakeSales" oldValue="CategoryID" newValue="NEW CATID" useRegex="true"/>
<action command="renameFormula" subjectArea="Paint Exec" oldValue=""Paint Exec".Measures."Year Ago Dollars"" newValue=""Paint Exec".Measures."NEW YAGODOLLARS"" ignoreCase="false"/>
<action command="renameFormula" subjectArea=""Paint Exec"" oldValue=""Products".Brand" newValue="NEWPRODUCTS."NEW BRAND"" ignoreCase="false"/>
</actions>
執行成功之後會打印替換掉的對象列表。
不過需要注意的是,這個替換不是完全匹配,什麼意思?
舉個例子,比如你有一個主題叫“ABC”你想把他替換成"BI_ABC",你按照上面執行了一次命令,成功替換成"BI_ABC"。
但是你不小心又執行了一次,這次的結果就是會把BI_ABC替換成BI_BI_ABC。因爲只匹配了ABC,而不是整個主題名,所以請注意這一點。
如果想使用全量匹配應該應該怎麼辦?
查看分析的xml文件找到主題域名部分:
subjectArea=""paint""
可以看到完成的主題名前後有" (引號的轉義符)
那麼,如果我們要實現完全匹配,則需要按如下的方式編寫:
<?xml version="1.0" encoding="utf-8"?>
<actions>
<action command="renameSubjectArea" oldValue=""paint"" newValue=""newPaint"" ignoreCase="false"/>
</actions>
注意:newValue前後也要添加"
另外,還可以使用正則表達式來進行查找替換,對<action標籤添加useRegex屬性,同時使用正式表達式來描述OLD或者NEW的值。
例如:
replaceCmds.xml中如下:
<?xml version="1.0" encoding="utf-8"?>
<actions>
<action command="renameSubjectArea" oldValue="paint\d+" newValue="newPaint" ignoreCase="false" useRegex="true"/>
</actions>
最後,11g同樣可以使用runcat.sh