显示标签为“Database”的博文。显示所有博文
显示标签为“Database”的博文。显示所有博文

12.19.2007

DB2上机操作指令指南

DB2上机操作指令指南

  1. 启动实例(db2inst1):
  db2start
  2. 停止实例(db2inst1):
  db2stop
  3. 列出所有实例(db2inst1)
  db2ilist
  5.列出当前实例:
  db2 get instance
  4. 察看示例配置文件:
  db2 get dbm cfg|more
  5. 更新数据库管理器参数信息:
  db2 update dbm cfg using para_name para_value
  6. 创建数据库:
  db2 create db test
  7. 察看数据库配置参数信息
  db2 get db cfg for test|more
  8. 更新数据库参数配置信息
  db2 update db cfg for test using para_name para_value
  10.删除数据库:
  db2 drop db test
  11.连接数据库
  db2 connect to test
  11.列出所有表空间的详细信息。
  db2 list tablespaces show detail
  12.列出容器的信息
  db2 list tablespace containers for tbs_id show detail
  13.创建表:
  db2 ceate table tb1(id integer not null,name char(10))
  14.列出所有表
  db2 list tables
  12.插入数据:
  db2 insert into tb1 values(1,’sam’);
  db2 insert into tb2 values(2,’smitty’);
  13.查询数据:
  db2 select * from tb1
  14.数据:
  db2 delete from tb1 where id=1
  15.创建索引:
  db2 create index idx1 on tb1(id);
  16.创建视图:
  db2 create view view1 as select id from tb1
  17.查询视图:
  db2 select * from view1
  18.节点编目
  db2 catalog tcp node node_name remote server_ip server server_port
  19.察看端口号
  db2 get dbm cfg|grep SVCENAME
  20.测试节点的附接
  db2 attach to node_name
  21.察看本地节点
  db2 list node direcotry
  22.节点反编目
  db2 uncatalog node node_name
  23.数据库编目
  db2 catalog db db_name as db_alias at node node_name
  24.察看数据库的编目
  db2 list db directory
  25.连接数据库
  db2 connect to db_alias user user_name using user_password
  26.数据库反编目
  db2 uncatalog db db_alias
  27.导出数据
  db2 export to myfile of ixf messages msg select * from tb1
  28.导入数据
  db2 import from myfile of ixf messages msg replace into tb1
  29.导出数据库的所有表数据
  db2move test export
  30.生成数据库的定义
  db2look -d db_alias -a -e -m -l -x -f -o db2look.sql
  31.创建数据库
  db2 create db test1
  32.生成定义
  db2 -tvf db2look.sql
  33.导入数据库所有的数据
  db2move db_alias import
  34.重组检查
  db2 reorgchk
  35.重组表tb1
  db2 reorg table tb1
  36.更新统计信息
  db2 runstats on table tb1
  37.备份数据库test
  db2 backup db test
  38.恢复数据库test
  db2 restore db test

出自:http://blog.csdn.net/greener2000/
  1. 启动实例(db2inst1):
  db2start
  2. 停止实例(db2inst1):
  db2stop
  3. 列出所有实例(db2inst1)
  db2ilist
  5.列出当前实例:
  db2 get instance
  4. 察看示例配置文件:
  db2 get dbm cfg|more
  5. 更新数据库管理器参数信息:
  db2 update dbm cfg using para_name para_value
  6. 创建数据库:
  db2 create db test
  7. 察看数据库配置参数信息
  db2 get db cfg for test|more
  8. 更新数据库参数配置信息
  db2 update db cfg for test using para_name para_value
  10.删除数据库:
  db2 drop db test
  11.连接数据库
  db2 connect to test
  11.列出所有表空间的详细信息。
  db2 list tablespaces show detail
  12.列出容器的信息
  db2 list tablespace containers for tbs_id show detail
  13.创建表:
  db2 ceate table tb1(id integer not null,name char(10))
  14.列出所有表
  db2 list tables
  12.插入数据:
  db2 insert into tb1 values(1,’sam’);
  db2 insert into tb2 values(2,’smitty’);
  13.查询数据:
  db2 select * from tb1
  14.数据:
  db2 delete from tb1 where id=1
  15.创建索引:
  db2 create index idx1 on tb1(id);
  16.创建视图:
  db2 create view view1 as select id from tb1
  17.查询视图:
  db2 select * from view1
  18.节点编目
  db2 catalog tcp node node_name remote server_ip server server_port
  19.察看端口号
  db2 get dbm cfg|grep SVCENAME
  20.测试节点的附接
  db2 attach to node_name
  21.察看本地节点
  db2 list node direcotry
  22.节点反编目
  db2 uncatalog node node_name
  23.数据库编目
  db2 catalog db db_name as db_alias at node node_name
  24.察看数据库的编目
  db2 list db directory
  25.连接数据库
  db2 connect to db_alias user user_name using user_password
  26.数据库反编目
  db2 uncatalog db db_alias
  27.导出数据
  db2 export to myfile of ixf messages msg select * from tb1
  28.导入数据
  db2 import from myfile of ixf messages msg replace into tb1
  29.导出数据库的所有表数据
  db2move test export
  30.生成数据库的定义
  db2look -d db_alias -a -e -m -l -x -f -o db2look.sql
  31.创建数据库
  db2 create db test1
  32.生成定义
  db2 -tvf db2look.sql
  33.导入数据库所有的数据
  db2move db_alias import
  34.重组检查
  db2 reorgchk
  35.重组表tb1
  db2 reorg table tb1
  36.更新统计信息
  db2 runstats on table tb1
  37.备份数据库test
  db2 backup db test
  38.恢复数据库test
  db2 restore db test

