记一次测试环境准备
公司A系统,C/S架构,有一个数据迁移项目,需要准备一个只有配置没有数据的空环境。A系统自带工具可以准备空环境并进行两个环境的配置信息对比,并更新还是挺方便的。但是在更新配置的过程中,发现目前生产上的一项配置无法更新到测试环境,提示字段长度不够。这就怪了按理说应该都是一样的啊。细查之后发现确实不一样,生产环境该字段是char(32 char),而测试环境是char(32)。关于这两个的区别可以参看这篇博文。
为了使测试环境跟生成环境一致就需要将所有char字段的设置为char长度类型,所有varchar2字段的也设置为char长度类型。网上找了一个脚本,地址点我。脚本也粘贴如下:
1 create or replace procedure modifychartovarchar is -- 2 3 cursor c1 is 4 select t.TABLE_NAME, t.COLUMN_NAME, t.DATA_LENGTH 5 from all_tab_columns t 6 where t.OWNER = 'LANDUSER' and t.DATA_TYPE = 'CHAR' and 7 t.TABLE_NAME in (select at.table_name from all_tables at); 8 PTABLE_NAME varchar2(100); 9 pCOLUMN_NAME varchar2(100); 10 sqlstr varchar2(200); 11 Dl integer; 12 begin 13 14 --by 闫磊 Email:Landgis@126.com,yanleigis@21cn.com 2006.10.11 15 16 17 open c1; 18 fetch c1 19 into PTABLE_NAME, pCOLUMN_NAME, Dl; 20 while c1%found loop 21 sqlstr := 'alter table ' || PTABLE_NAME || ' modify ' || pCOLUMN_NAME || 22 ' varchar2(' || Dl || ' char' || ')'; 23 dbms_output.put_line(sqlstr); 24 execute immediate sqlstr; 25 sqlstr := 'update ' || PTABLE_NAME || ' set ' || pCOLUMN_NAME || 26 '=trim(' || pCOLUMN_NAME || ')'; 27 dbms_output.put_line(sqlstr); 28 execute immediate sqlstr; 29 30 fetch c1 31 into PTABLE_NAME, pCOLUMN_NAME, Dl; 32 33 end loop; 34 commit; 35 close c1; 36 end;
下面记录一下测试环境准备步骤:
1、创建一个user;
2、赋予cnu_environment表的select权限;
3、在A系统客户端安装目录的setup文件夹下设置初始用户信息;
4、打开A系统的管理台,创建基础数据库表;
5、通过上述脚本将char和varchar2类型的长度都改为给予char的;
6、创建索引、view、contrains等;
7、创建Base data;
8、找生产系统,跟这个新的测试环境进行配置对比,并将不同更新到测试环境;
大功告成。