A. 編譯安裝的apache怎麼用service啟動
Apache安裝後可通過其安裝路徑的bin目錄下的apachectl腳本控制服務的啟動和停止。本例中apache安裝在/usr/local/apache-2.2.6,服務控制腳本為:
/usr/local/apache-2.2.6/bin/apachectl
執行下面的命令啟動Apache服務:
/usr/local/apache-2.2.6/bin/apachectl start
執行下面的命令停止Apache服務:
/usr/local/apache-2.2.6/bin/apachectl stop
可以簡單地把Apache啟動命令加到/etc/rc.local文件,讓Apache隨系統啟動而自動啟動:
echo"/usr/local/apache-2.2.6/bin/apachectl start" >> /etc/rc.local
下面介紹如何把Apache加入到系統服務,用service命令來控制Apache的啟動和停止。
首先以apachectl腳本為模板生成Apache服務控制腳本:
grep -v "#"/usr/local/apache-2.2.6/bin/apachectl > /etc/init.d/apache
用vi編輯Apache服務控制腳本/etc/init.d/apache:
vi /etc/init.d/apache
在文件最前面插入下面的行,使其支持chkconfig命令:
#!/bin/sh
# chkconfig: 2345 85 15
# description: Apache is a World Wide Webserver.
保存後退出vi編輯器,執行下面的命令增加Apache服務控制腳本執行許可權:
chmod +x /etc/init.d/apache
執行下面的命令將Apache服務加入到系統服務:
chkconfig --add apache
執行下面的命令檢查Apache服務是否已經生效:
chkconfig --list apache
命令輸出類似下面的結果:
apache 0:off 1:off 2:on 3:on 4:on 5:on 6:off
表明apache服務已經生效,在2、3、4、5運行級別隨系統啟動而自動啟動,以後可以使用service命令控制Apache的啟動和停止。
啟動Apache服務:
service apache start
停止Apache服務:
service apache stop
執行下面的命令關閉開機自啟動:
chkconfig apache off
執行下面的命令改變開機自啟動的運行級別為3、5:
chkconfig --level 35 apache on
B. sqlldr是不是sql loader的縮寫
羅列了網上常見的三篇Sqlldr的介紹
一:sql loader 的特點
oracle自己帶了很多的工具可以用來進行數據的遷移、備份和恢復等工作。但是每個工具都有自己的特點。
比如說exp和imp可以對資料庫中的數據進行導出和導出的工作,是一種很好的資料庫備份和恢復的工具,因此主要用在資料庫的熱備份和恢復方面。有著速度快,使用簡單,快捷的優點;同時也有一些缺點,比如在不同版本資料庫之間的導出、導入的過程之中,總會出現這樣或者那樣的問題,這個也許是oracle公司自己產品的兼容性的問題吧。
sql loader 工具卻沒有這方面的問題,它可以把一些以文本格式存放的數據順利的導入到oracle資料庫中,是一種在不同資料庫之間進行數據遷移的非常方便而且通用的工具。缺點就速度比較慢,另外對blob等類型的數據就有點麻煩了。
二:sql loader 的幫助
C:\>sqlldr
SQL*Loader: Release 9.2.0.1.0 - Proction on 星期六 10月 9 14:48:12 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
用法: SQLLDR keyword=value [,keyword=value,...]
有效的關鍵字:
userid -- ORACLE username/password
control -- Control file name
log -- Log file name
bad -- Bad file name
data -- Data file name
discard -- Discard file name
discardmax -- Number of discards to allow (全部默認)
skip -- Number of logical records to skip (默認0)
load -- Number of logical records to load (全部默認)
errors -- Number of errors to allow (默認50)
rows -- Number of rows in conventional path bind array or between direct p
ath data saves
(默認: 常規路徑 64, 所有直接路徑)
bindsize -- Size of conventional path bind array in bytes(默認256000)
silent -- Suppress messages ring run (header,feedback,errors,discards,part
itions)
direct -- use direct path (默認FALSE)
parfile -- parameter file: name of file that contains parameter specification
s
parallel -- do parallel load (默認FALSE)
file -- File to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默
認FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unus
able(默認FALSE)
readsize -- Size of Read buffer (默認1048576)
external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(
默認NOT_USED)
columnarrayrows -- Number of rows for direct path column array(默認5000)
streamsize -- Size of direct path stream buffer in bytes(默認256000)
multithreading -- use multithreading in direct path
resumable -- enable or disable resumable for current session(默認FALSE)
resumable_name -- text string to help identify resumable statement
resumable_timeout -- wait time (in seconds) for RESUMABLE(默認7200)
date_cache -- size (in entries) of date conversion cache(默認1000)
PLEASE NOTE: 命令行參數可以由位置或關鍵字指定
。前者的例子是 'sqlload
scott/tiger foo'; 後一種情況的一個示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定參數的時間必須早於
但不可遲於由關鍵字指定的參數。例如,
允許 'sqlldr scott/tiger control=foo logfile=log', 但是
不允許 'sqlldr scott/tiger control=foo log', 即使
參數 'log' 的位置正確。
C:\>
三:sql loader使用例子
a)SQLLoader將 Excel 數據導出到 Oracle
1.創建SQL*Loader輸入數據所需要的文件,均保存到C:\,用記事本編輯:
控制文件:input.ctl,內容如下:
load data --1、控制文件標識
infile 'test.txt' --2、要輸入的數據文件名為test.txt
append into table test --3、向表test中追加記錄
fields terminated by X'09' --4、欄位終止於X'09',是一個製表符(TAB)
(id,username,password,sj) -----定義列對應順序
a、insert,為預設方式,在數據裝載開始時要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
在DOS窗口下使用SQL*Loader命令實現數據的輸入
C:\>sqlldr userid=system/manager control=input.ctl
默認日誌文件名為:input.log
默認壞記錄文件為:input.bad
2.還有一種方法
可以把EXCEL文件另存為CSV(逗號分隔)(*.csv),控制文件就改為用逗號分隔
LOAD DATA
INFILE 'd:\car.csv'
APPEND INTO TABLE t_car_temp
FIELDS TERMINATED BY ","
(phoneno,vip_car)
b)在控制文件中直接導入數據
1、控制文件test.ctl的內容
-- The format for executing this file with SQL Loader is:
-- SQLLDR control=<filename> Be sure to substitute your
-- version of SQL LOADER and the filename for this file.
LOAD DATA
INFILE *
BADFILE 'C:\Documents and Settings\Jackey\桌面\WMCOUNTRY.BAD'
DISCARDFILE 'C:\Documents and Settings\Jackey\桌面\WMCOUNTRY.DSC'
INSERT INTO TABLE EMCCOUNTRY
Fields terminated by ";" Optionally enclosed by '"'
(
COUNTRYID NULLIF (COUNTRYID="NULL"),
COUNTRYCODE,
COUNTRYNAME,
CONTINENTID NULLIF (CONTINENTID="NULL"),
MAPID NULLIF (MAPID="NULL"),
CREATETIME DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (CREATETIME="NULL"),
LASTMODIFIEDTIME DATE "MM/DD/YYYY HH24:MI:SS" NULLIF (LASTMODIFIEDTIME="NULL")
)
BEGINDATA
1;"JP";"Japan";1;9;"09/16/2004 16:31:32";NULL
2;"CN";"China";1;10;"09/16/2004 16:31:32";NULL
3;"IN";"India";1;11;"09/16/2004 16:31:32";NULL
4;"AU";"Australia";6;12;"09/16/2004 16:31:32";NULL
5;"CA";"Canada";4;13;"09/16/2004 16:31:32";NULL
6;"US";"United States";4;14;"09/16/2004 16:31:32";NULL
7;"MX";"Mexico";4;15;"09/16/2004 16:31:32";NULL
8;"GB";"United Kingdom";3;16;"09/16/2004 16:31:32";NULL
9;"DE";"Germany";3;17;"09/16/2004 16:31:32";NULL
10;"FR";"France";3;18;"09/16/2004 16:31:32";NULL
11;"IT";"Italy";3;19;"09/16/2004 16:31:32";NULL
12;"ES";"Spain";3;20;"09/16/2004 16:31:32";NULL
13;"FI";"Finland";3;21;"09/16/2004 16:31:32";NULL
14;"SE";"Sweden";3;22;"09/16/2004 16:31:32";NULL
15;"IE";"Ireland";3;23;"09/16/2004 16:31:32";NULL
16;"NL";"Netherlands";3;24;"09/16/2004 16:31:32";NULL
17;"DK";"Denmark";3;25;"09/16/2004 16:31:32";NULL
18;"BR";"Brazil";5;85;"09/30/2004 11:25:43";NULL
19;"KR";"Korea, Republic of";1;88;"09/30/2004 11:25:43";NULL
20;"NZ";"New Zealand";6;89;"09/30/2004 11:25:43";NULL
21;"BE";"Belgium";3;79;"09/30/2004 11:25:43";NULL
22;"AT";"Austria";3;78;"09/30/2004 11:25:43";NULL
23;"NO";"Norway";3;82;"09/30/2004 11:25:43";NULL
24;"LU";"Luxembourg";3;81;"09/30/2004 11:25:43";NULL
25;"PT";"Portugal";3;83;"09/30/2004 11:25:43";NULL
26;"GR";"Greece";3;80;"09/30/2004 11:25:43";NULL
27;"IL";"Israel";1;86;"09/30/2004 11:25:43";NULL
28;"CH";"Switzerland";3;84;"09/30/2004 11:25:43";NULL
29;"A1";"Anonymous Proxy";0;0;"09/30/2004 11:25:43";NULL
30;"A2";"Satellite Provider";0;0;"09/30/2004 11:25:43";NULL
31;"AD";"Andorra";3;0;"09/30/2004 11:25:43";NULL
32;"AE";"United Arab Emirates";1;0;"09/30/2004 11:25:43";NULL
33;"AF";"Afghanistan";1;0;"09/30/2004 11:25:43";NULL
34;"AG";"Antigua and Barbuda";7;0;"09/30/2004 11:25:43";NULL
35;"AI";"Anguilla";7;0;"09/30/2004 11:25:43";NULL
36;"AL";"Albania";3;0;"09/30/2004 11:25:43";NULL
37;"AM";"Armenia";3;0;"09/30/2004 11:25:43";NULL
38;"AN";"Netherlands Antilles";3;0;"09/30/2004 11:25:43";NULL
39;"AO";"Angola";2;0;"09/30/2004 11:25:43";NULL
40;"AP";"Asia/Pacific Region";2;0;"09/30/2004 11:25:43";NULL
41;"AQ";"Antarctica";8;0;"09/30/2004 11:25:43";NULL
42;"AR";"Argentina";5;0;"09/30/2004 11:25:43";NULL
43;"AS";"American Samoa";6;0;"09/30/2004 11:25:43";NULL
44;"AW";"Aruba";5;0;"09/30/2004 11:25:43";NULL
45;"AZ";"Azerjan";1;0;"09/30/2004 11:25:43";NULL
46;"BA";"Bosnia and Herzegovina";3;0;"09/30/2004 11:25:43";NULL
47;"BB";"Barbados";5;0;"09/30/2004 11:25:43";NULL
48;"BD";"Bangladesh";1;0;"09/30/2004 11:25:43";NULL
49;"BF";"Burkina Faso";2;0;"09/30/2004 11:25:43";NULL
50;"BG";"Bulgaria";3;0;"09/30/2004 11:25:43";NULL
51;"BH";"Bahrain";1;0;"09/30/2004 11:25:43";NULL
52;"BI";"Burundi";2;0;"09/30/2004 11:25:43";NULL
53;"BJ";"Benin";2;0;"09/30/2004 11:25:43";NULL
54;"BM";"Bermuda";4;0;"09/30/2004 11:25:43";NULL
55;"BN";"Brunei Darussalam";1;0;"09/30/2004 11:25:43";NULL
56;"BO";"Bolivia";5;0;"09/30/2004 11:25:43";NULL
57;"BS";"Bahamas";7;0;"09/30/2004 11:25:43";NULL
58;"BT";"Bhutan";1;0;"09/30/2004 11:25:43";NULL
59;"BV";"Bouvet Island";5;0;"09/30/2004 11:25:43";NULL
60;"BW";"Botswana";2;0;"09/30/2004 11:25:43";NULL
61;"BY";"Belarus";3;0;"09/30/2004 11:25:43";NULL
2、執行導入命令
C:\>sqlldr userid=system/manager control=test.ctl
c)復雜格式的導入
Sqlldr
sql loader可以把一些以文本格式存放的數據順利的導入到oracle資料庫中,
是一種在不同資料庫之間進行數據遷移的非常方便而且通用的工具。
缺點就速度比較慢,另外對blob等類型的數據就有點麻煩了。
用法: SQLLDR keyword=value [,keyword=value,...]
有效的關鍵字:
userid -- ORACLE username/password
control – 控制文件
log – 記錄的日誌文件
bad – 壞數據文件
data – 數據文件
discard – 丟棄的數據文件
discardmax – 允許丟棄數據的最大值 (全部默認)
skip -- Number of logical records to skip (默認0)
load -- Number of logical records to load (全部默認)
errors – 允許的錯誤記錄數 (默認50)
rows -- Number of rows in conventional path bind array or between direct path data saves
(每次提交的記錄數,默認: 常規路徑 64, 所有直接路徑)
bindsize -- Size of conventional path bind array in bytes(默認256000)
每次提交記錄的緩沖區的大小(位元組為單位,默認256000)
silent --禁止輸出信息 (header,feedback,errors,discards,partitions)
direct – 使用直通路徑方式導入 (默認FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- 並行導入 (默認FALSE)
file -- File to allocate extents from
與bindsize成對使用,其中較小者會自動調整到較大者
sqlldr先計算單條記錄長度,乘以rows,如小於bindsize,不會試圖擴張rows以填充bindsize;如超出,則以bindsize為准。
external_table
-- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(默認NOT_USED)
columnarrayrows
-- Number of rows for direct path column array(默認5000)
streamsize -- Size of direct path stream buffer in bytes(默認256000)
multithreading
-- use multithreading in direct path
resumable -- enable or disable resumable for current session(默認FALSE)
resumable_name
-- text string to help identify resumable statement
resumable_timeout
-- wait time (in seconds) for RESUMABLE(默認7200)
date_cache -- size (in entries) of date conversion cache(默認1000)
注意:有兩種方式可以指定命令行參數:通過位置或者通過關鍵字。前者的例子:'sqlldr scott/tiger foo';
後者的例子:'sqlldr control=foo userid=scott/tiger';
不能前面使用關鍵字指定後面通過位置制定的混合方式;
比如:'sqlldr scott/tiger control=foo logfile=log' 是允許的,
但'sqlldr scott/tiger control=foo log'不允許。
為清楚起見最好所有命令行參數都用關鍵字指定。
控制文件:
一個控制命令的腳本文件,通常以ctl結尾,內容如下:
LOAD DATA
INFILE 't.dat' 要導入的文件
// INFILE 'tt.date' 導入多個文件
// INFILE * 表示要導入的內容就在control文件里 下面的BEGINDATA後面就是導入的內容
INTO TABLE table_name 指定裝入的表
BADFILE 'c:\bad.txt' 可選,指定壞文件地址,預設在當前目錄下生成與原文件名一致的.bad文件
************* 以下是4種裝入表的方式
APPEND 原先的表有數據 就加在後面
INSERT 裝載空表 如果原先的表有數據 sqlloader會停止 默認值
REPLACE 原先的表有數據 原先的數據會全部刪除
TRUNCATE 指定的內容和replace的相同 會用truncate語句刪除現存數據
************* 指定分隔符
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
// TERMINATED BY WRITESPACE 以空白分割
TRAILING NULLCOLS 表的欄位沒有對應的值時允許為空
************* 下面是表的欄位
(
col_1 , col_2 ,col_filler FILLER // FILLER 關鍵字 此列的數值不會被裝載
// 如: lg,lg,not 結果 lg lg
)
如果沒聲明FIELDS TERMINATED BY ',' 時,可以用下面兩種方式實現同樣功能:
1.為每一列指定分隔符
(
col_1 [interger external] TERMINATED BY ',' ,
col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,
col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
)
2.用位置告訴欄位裝載數據
(
col_1 position(1:2),
col_2 position(3:10),
col_3 position(*:16), // 這個欄位的開始位置在前一欄位的結束位置
col_4 position(1:16),
col_5 position(3:10) char(8) // 指定欄位的類型
)
BEGINDATA 對應開始的 INFILE * 要導入的內容就在control文件里
10,Sql,what
20,lg,show
asp.net調用bat和ctl文件實現sql*loader的功能
1 後台調用bat文件
Dim proc As System.Diagnostics.Process
proc = System.Diagnostics.Process.Start("cmd.exe", " /c " & "D:\execise\SE004.bat")
proc.WaitForExit()
或者
Shell("cmd.exe /c D:\execise\SE004.bat", AppWinStyle.NormalFocus)
或者
Dim p As New System.Diagnostics.Process
'p.StartInfo.FileName = "cmd.exe"
'p.StartInfo.Arguments = " /c " & "D:\execise\SE004.bat"
'p.StartInfo.UseShellExecute = False
'p.StartInfo.RedirectStandardInput = True
'p.StartInfo.RedirectStandardOutput = True
'p.StartInfo.RedirectStandardError = True
'p.StartInfo.CreateNoWindow = False
'p.Start()
'Dim strValue As String = p.StandardOutput.ReadToEnd()
2 然後調用ctl文件,bat文件的
SQLLDR USERID=spv3/paper@san CONTROL=d:\execise\SE004.CTL log=D:\execise\LOG\SE004.log
3, ctl文件的內容如下
LOAD DATA
INFILE 'D:\execise\SE004.CSV'
TRUNCATE
INTO TABLE TEMP_tableName
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
id
,age
,num
,sum
)
4. 數據文件以 逗號分割
C. 怎麼讓Android系統或Android應用執行shell腳本
一、Android應用啟動服務執行腳本
1 如何寫服務和腳本
在android源碼根目錄下有/device/tegatech/tegav2/init.rc文件相信大家對這個文件都不陌生(如果不明白就仔細研讀下android啟動流程)。如果在該腳本文件中添加諸如以下服務:
service usblp_test /data/setip/init.usblpmod.sh
oneshot
disabled
註解:每個設備下都會有自己對應的init.rc,init.設備名.rc腳本文件。oneshot disabled向我們說明了在系統啟動的時候這個服務是不會自動啟動的。並且該服務的目的是執行/data/setip/init.usblpmod.sh腳本。腳本的內容你可以隨便寫,只要符合shell語法就可以了,比如腳本可以是簡單的設置eth0:
# ! /system/bin/sh //腳本的開頭必須這樣寫。
Ifconfig eth0 172.16.100.206 netmask 255.255.0.0 up//設置ip的命令
2、如何在應用中啟動服務
1)首先了解下在服務啟動的流程
1. 在你的應用中讓init.rc中添加的服務啟動起來。
首先了解下在服務啟動的流程:
在設備目錄下的init.c(切記並不是system/core/init/init.rc)
Main函數的for(;;)循環中有一個handle_property_set_fd(),函數:
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents == POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
handle_keychord();
else if (ufds[i].fd == get_signal_fd())
handle_signal();
}
}
這個函數的實現也在system/core/init目錄下,該函數中的check_control_perms(msg.value, cr.uid, cr.gid)函數就是檢查該uid是否有許可權啟動服務(msg.value就是你服務的名字),如果應用為root或system用戶則直接返回1.之後就是調用handle_control_message((char*) msg.name + 4, (char*) msg.value),該函數的參數就是去掉1.ctl.後的start和2.你服務的名字。這個函數的詳細內容:
void handle_control_message(const char *msg, const char *arg)
{
if (!strcmp(msg,"start")) {
msg_start(arg);
} else if (!strcmp(msg,"stop")) {
msg_stop(arg);
} else if (!strcmp(msg,"restart")) {
msg_stop(arg);
msg_start(arg);
} else {
ERROR("unknown control msg '%s'\n", msg);
}
}
匹配start後調用msg_start.服務就這樣起來了,我們的解決方案就是在檢查許可權的地方「下點功夫」,因為我們不確定uid,所以就讓check_control_perms這個函數不要檢查我們的uid,直接檢查我們服務的名字,看看這個函數:
static int check_control_perms(const char *name, unsigned int uid, unsigned int gid) {
int i;
if (uid == AID_SYSTEM || uid == AID_ROOT)
return 1;
/* Search the ACL */
for (i = 0; control_perms[i].service; i++) {
if (strcmp(control_perms[i].service, name) == 0) {
if ((uid && control_perms[i].uid == uid) ||
(gid && control_perms[i].gid == gid)) {
return 1;
}
}
}
return 0;
}
這個函數裡面是必須要檢查uid的,我們只要在for循環上寫上。
if(strcmp(「usblp_test」,name)==0) //usblp_test就是我們服務的名字。
return 1;
這樣做不會破壞android原本的結構,不會有什麼副作用。
init.c和init.rc都改好了,現在就可以編譯源碼了,編譯好了裝到機子開發板上就可以了。
D. shell腳本如何將參數傳到.ctl文件中
兩種方案:
在shell中,現將原.ctl備份(建議)再讀取,查找修改區域的前後關鍵字(避免覆蓋),replace為新參數,再保存。
將.ctl文件中需要傳參位置的原內容寫到另一個文件a中,原位置用shell代碼讀取文件a代替,在shell中將參數寫到文件a中,覆蓋或追加(取決於備份與否)。
建議使用第二種,不僅效率高,也能體現shell編程的精髓
E. 判斷一個字元是否等於Y或者N出現問題。
char ctl; 的字元比較要用 strcmp(..) 或strncmp(...) 函數,字元常量用雙引號.
unsigned char ctl; 的字元比較 才可以用單引號'Y','y','N','n',(單引號這些值相當於整型值,才可以用 != 比較).
if (strcmp(ctl,"Y") == 0 || strcmp(ctl,"y") == 0) {
printf("This is Y or y");
} else {
printf("This is "no" \n");
};
F. 如果需要從oracle中每天定時導出數據用什麼方法
1、創建資料庫日誌表導出為文本文件的腳本tabout.ctl或tabout.sql
注意:該日誌導出後在c:HttpLog目錄下
tabout.ctl腳本內容如下:
SET NEWPAGE NONE
SET HEADING OFF
SET TERM OFF
SET SPACE 0
SET PAGESIZE 0
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 2500
set feedback off
set echo off
SET VERIFY OFF
column v_date new_value filename;
select to_char(sysdate,'yyyymmdd') || '.log' v_date from al;
spool ..HttpLog&&filename
select id||','||name from orcluser.test;
spool off;
exit;
2、創建調用該腳本的logout.bat文件
logout.bat內容如下:
mkdir ..HttpLog
C:oracleora92insqlplus orcluser/orcl @C:Oracleout.ctl
說明:該bat文件直接在當前目錄下創建名為HttpLog的文件夾,以便tabout.ctl腳本輸出的文件存放到該目錄下。其通過調用Oracle中sqlplus可執行文件來執行tabout.ctl腳本,所以該文件直接雙擊即可運行,無需其他操作。
3、通過windows定時任務實現自動定期執行
「在控制面板——任務計劃——添加任務計劃」中建立定期將資料庫中日誌表數據導出為文本格式(如:你可以根據需求設置為每天對日誌表數據進行導出)。根據你當前對日誌文件路徑的存儲需求,修改上面兩個腳本中的存儲路徑,在windows定時任務直接調用logout.bat文件執行即可。
G. Oracle資料庫不在本地怎麼使用sqlloader
sqlloader的使用與Oracle資料庫是否在本地無關。前提是本地必須裝有Oracle客戶端。
使用Oracle版本:Oracle10g。
步驟:
1、配置本地連接遠程資料庫。在Oracle安裝目錄下,如「C:oracleproct10.2.0db_1 etworkADMIN」找到tnsnames.ora文件,增加內容(中文部分需要根據實際情況修改)並保存:
本地實例名(可自定義英文+數字組合)=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=伺服器IP或伺服器主機名)(PORT=Oracle埠號))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=資料庫服務名)
)
)
2、根據本地的要sqlloader的腳本在資料庫中建立相應的表,數據舉例如下:
H. CLI CLR CTL的全稱與作用分別是什麼
編輯詞條 C++/CLI 什麼是C++/CLI呢?C++當然指的是Bjarne Stroustrup在BELL實驗室發明的C++語言,它實現了運行時取得速度和尺寸最佳化的靜態對象模型,然而它除了堆分配外不支持程序的動態修改,它准許無限地接近底層設備,但在程序運行過程中幾乎無法操作活動類型,也無法操作與程序相關聯的底層結構。Herb Sutter,C++/CLI的主要構造者之一,稱C++是一門「混凝土」式的語言。
CLI指的是通用語言結構,一種支持動態組件編程模型的多重結構,在許多情況下,這代表了一個與C++對象模型完全顛倒了的模式。一個時實的軟體層,有效地執行系統,在底層操作系統與程序之間運行。操作底層的設備受到一定的限制,操作執行程序中的活動類型及與程序相關聯的下部結構得到了支持。反斜杠(/)代表C++和CLI的捆綁,這個捆綁帶來的細節問題是本文主要討論的問題。
所以,「什麼是C++/CLI」問題的最初、最接近答案是:它是靜態C++對象模型到CLI的動態組件對象編程模型的捆綁。簡而言之,它就是你如何用C++在.NET中編程,而不是C#或Visual Basic.NET。象C#和CLI本身一樣,C++/CLI正在ECMA(歐洲計算機製造商協會)主持下進行標准化,以最終符合ISO標准。
實時通用語言(CLR)是CLI的微軟版本,它非常適用於微軟的Windows操作系統,相似地,Visual C++2005是C++/CLI的實現。
作為第二個近似的答案,我認為C++/CLI是.NET編程模式與C++的結合,正如以前將模板與C++結合起來產生的泛型編程。所有這種結合中,企業所擁有的C++的投資以及開發人員使用C++的經驗將得到保存,而這恰恰是使用C++/CLI進行開發的重要基礎。
學習C++/CLI的方法
在設計C++/CLI語言中涉及三個方面問題,這同樣貫徹於所有的其他程序開發語言:一是語言級的語法向底層通用類型系統(簡稱CTS)的映射;二是向程序開發人員提供的CLI的底層細節結構的級別選擇;三是超越CLI的直接支持,提供額外的功能性函數的選擇。
第一條對於所有的CLI語言來說都大致相同,第二條和第三條對於不同的CLI語言來說是不同的,相互區別的。根據你需要解決什麼樣的問題,你將選擇這種或那種語言,也有可能混合使用多種CLI語言。學習C++/CLI涉及到了解它在設計過程中的所有這些涉及方面。
從C++/CLI到CTS的映射?
使用C++/CLI編程時間了解底層的CTS非常重要。CTS包括以下三種常用類的類型:
1、多態引用類型,這正是對於所有繼承類所要使用的。
2、非多態值類型,這用於實時高效的具體類型,例如數值類型。
3、抽象的介面類型,這用於定義一個操作集,也可以用於實現介面的引用或值類型集合。
這個設計方面的問題,即將CTS映射到語言內建的數據類型集合,通常同樣貫穿於所有的CLI語言,雖然不同的CLI語言語法不同。所以,在C#中你可能這么寫:
abstract class Shape { ... } // C#
來定義了一個Shape基類,從該類將導出幾何對象,然而在C++/CLI你將這么寫:
ref class Shape abstract { ... }; // C++/CLI
上述代碼說明了底層的C++/CLI引用類型。這兩種聲明在內層代表的意思是一樣的。相似地,在C#中你這么寫:
struct Point2D { ... } // C#
來定義一個具體的Point2D 類,然而在C++/CLI中這么寫:
value class Point2D { ... }; // C++/CLI
C++/CLI支持的類型集合代表了CTS與本地設備的綜合,這決定了你的語法選擇,例如:
class native {};
value class V {};
ref class R {};
interface class I {};
CTS也支持與本地列舉類型稍微不同的列舉類類型。當然,對於上述兩者CTS是都支持的。例如:
enum native { fail, pass };
enum class CLIEnum : char { fail, pass};
相似地,CTS支持它本身的數組類型,並且它再一次將其與本地數組在行為上區分開來。同時,微軟再次為這兩種類型提供了支持。
int native[] = { 1,1,2,3,5,8 };
array<int>^ managed = { 1,1,2,3,5,8 };
那種認為一種CLI語言比其他CLI語言在向底層的CTS映射中表現的更出色或更完美都是不確切的,相反,每種不同的CLI語言代表著對CTS底層對象模型的不同理解,在下一節你將更清楚地看到這一點。
CLI的細節
設計一個CLI語言時第二個必須要考慮的問題是將CLI的底層執行模式融入到語言的細節級別。這種語言用於解決什麼問題?這種語言是否有必須的工具來解決這些問題?這種語言可能吸引什麼樣的程序開發人員?
例如,值類型存在於託管堆上,在很多情況下值類型可以看到它們自身的存在。
1、通過隱含的加箱操作,當一個值類型的實例被分配給一個對象或當一個虛擬的方法通過一個值類型來調用;
2、當這個值類型被當作應用引用類類型的成員時;
3、當這個值類型 被當作CLI數組成員時;
需要指出的是,這種情況下開發人員是否被允許操作值類型的地址是CLI語言設計時必須應該予以考慮的問題。
存在的問題
在垃圾收集器掃描緊縮狀態下,位於託管堆上的任何對象非常可能面對重新定位問題。指向對象的指針可以實時跟蹤並修改。開發人員不能自己手動跟蹤,所以,如果你獲許取得一個可能位於託管堆上的值類型的地址時,除了本地指針外,還需要有一個跟蹤形態的指針。
銷售商考慮的是什麼?那就是需要簡單和安全,在語言中直接提供跟蹤一個對象或集合的指針使語言復雜化,沒有這種支持,將減少復雜程度,可資利用的、潛在的程序開發人群可能會增加,此外,准許程序開發人員操作生命短暫的值類型,增加了錯誤產生的可能性,程序開發人員可能有意無意地對內存進行錯誤操作,不支持跟蹤指針,一個潛在的更安全地實時環境產生了。
另一方面,效率和靈活性也是必須考慮的一個問題,每一次向同一個對象分配值類型時,一個全新的數值加箱操作發生了,准許存取加箱值類型允許在內存中進行更新,這可能在性能上產生了一個非常巨大的進步。沒有跟蹤形態的指針,你無法用指針演算法重新聲明一個CLI數組,這意味著CLI數組不能使用標准模板庫進行重新聲明,也不能使用一般的演算法。准許操作加箱數值使設計具有更大地靈活性。
微軟在C++/CLI中選擇地址集合模式來處理託管堆上的值類型。
int ival = 1024;
int^ boxedi = ival;
array<int>^ ia = gcnew array<int>{1,1,2,3,5,8};
interior_ptr<int> begin = &ia[0];
value struct smallInt { int m_ival; ... } si;
pin_ptr<int> ppi = &si.m_ival;
典型地C++/CLI開發人員是一個復雜的系統程序員,承擔著提供下層內部構造和有組織的應用程序的任務,而這些恰恰是未來商業發展的基礎。C++/CLI開發人員必須兼顧可測量性和可執行性,所以必須在系統的高度級上來看待CLI下層結構。CLI細節水平反映了開發人員的臉色。
復雜性本身並不代表對質量的否定,人類比單細胞細菌復雜的多,這當然不是一件壞事,然而,當表達一個簡單的概念變的復雜化後,這常常被認為是一件壞事。在C++/CLI中,CLI開發團隊已經試著提供一種精巧的方法來表達方式一個復雜的事情。
額外增加的功能
第三個設計方面是特定功能性的語言層,它遠遠超過CLI所提供的直接支持,雖然這可能需要在語言層支持和CLI底層執行模式間建立一個映射。但在某些情況下,這恰恰是不可能的,因為語言無法調節CLI的行為。這種情況的例子就是在基類的構造及析構函數中定義虛函數。根據ISO-C++在這種情況下的語言學,需要用每一個基類的構造和虛構函數重新設置虛擬表,而這是不可能的,因為虛擬表句柄是實時管理的,而不是某一個語言來管理。
所以,這個設計方面是在完美性和可行性之間的妥協產物,C++/CLI提供的額外功能主要表現在三個方面:
1、獲取資源的一種形式是對於引用類型的初始化,此外,提供一種自動化工具,用於佔用較少資源、所謂的可確定性自動消亡的垃圾收集類型對象。
2、一種深度拷貝形式的語法與C++拷貝構造函數和拷貝分配操作符相一致,但其並不適用與值類型。
3、除了最初的一般性CLI機制外,還有對於CTS類型的C++模板直接支持。這些是我第一篇文章中討論的主題。此外,還提供了針對CLI類型的可校驗STL版本。
讓我們來看一個簡單的例子,一個確定性消亡問題。在垃圾搜集器重新聲明一塊與對象相關聯的內存之前,一個相關的消亡方法,如果存在的話,將被調用。你可以認為這種方法是超級析構函數,因為它與對象的程序生命期無關。這就叫做終結。終結函數是否調用以及什麼時間調用都沒有明確規定,這就是垃圾收集器的非確定性終結。
在動態內存管理的情況下,非確定性終結工作非常好,當可用內存變的越來越少時,垃圾收集器介入並開始著手解決問題。然而,非決定性終結也有工作不好的時候,當一個對象維護一個重要資源,例如一個資料庫連接、鎖定某些類別、或者可能是本地的堆內存。在這種情況下,只要是不需要,應立即釋放資源。目前CLI所支持的解決問題的方法是,對於一個類通過執行IDisposable介面提供的Dispose方法釋放資源。這里的問題是執行Dispose方法需要一個清晰的聲明,所以它也就不可能存在調用。
最基本的C++中的設計模式是上述的通過初始化來獲取資源,這意味著類使用構造函數來獲取資源,相反,類使用析構函數來釋放資源。這些行為由類對象在生存期內自動管理。
下面是引用類釋放資源時所做的順序動作:
1、 首先使用析構函數來封裝所有與釋放類有關的資源時所必須的代碼;
2、 析構函數自動調用後,結束類對象的生命期。
對於引用類型來說,CLI沒有類析構函數的概念,所以析構函數不得不映射為在底層執行的其它代碼。此時,在內部,編譯器執行以下操作:
1、 類讓其基類列表繼承自IDisposable介面;
2、 析構函數轉換成IDisposable的Dispose方法。
以上實現了目標的一半,一種實現析構造函數自動調用的方法仍然需要,對於引用類型,一種特殊的基於棧的符號得到支持,也就是說,一個對象的生命期與它的聲明範圍有關。在內部,編譯器將符號轉換為在託管堆上分配引用對象。隨著作用域的終結,編譯器插入一個Dispose方法-用戶定義的析構函數。與對象有關的內存的收回在垃圾收集器的控制下得到執行。
C++/CLI並不是將C++拓展到一個託管的世界,更確切的說,它代表一個完全綜合的範例,某種程度上就象當初將泛編程模式和多重繼承綜合進該語言一樣。我認為C++/CLI開發小組做了一項非常卓有成效的工作。
小結
C++/CLI代表託管和本地編程的結合。在反復過程中,這種綜合已經通過源級相對獨立但又相互平等地組件和二進制元素得到了完成,包括混合模式(本地和CTS類型的源級混合,還有一個本地及CLI對象文件的二進制混合),純模式(本地和CTS類型的源代碼級混合,所有的都被編譯為CLI對象文件),本地分類(可以通過一個特定的打包類來保持CTS類型),和CTS分類(可以保持本地類型為指針)。
當然,C++/CLI開發人員也可以單獨使用CLI類型來編程,並通過這種方式來提供伺服狀態下的可校驗代碼,例如可以作為SQL Server2005的一個SQL存儲過程。
現在,還是回到這個問題上來,什麼是C++/CLI?它是進行.NET編程模式的最佳切入點。對於C++/CLI,有一個來自C++的遷移路徑,它不僅包含C++的底層基礎,而且也需要C++編程經驗,對於這些,我感到非常滿意。
C++/CLI(CLI:Common Language Infrastructure)是一門用來代替C++託管擴展(下文使用MC++指代)新的語言規范。重新簡化了C++託管擴展的語法,提供了更好的代碼可讀性。和微軟.NET的其他語言一樣,微軟向ECMA提交了C++/CLI的標准。C++/CLI現在可以在Visual C++ 2005上開發。C++/CLI的部分特性已經申請了專利。
1 語法改變
C++/CLI是一門獨立的語言(比如新的關鍵字),而不是像C++託管擴展一樣是C++的超集 (C++託管擴展有一些不標志的關鍵字如__gc和__value)。所以,C++/CLI對於這些語法有較大的改變,尤其是去除了一些意義不明確的關鍵字,增加了一些.NET的特性.
很多不一致的語法,像MC++的不同版本用法的操作符new()被區分開:在C++/CLI,.NET引用類型的創建要使用新的關鍵字gcnew。並且C++/CLI增加了新的泛型概念(與C++ templates相似,但還是有很大的區別)。
1.1 句柄(Handle)
回到MC++,有兩類指針: 用__nogc標識的指針是傳統意義上的C++指針,而用__gc標識的指針為.NET中的引用。但在C++/CLI里,唯一的指針就是傳統意義上的C++指針,而.NET引用類型使用一個「句柄」來獲取,使用新的語法「類名^」代替了MC++的「類名*」。新的句法使得託管和非託管代碼混合開發更加方便;它指明了對象將會被垃圾回收器自動銷毀還是手動銷毀。
範例代碼:
// C++託管擴展
#using <mscorlib.dll>
using namespace System::Collections;
__gc class referencetype
{
protected:
String* stringVar;
int intArr __gc[];
ArrayList* doubleList;
public:
referencetype(String* str,int* pointer,int number) // 哪個是託管的?
{
doubleList = new ArrayList();
System::Console::WriteLine(str->Trim() + number.ToString());
}
};
// C++/CLI
#using <mscorlib.dll>
using namespace System::Collections::Generic;
ref class referencetype
{
protected:
String^ stringVar;
array<int> intArr;
List<double>^ doubleList;
public:
referencetype(String^ str,int* pointer,int number) // 不會再分不清了吧?
{
doubleList = gcnew List<double>();
System::Console::WriteLine(str->Trim() + number);
}
};
1.2 跟蹤引用(Tracking reference)
C++/CLI里的一個「跟蹤引用」也是一個句柄,但它是傳地址而不是傳值。等同於在C#中加了「ref」關鍵字,或Visual Basic .NET的「ByRef」。C++/CLI使用「^%」語法來定義一個跟蹤引用。與傳統C++中的「*&」語法相似。
下面的示例了「跟蹤引用」的使用。如果把「^%」改成「^」(也就是使用普通的句柄),10個字元串將不會被修改,而只會生成那些字元串的副本,這些都是因為那些引用已經不是傳地址而是傳值。
int main()
{
array<String^>^ arr = gcnew array<String^>(10);
int i = 0;
for each(String^% s in arr)
s = gcnew String(i++.ToString());
return 0;
}
上面的代碼示例了用戶如何用C++/CLI做一些其他.NET語言不能做的事情,比如C#就不允許在foreach循環中這樣做。例如foreach(ref string s in arr)在C#中是非法的。
1.3 析構(Finalizer/Destructor)
C++/CLI的另一個變化就是使用「!類名()」來聲明一個託管類型的「析構方法」(在垃圾回收器回收對象之前的不確定的時間由CLR調用),而原來的「~類名()」是用來定義「傳統的析構函數」(能被用戶自己調用)。另外,下面的例子說明了如何在C++/CLI中託管對象如何自動調用「傳統析構函數」。
在一個典型的.NET程序中(例如直接使用CIL)編程,可以由用戶自己調用的「析構方法」是用實現IDisposable介面,通過編寫Dispose方法來實現顯式釋放資源;而不確定的「析構方法」是通過重載Finalize函數來實現的。
// C++/CLI
ref class MyClass // :IDisposable (編譯器自動實現IDisposable介面)
{
public:
MyClass(); // 構造函數
~MyClass(); // (確定的) 析構函數 (編譯器使用IDisposable.Dispose來實現)
protected:
!MyClass(); // 析構方法 (不確定的) (編譯器通過重載virtual void Finalize來實現)
public:
static void Test()
{
MyClass auto; // 這不是個句柄,它將調用MyClass的默認構造函數
// 使用auto對象
// 函數返回前自動調用auto的析構函數(IDisposable.Dispose,由~MyClass()定義)來釋放資源
// 以上代碼等效於:
MyClass^ user = gcnew MyClass();
try { /* 使用auto對象 */ }
finally { delete user; /* 由編譯器調用auto.Dispose() */ }
}
};
// C#
class MyClass : IDisposable
{
public MyClass() {} // 構造函數
~MyClass() {} // 析構方法 (不確定的) (編譯器通過重載virtual void Finalize來實現),與C++/CLI的!MyClass()等效
public void Dispose() {} // Dispose方法
public static void Test()
{
using(MyClass auto = new MyClass())
{ /* 使用auto對象 */ }
// 因為使用了using句法,編譯器自動調用auto.Dispose()
// 以上代碼等效於:
MyClass user = new MyClass();
try { /* 使用user對象 */ }
finally { user.Dispose(); }
}
}編輯詞條 CLR CLR(公共語言運行庫,Common Language Runtime)和Java虛擬機一樣也是一個運行時環境,它負責資源管理(內存分配和垃圾收集),並保證應用和底層操作系統之間必要的分離。
為了提高平台的可靠性,以及為了達到面向事務的電子商務應用所要求的穩定性級別,CLR還要負責其他一些任務,比如監視程序的運行。按照.NET的說法,在CLR監視之下運行的程序屬於「受管理的」(managed)代碼,而不在CLR之下、直接在裸機上運行的應用或者組件屬於「非受管理的」(unmanaged)的代碼。
CLR將監視形形色色的常見編程錯誤,許多年來這些錯誤一直是軟體故障的主要根源,其中包括:訪問數組元素越界,訪問未分配的內存空間,由於數據體積過大而導致的內存溢出,等等。
然而,這種對受管理代碼的運行監視是有代價的。雖然當前還不可能精確地得到監視程序運行所需要的開銷,但從當前Beta測試版的性能表現來看,正如Microsoft所承認的那樣,我們可以預料由它導致的性能降低程度至少達到10%。當然,如果監視程序運行能夠將穩定性和可用性提高到一個新的檔次,我們可以懷疑10%的性能降低是否還可以稱為一件壞事……
在處理器性能改善方面,摩爾定律已經一再被證明是正確的。既然如此,我們要得到一台性能增加了10%的伺服器要等待多長時間呢、
單片機 匯編 指令:CLR C//C狀態清零單片機 匯編 指令:CLR C//C狀態清零
另有:CLR 公用語言運行時 Common Language Runtime
.NET提供了一個運行時環境,叫做公用語言運行時(Common Language Runtime),是一種多語言執行環境,支持眾多的數據類型和語言特性。他管理著代碼的執行,並使開發過程變得更加簡單。這是一種可操控的執行環境,其功能通過編譯器與其他工具共同展現。
依靠一種以運行時為目標的編譯器開發的代碼叫做可操控代碼。
元數據:為了使運行時環境可以向可操控代碼提供服務,語言編譯器需要產生一種元數據,它將提供在使用語言中的類型、成員、引用的信息。運行時環境使用元數據定位並載入類,在內存中展開對象實例,解決方法調用,產生本地代碼,強制執行安全性,並建立運行時環境的邊界。
可操控執行的含義:對象在執行的過程中完全被運行時環境所控制。運行時環境提供以下服務:自動內存管理、調試支持、增強的安全性及與非可操控性代碼的互操作性。條件:1、選擇以運行時為目標的語言編譯器,如VB、C#;2、在組件的輸出類型中使用CLR要求的語言特性。
CLR生化技術介紹
CLR生物處理技術是我司聯合中山大學基於生物接觸氧化法、UNITANK、CASS處理方法的基礎上並結合我司CLR生物復合菌技術而研發成功的專有技術。CLR生物復合菌是綜合了國內外先進技術,採用高科技手段,將自然水體中有益的微生物,通過特殊的設備分離、提純、培殖馴化、濃縮後配製成高活性、高濃度、多組合的固劑或水劑貯存。CLR生物處理技術是利用環境微生物處理技術組合成的一種高效污水生化處理技術。它由微生物復合菌群及載體等組成,並配與嚴格的供氧量,其主要是通過人工強化技術,將我公司培殖的CLR復合菌群一次性引入到污水處理系統內,系統內設有特殊的CLR-TL生物載體(也稱生物床),便於微生物快速結膜繁衍生存。在一定曝氣供氧條件下生物載體上逐漸形成菌群生物膜,利用其新陳代謝作用吸附、消化、分解污水中的有機污染物,使之轉化為穩定的無害化物質,達到凈化水質的目的。
CLR生化技術主要特點如下:
①、池內單位容積的生物固體量都高於活性污泥法曝氣池及生物濾池,因此,其具有較高的容積負荷,最高可達到2.0 kgCOD/(m3·d);
②、CLR生化池內培養的是我司專有的CLR生物復合菌,處理效果顯著,也不存在污泥膨脹問題,運行管理簡便;
③、CLR生化池由於兼有活性污泥法和生物膜法的特點,因此,單位體積內有較高的微 生物量,使得該工藝具有一定的抗沖擊能力;
④、污泥產量較少。
CLR工藝技術討論區
氧化溝(Qxidation Ditch)稱為連續式反應池(Continuous Loop Reactor),簡稱CLR,最早是由帕斯維爾(A.Psaveer)博士設計,於1954年在荷蘭沃紹本建造並投入使用。之後,相繼成為歐洲、大洋洲、南非和北美洲的一種重要污水處理技術。到目前為止,西方國家已經建造了近1500座氧化溝。七十年代末,氧化溝技術進入我國,並引起環保界的極大興趣。根據氧化溝的處理機理,研究開發了多種型式的氧化溝工藝,如卡魯塞爾(Carroussel)型、奧伯爾(Orbal)型、射流曝氣式、導管式、一體化式等多種形式的氧化溝。
DE型氧化溝
DE型氧化溝是丹麥克魯格公司在間歇運行的氧化溝基礎上發展的一種新型的氧化溝。在運行穩定可靠的前提下,操作更趨靈活方便。DE型氧化溝為雙溝半交替工作式氧化溝系統,具有良好的生物除氮功能。它與D型、T型氧化溝的不同之處是二沉池與氧化溝分開,並有獨立的污泥迴流系統。兩個氧化溝相互連通,串聯運行,交替進水。溝內設雙速曝氣轉刷,高速工作時曝氣充氧,低速工作時只推動水流,基本不充氧,使兩溝交替處於厭氧和好氧狀態,從而達到脫氮的目的。若在DE氧化溝前增設一個缺氧段,可實現生物除磷,形成脫氮除磷的DE型氧化溝工藝。
Carrousel氧化溝是由荷蘭DHV技術咨詢公司在六十年代後期發明的,當時開發這一工藝的主要目的是尋求一種渠道更深、效率更高和機械性能更好的系統設備來改善和彌補當時流行的轉刷式氧化溝的技術特點。
與其它池型氧化溝相比,其最大的特點是採用特殊設計的立式低速表曝機作曝氣設備,由於曝氣設備的不同(區別於其它水平軸式曝氣裝置),使污水在混合曝氣充氧的同時具有泵的局部水力提升作用,使混合液和原水得到徹底的混合。
奧貝爾氧化溝由三個相對獨立的同心橢園形溝道組成,污水由外溝道進入溝內,然後依次進入中間溝道和內溝道,最後經中心島流出,至二次沉澱池。三個環形溝道相對獨立,溶解氧分別控制在0、1、2 mg/l,其中外溝道容積達50%~60%,處於低溶解氧狀態,大部分有機物和氨氮在外溝道氧化和去除。內溝道體積約為10%~20%,維持較高的溶解氧(2mg/l),為出水把關。在各溝道橫跨安裝有不同數量轉碟曝氣機,進行供氧兼有較強的推流攪拌作用。
奧貝爾氧化溝除具備一般氧化溝的優點:流程簡單、抗沖擊負荷能力強、出水水質穩定和易於維護管理。
3.細胞毒性T淋巴細胞 細胞毒性T淋巴細胞(cytotoxic lymphocyte,CTL)是白細胞的亞部,為一種特異T細胞,專門分泌各種細胞因子參與免疫作用。對某些病毒、腫瘤細胞等抗原物質具有殺傷作用,與自然殺傷細胞構成機體抗病毒、抗腫瘤免疫的重要防線。
殺傷機制:
1.釋放穿孔素,顆粒酶殺傷靶細胞。
2.通過Fasl介導靶細胞的凋亡。
作用特點:
1.可連續殺傷靶細胞,具有高效性
2.具有抗原特異性
3.具有自身MHC限制性
Coal-to-liquids(CTL),煤制油,由煤炭氣化生產合成氣、再經費-托合成生產合成油稱之為煤炭間接液化技術。
2.
I. sqlloader 的CTL 文件里 filter怎麼寫
sqlldr userid=lgone/tiger control=a.ctl
LOAD DATA
INFILE 't.dat' // 要導入的文件
// INFILE 'tt.date' // 導入多個文件
// INFILE * // 要導入的內容就在control文件里 下面的BEGINDATA後面就是導入的內容
INTO TABLE table_name // 指定裝入的表
BADFILE 'c:\bad.txt' // 指定壞文件地址
************* 以下是4種裝入表的方式
APPEND // 原先的表有數據 就加在後面
// INSERT // 裝載空表 如果原先的表有數據 sqlloader會停止 默認值
// REPLACE // 原先的表有數據 原先的數據會全部刪除
// TRUNCATE // 指定的內容和replace的相同 會用truncate語句刪除現存數據
************* 指定的TERMINATED可以在表的開頭 也可在表的內部欄位部分
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
// 裝載這種數據: 10,lg,"""lg""","lg,lg"
// 在表中結果: 10 lg "lg" lg,lg
// TERMINATED BY X '09' // 以十六進制格式 '09' 表示的
// TERMINATED BY WRITESPACE // 裝載這種數據: 10 lg lg
TRAILING NULLCOLS ************* 表的欄位沒有對應的值時允許為空
************* 下面是表的欄位
(
col_1 , col_2 ,col_filler FILLER // FILLER 關鍵字 此列的數值不會被裝載
// 如: lg,lg,not 結果 lg lg
)
// 當沒聲明FIELDS TERMINATED BY ',' 時
// (
// col_1 [interger external] TERMINATED BY ',' ,
// col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,
// col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
// )
// 當沒聲明FIELDS TERMINATED BY ','用位置告訴欄位裝載數據
// (
// col_1 position(1:2),
// col_2 position(3:10),
// col_3 position(*:16), // 這個欄位的開始位置在前一欄位的結束位置
// col_4 position(1:16),
// col_5 position(3:10) char(8) // 指定欄位的類型
// )
BEGINDATA // 對應開始的 INFILE * 要導入的內容就在control文件里
10,Sql,what
20,lg,show
=====================================================================================
//////////// 注意begindata後的數值前面不能有空格
1 ***** 普通裝載
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC
)
BEGINDATA
10,Sales,"""USA"""
20,Accounting,"Virginia,USA"
30,Consulting,Virginia
40,Finance,Virginia
50,"Finance","",Virginia // loc 列將為空
60,"Finance",,Virginia // loc 列將為空
2 ***** FIELDS TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x'09' 的情況
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY WHITESPACE
-- FIELDS TERMINATED BY x'09'
(DEPTNO,
DNAME,
LOC
)
BEGINDATA
10 Sales Virginia
3 ***** 指定不裝載那一列
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
( DEPTNO,
FILLER_1 FILLER, // 下面的 "Something Not To Be Loaded" 將不會被裝載
DNAME,
LOC
)
BEGINDATA
20,Something Not To Be Loaded,Accounting,"Virginia,USA"
4 ***** position的列子
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
( DEPTNO position(1:2),
DNAME position(*:16), // 這個欄位的開始位置在前一欄位的結束位置
LOC position(*:29),
ENTIRE_LINE position(1:29)
)
BEGINDATA
10Accounting Virginia,USA
5 ***** 使用函數 日期的一種表達 TRAILING NULLCOLS的使用
LOAD DATA
INFILE *
INTO TABLE DEPT
REPLACE
FIELDS TERMINATED BY ','
TRAILING NULLCOLS // 其實下面的ENTIRE_LINE在BEGINDATA後面的數據中是沒有直接對應
// 的列的值的 如果第一行改為 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了
(DEPTNO,
DNAME "upper(:dname)", // 使用函數
LOC "upper(:loc)",
LAST_UPDATED date 'dd/mm/yyyy', // 日期的一種表達方式 還有'dd-mon-yyyy' 等
ENTIRE_LINE ":deptno:dname:loc:last_updated"
)
BEGINDATA
10,Sales,Virginia,1/5/2000
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/2000
40,Finance,Virginia,15/3/2001
6 ***** 使用自定義的函數 // 解決的時間問題
create or replace
function my_to_date( p_string in varchar2 ) return date
as
type fmtArray is table of varchar2(25);
看看參考下!