出自:http://blog.csdn.net/greener2000/

12.13.2007

关于表约束constraint

关于表约束constraint
===========================================================
作者: xsb(http://xsb.itpub.net)
发表于:2005.08.19 09:18
分类: Oracle
出处:http://xsb.itpub.net/post/419/38481
---------------------------------------------------------------
可以使用disable,enable novalidate,enable validate选项。
可用于检查历史数据是否违反某种业务规则,并找出这些记录!

CREATE TABLE t1 (c1 NUMBER,c2 NUMBER);
INSERT INTO t1 VALUES (1,2);
INSERT INTO t1 VALUES (1,20);
COMMIT;
SELECT * FROM t1;
alter table T1
add constraint ck_t1
check (c2 BETWEEN 18 and 80)
ENABLE novalidate;
create table exceptions(row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
ALTER TABLE t1 ENABLE Validate CONSTRAINT ck_t1
EXCEPTIONS INTO EXCEPTIONS;
SELECT *
FROM T1
WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS WHERE TABLE_NAME = 'T1')
FOR UPDATE;
TRUNCATE TABLE EXCEPTIONS;
------------------------------------------------------------------------------------------------

constraints 三个需要注意的地方

Ref: http://spaces.msn.com/sunmoonking/
工作许多年,一直没有看重CONSTRINTS的作用,除了用CHECK,NOT NULL,INDEX,等,其他的一般也就看看就过去了。最近把零散的知识整理一下,才发现CONSTRAINTS发展15年来的成熟与重要。
ORACLE提供了众多的constraint,如果没有充分利用这些constraints,那么也就是没有充分利用关系型数据库。如果能了解各种 constraint的各种参数,那么就能减少locking的时间,减少constraint检验数据的时间,减少影响其他应用的时间。
CONSTRAINTS:就是让数据满足某些规则。
CONSTRAINTS TYPE: NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
CONSTRAINTS 不但可以建立在TABLE上,也可以建立在VIEW上,
CONSTRAINTS 的状态:ENABLED/DISABLED
VALIDATED/NOVALIDATED
DEFERRABLE/NON-DEFERRABLE
DEFERRED/IMMEDIATE
RELY/NORELY
constraint只能被difered如果最初定义时是deferrable
view的constraints必须被设置成disabled,novalidated或rely
1. deferrable
一个constraint如果被定义成deferrable那么这个constraints可以在deferred和imediate两种状态相互转换。 deferred只在transaction中有效,也就是只可以在transaction过程中使constraint失效,但如果 transaction commit的话,transaction会变成immediate。

1* create table cons_parent (id number(10),name varchar2(10))
SQL> /
Table created.
SQL> create table cons_child (id number(10),name varchar2(10));
Table created.
1* alter table cons_parent add primary key (id)
SQL> /
Table altered.
alter table cons_child add constraints chi_fk_par foreign key (id)
references cons_parent(id)
SQL> alter table cons_child add constraints chi_fk_par foreign key (id)
2 references cons_parent(id)
3 /
Table altered.
一个constraints默认是NOT DEFERRABLE的。
1 select constraint_name||' '||deferrable from all_constraints
2* where constraint_name='CHI_FK_PAR'
SQL> /
CONSTRAINT_NAME||''||DEFERRABLE
---------------------------------------------
CHI_FK_PAR NOT DEFERRABLE
NOT DEFERRABLE的不能在deferred和imediate两种状态相互转换
SQL> set constraints chi_fk_par deferred;
SET constraints chi_fk_par deferred
*
ERROR at line 1:
ORA-02447: cannot defer a constraint that is not deferrable
SQL> alter table cons_child drop constraints chi_fk_par;
Table altered.
1 alter table cons_child add constraints chi_fk_par foreign key (id)
2* references cons_parent(id) deferrable
SQL> /
Table altered.
1 select constraint_name||' '||deferrable from all_constraints
2* where constraint_name='CHI_FK_PAR'
SQL> /
CONSTRAINT_NAME||''||DEFERRABLE
---------------------------------------------
CHI_FK_PAR DEFERRABLE
一个constraint如果被定义成deferrable那么这个constraints可以在deferred和imediate两种状态相互转换
SQL> set constraints chi_fk_par immediate;

Constraint set.

1* insert into cons_child values (2,'llll')
SQL> /
insert into cons_child values (2,'llll')
*
ERROR at line 1:
ORA-02291: integrity constraint (SYSTEM.CHI_FK_PAR) violated - parent key not found

SQL> set constraints chi_fk_par deferred;

Constraint set.

SQL> insert into cons_child values (2,'llll');

1 row created.

SQL> set constraints chi_fk_par immediate;
SET constraints chi_fk_par immediate
*
ERROR at line 1:
ORA-02291: integrity constraint (SYSTEM.CHI_FK_PAR) violated - parent key not found

deferred只在transaction中有效,也就是只可以在transaction过程中使constraint失效,但如果transaction commit的话,transaction会变成immediate。

SQL> commit;
commit
*
ERROR at line 1:
ORA-02091: transaction rolled back
ORA-02291: integrity constraint (SYSTEM.CHI_FK_PAR) violated - parent key not found
deferrable会影响CBO的计划,并且正常情况下没有应用的必要,所以建议不要修改,而用系统默认的non deferrable

2. enable/disable validate/novalidate

enable/disable对未来的数据有约束/无约束。

validate/novalidate对已有的数据有约束/无约束。

如果加约束到一个大表,那么ORACLE会LOCK这个表,然后SCAN所有数据,来判断是否符合CONSTRAINT的要求,在繁忙的系统里显然是不合适的。所以用enable novalidate比较合适,因为ORACLE仅仅会LOCK表一小段时间来建立CONSTRAINT,当CONSTRAINT建立后再 VALIDATE,这时检验数据是不会LOCK表的。

这方面很多书上都有例子,就不在这里累述了

3.REFERENCE 让人疑惑的地方

1* create table wwm_father (id number,name varchar2(10),primary key (id,name))
SQL> /

Table created.

SQL> create table wwm_child (id number,name varchar2(10),
2 foreign key (id,name) references wwm_father on delete set null);

Table created.

SQL> insert into wwm_father values (6,'wwm');

1 row created.

SQL> insret into wwm_child values (6,'fff');
SP2-0734: unknown command beginning "insret int..." - rest of line ignored.


可以看出,REFERENCE是起作用的。但下面就有点让人疑惑了,似乎ORACLE不用该用这种策略来做,

SQL> insert into wwm_child values (6,null);
1 row created.

SQL> insert into wwm_child values(null,'lll');

1 row created.

1* insert into wwm_child values (null,null)
SQL> /

1 row created.
SQL> select * from wwm_father;

ID NAME
---------- --------------------
6 wwm

SQL> select * from wwm_child;

ID NAME
---------- --------------------
6
lll


SQL> select count(*) from wwm_child;

COUNT(*)
----------
3

可见,如果向CHILD表插入NULL的话,ORACLE默认认为NULL是匹配FATHER表里相关的REFERENCE的字段内容的。因此FOREIGN KEY的COLUMN大家就需要认真考虑是否要设置成NOT NULL了

12.11.2007

Ubuntu feisty + Tomcat 5.5 + mysql 5.0.26 遠端 jdbc 登入

Ubuntu feisty + Tomcat 5.5 + mysql 5.0.26 遠端 jdbc 登入

1. 首先在mysql中你要先有一個帳號是可以從任何host登入的,如最常見的

root@% 或 root@

也可以自己新增,別忘了設密碼!不然你的資料庫就可以給人亂搞了。

2. 修改mysql使其可接受遠端登入,首先開啟mysql設定檔

sudo gedit /etc/mysql/my.cnf

然後搜尋"bind-address"開頭的那行,在前面把它註解掉

#bind-address 127.0.0.1

記得重新啟動mysql才會載入新設定

sudo /etc/init.d/mysql restart

3. 在/usr/share/tomcat5.5/common/lib目錄中,放入mysql的jdbc connector(driver) jar檔

mysql-connector-java-5.0.7-bin.jar

4. 修改tomcat使其能接受jdbc透過自己擁有的IP或domain名稱連線(例如no-ip提供的定址服務)

sudo gedit /etc/tomcat5.5/policy.d/04webapps.policy

自己在裡面加上一行(大小寫符號要正確)紫色部份代表要用自己的設定替換!

permission java.net.SocketPermission "yourHostAddress", "connect, resolve";

記得重啟tomcat才會載入新設定

sudo /etc/init.d/tomcat5.5 restart

5. 現在準備工作已經完成,只要在你的應用程式或jsp網頁正確設定driver名稱、URL、使用者名稱跟密碼即可進行jdbc連線

Driver - com.mysql.jdbc.Driver
URL - jdbc:mysql://yourHostAddress:mysqlport/databasename
UserName - yourRemoteConnectableMysqlAccount
Password - **************

6. 使用愉快!網路上一堆說明都很不完整…找超久==

database.properties实例

1. DataBase.properties的内容
2.
3.
4. driver=com.mysql.jdbc.Driver
5. url=jdbc:mysql://127.0.0.1:3306/jpetstore
6. username=root
7. password=dongguoh
8.
9. DataBase.xml的内容
10.
11.
12.
13.
14. PropertiesTest
15. "driver">com.mysql.jdbc.Driver
16. "url">jdbc:mysql://127.0.0.1:3306/jpetstore
17. "username">root
18. "password">dongguoh
19.
20.
21. 下面是测试类
22.
23. package DataBase;
24. import java.io.FileInputStream;
25. import java.io.FileNotFoundException;
26. import java.io.IOException;
27. import java.util.Iterator;
28. import java.util.Properties;
29. import java.util.Set;
30.
31.
32. public class TestProperties {
33.
34. public static void main(String[] args) {
35. TestProperties test=new TestProperties();
36. test.luanch();
37. test.luanchXML();
38.
39. }
40. private void luanch(){
41. Properties ppt=new Properties();
42. try {
43. String path=this.getClass().getResource("/").getPath();
44. path=path+"DataBase/DataBase.properties";
45. FileInputStream fis=new FileInputStream(path);
46. ppt.load(fis);
47. fis.close();
48. Set set=ppt.keySet();
49. Iterator it=set.iterator();
50. System.out.println("*********显示的读取DataBase.properties显示的内容*****");
51. while(it.hasNext()){
52. String id=(String)it.next();
53. System.out.println(id+"="+ppt.getProperty(id));
54. }
55.
56. System.out.println("另外一种显示方式");
57. ppt.list(System.out);
58. } catch (FileNotFoundException e) {
59. System.out.println("找不到DataBase.properties这个文件,或者是路径发生错误");
60. } catch (IOException e) {
61. System.out.println("加载DataBase.properties文件时出错!!");
62. }
63. }
64. private void luanchXML(){
65. Properties ppt=new Properties();
66. try {
67. String path=this.getClass().getResource("/").getPath();
68. path=path+"DataBase/DataBase.xml";
69. System.out.println(path);
70. FileInputStream fis=new FileInputStream(path);
71. ppt.loadFromXML(fis);
72. fis.close();
73. Set set=ppt.keySet();
74. Iterator it=set.iterator();
75. System.out.println("*********显示的读取DataBase.xml 显示的内容*****");
76. while(it.hasNext()){
77. String id=(String)it.next();
78. System.out.println(id+"="+ppt.getProperty(id));
79. }
80. } catch (FileNotFoundException e) {
81. System.out.println("找不到DataBase.xml 这个文件,或者是路径发生错误");
82. } catch (IOException e) {
83. System.out.println("加载DataBase.xml 文件时出错!!");
84. }
85. }
86.
87. }
88.
89.
90.
91. 结果:
92.
93. *********显示的读取DataBase.properties显示的内容*****
94. password=dongguoh
95. url=jdbc:mysql://127.0.0.1:3306/jpetstore
96. driver=com.mysql.jdbc.Driver
97. username=root
98. 另外一种显示方式
99. -- listing properties --
100. url=jdbc:mysql://127.0.0.1:3306/jpetstore
101. password=dongguoh
102. driver=com.mysql.jdbc.Driver
103. username=root
104. /E:/MyJavaProject/Ibatis/WebRoot/WEB-INF/classes/DataBase/DataBase.xml
105. *********显示的读取DataBase.xml 显示的内容*****
106. password=dongguoh
107. url=jdbc:mysql://127.0.0.1:3306/jpetstore
108. driver=com.mysql.jdbc.Driver
109. username=root
110.