|
用户名:qilong007 笔名:qilong007 地区: 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
总结一下,既往开来
呀,快工作一年了,学到了许多东西,谈不上什么大的收获,又在我的人生阅历上填上了浓浓的一笔,朱自清在一篇散文中说,这时间,你想拦住他的时候,它就从你的手指缝里过去了,虽然我还年轻,但这财富,如果不懂得珍惜的话,会迟早一天天被我花光的.MICHAEL经常说他自己:自己有几两重,心里清楚.我真的很佩服他自己时时提醒自己的这种精神.有很多东西值得向他学习.在快工作一周年来临之际,好好的反省自己,好好的向别人学习,这永远是都是上进的精神,不管别人怎么说,我都要以一种乐观向上的精神,好好的努力,其实工作以来,也是有很多收获的.
1:有了自己的工作经历,希望能从中吸取经验教训,有失败的,也有成功的,
2:和自己的女朋友的感情更深了一步,感情的进步是我工作成功的关键
3:有了属于自己的IBM笔记本,他们说IBM的T系列是高层人士的专用笔记本,我已经拥有了,我希望的精神财富和物质财富都与日俱增.
另外感谢我喜欢的论坛VCHELP给我家一般的温暖,是我成才的乐园
与RMAN备份有关的优化
Linux Unicode 编程
作为一个计算机的多字节字符表示系统,Unicode 支持世界上所有语言的编码和转换。这篇文章说明了 Linux 应用程序中的国际语言支持的重要性,以及设计 Unicode 支持并将之结合到 Linux 应用程序中去的思想。
Unicode 并不只是一个编程工具,它还是一个政治的、经济的工具。没有结合世界的语言支持的应用程序通常只能被那些能读写 ASCII 所支持语言的个人使用。这使得建立在 ASCII 基础之上的计算机技术脱离了世界上大部分人。Unicode 允许程序使用世界上任何一种字符集,因此它支持所有语言。
Unicode 让程序员为普通人提供用他们本国语言就能使用的软件。这样就不用再学一门外语了,而且更容易实现计算机技术社会和财政上的利益。很容易设想,如果用户必须为使用因特网浏览器而学习乌尔都语的话,您就难以看到计算机在美国的使用。Web 就更不会出现了。
Linux 承担了对 Unicode 很大程度上的支持。Unicode 支持被嵌入到内核和代码开发库中。在很大程度上,使用程序中几句简单的命令就能将它们自动的结合到代码中。
所有现代字符集的基础都是在 1968 年以 ANSIX3.4 版本出版的美国信息交换标准码(American Standard Code for Information Interchange,ASCII)。一个值得注意的例外是在 ASCII 之前定义的 IBM 的扩充的二进制编码的十进制交换码(Extended Binary Coded Decimal Information Code,EBCDIC)。ASCII 是一个编码字符集(coded character set,CCS),换句话说,它是整数到字符表示的映射。ASCII 编码字符集允许用一个八位(基于二进制的,用值 0 或 1 表示的)字段或字节(2^8 =256)表示 256 个字符。这是一个高度受限的编码字符集,它不能表示许多不同语言的所有字符(如中文和日文),不能表示科学符号,更不能表示古代文字(神秘符号和象形文字)和音乐符号。通过更改一个字节的长度而使更大的字符集得以被编码,这似乎有效但完全不切实际。所有的计算机都基于八位字节。解决方法是一种字符编码方案(Character encoding scheme,CES)— 用定长或变长的多字节序列能够表示比 256 大的数.这些数值接着通过编码字符集被映射到它们表示的字符。
Unicode 的定义
Unicode 通常用作涉及双字节字符编码方案的通用术语。Unicode CCS 3.1 的官方称谓是 ISO10646-1 通用多八字节编码字符集(Universal Multiple Octet Coded Character Set,UCS)。Unicode 3.1 版本添加了 44,946 个新的编码字符。算上 Unicode 3.0 版本已经存在的 49,194 个字符,共计 94,140 个。
Unicode 编码字符集利用了一个由 128 个三维的组构成的四维编码空间。其中每个组包含 256 个二维平面。每个平面由 256 个一维的行组成,并且每个行有 256 个单元。每个单元在这个编码空间内对一个字符编码,或者被声明为未经使用。这种编码概念被称为 UCS-4;四个八位元用来表示指定组、平面、行和单元的每个字符。
第一个平面(第 00 组的第 00 平面)是基本多语言平面(Basic Multilingual Plane,BMP)。BMP 按字母、音节、表意符号和各种符号及数字定义了常规使用的字符。后续的平面用于附加字符或其它还没有发明的编码实体。我们需要这完整的范围去处理世界上的所有语言;特别是拥有将近 64,000 个字符的一些东亚语言。
BMP 被用作双字节的编码字符集,这种编码字符集确定为 ISO 10646 UCS-2 格式。ISO 10646 UCS-2 就是指 Unicode(并且两者相同)。BMP,像所有 UCS 平面那样,包含了 256 行,其中每行包含 256 个单元,字符仅仅按照 BMP 中的行和单元的八位元在单元中被编码。 这就允许 16 位编码字符能够被用来书写大多数商业上最重要的语言。UCS-2 不需要代码页切换、代码扩展或代码状态。UCS-2 是一种将 Unicode 结合到软件中的简单方法,但它只限于支持 Unicode BMP。
若要用 8 位字节表示一个多于 2^8 =256 个字符的字符编码系统(character coding system,CCS),就需要一种字符编码方案(character-encoding scheme,CES)。
Unicode 转换
在 UNIX 中,使用得最多的字符编码方案是 UTF-8。 它考虑到了对整个 Unicode 全部页和平面的全面支持,而且它仍能正确的识别 ASCII。除了 UTF-8 的其他选择还有:UCS-4、UTF-16、UTF-7.5、UTF-7、SCSU、HTML 和 JAVA。
Unicode 转换格式(Unicode Transformation Formats,UTFs)是一种通过映射多字节编码中的值来支持 Unicode 的字符编码方案。本文将分析最流行的格式 — UTF-8 字符编码系统。
UTF-8
UTF-8 转换格式正逐步成为一种占主导地位的交换国际文本信息的方法,因为它可以支持世界上所有的语言,而且它还与 ASCII 兼容。UTF-8 使用变长编码。从 0 到 0x7f(127)的字符把自身编码成单字节,而将值更大的字符编码成 2 到 6 个字节。
表 1. UTF-8 编码
| 0x00000000 - 0x0000007F: | 0xxxxxxx | |
| 0x00000080 - 0x000007FF: | 110xxxxx 10xxxxxx | |
| 0x00000800 - 0x0000FFFF: | 1110xxxx 10xxxxxx 10xxxxxx | |
| 0x00010000 - 0x001FFFFF: | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | |
| 0x00200000 - 0x03FFFFFF: | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | |
| 0x04000000 - 0x7FFFFFFF: | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
字节 10xxxxxx 是一个扩展字节,它的 xxxxxx 位位置被以二进制表示的字符代码号的位所填充。这是能够代表被使用代码的最短的可能的多字节序列。
UTF-8 编码示例
Unicode 字符版权标记字符 0xA9 = 1010 1001 用 UTF-8 编码如下所示:
11000010 10101001 = 0xC2 0xA9
"不等于"符号字符 0x2260 = 0010 0010 0110 0000 编码如下所示:
11100010 10001001 10100000 = 0xE2 0x89 0xA0
通过获取 continuation byte 的值可以看到原始数据:
[1110]0010 [10]001001 [10]100000
0010 001001 100000
0010 0010 0110 0000 = 0x2260
第一个字节定义后面紧跟的八位元数,如果是 7F 或更小,这就是等价的 ASCII 值。每个八位字节以 10xxxxxx 开头,确保字节不与 ASCII 的值混淆。
UTF 支持
在 Linux 平台上使用 UTF-8 之前,请确信分发包里有 glibc 2.2 和 XFree86 4.0 或更新的版本。早先的版本缺少 UTF-8 语言环境支持和 ISO10646-1 X11 字体。
在 UTF-8 发布之前,Linux 用户使用各种不同特定语言的扩展 ASCII,像欧洲用户用 ISO 8859-1 或 ISO 8859-2,希腊用户使用 ISO 8859-7,俄罗斯用户使用 KOI-8 / ISO 8859-5/CP1251(西里尔字母)。这使得数据交换出现了很多问题,并且需要为这些编码之间的差异编写应用软件。这种语言支持是不完善的,而且数据交换没有经过测试。Linux 主要的发行商和应用程序开发者正致力于让主要以 UTF-8 格式表示的 Unicode 成为 Linux 中的标准。
为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符开头。这作为一个"特征符"或"字节顺序标记(byte-order mark,BOM)"来识别文件中使用的编码和字节顺序。但是,Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。在 POSIX 系统中,选中的语言环境识别了在一个过程中的所有输入输出文件期望的编码形式。
有两种方法可以将 UTF-8 支持添加到 Linux 应用程序中。第一种方法,数据都以 UTF-8 形式存放在各处,这样软件改动很少(被动的)。另一种方法,被读取的 UTF-8 数据用标准的 C 语言库函数转变成为宽字符数组(转换的)。在输出时,用函数 wcsrtombs() 使字符串被转变回 UTF-8:
清单 1. wcsrtombs()#include <wchar.h> size_t wcsrtombs (char *dest, const wchar_t **src, size_t len, mbstate_t *ps); |
方法的选择取决于应用程序的性质。大多数应用程序可以使用被动的方法操作。这就是在 UNIX 平台上使用 UTF-8 会如此流行的原因。像 cat 和 echo 那样的程序就不需要修改。字节流仍只是字节流,并没有对它进行任何处理。ASCII 字符和控制代码在 UTF-8 语言环境中不改变。
通过字节计数对字符进行计数的程序需要一些小小的改动。在 UTF-8 中应用程序不对任何扩展的字节进行计数。如果选择了 UTF-8 语言环境,C 语言库的 strlen(s) 函数需要用 mbstowcs() 函数来代替:
清单 2. mbstowcs() 函数#include <stdlib.h> size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n); |
strlen 的一种常见用法是估算显示宽度。中文和其它表意符号将占用两列位置。 wcwidth() 函数用来测试每个字符的显示宽度:
清单 3. wcwidth() 函数#include <wchar.h> int wcwidth(wchar_t wc); |
Unicode 的 C 语言支持
在正式情况下,从 GNU glibc 2.2 开始,wchar_t 类型只为 32 位的 ISO 10646 格式数值所特定使用,与当前使用的语言环境无关。通过 ISO C99 所要求的 __STDC_ISO_10646__ 宏的定义作为信号通知应用程序。 __STDC_ISO_10646__ 的定义用来指出 wchar_t 是 Unicode。精确的值是一个十进制的 yyyymmL 格式的常数。例如,使用:
#define __STDC_ISO_10646__ 200104L |
是为指出 wchar_t 类型的值是由 ISO/IEC 10646 和到指定的年月为止的所有修正与技术勘误定义的字符编码表示。
对 wchar_t 的利用如这个示例所示,使用宏确定在 ISO C99 可移植代码中写双引号的方法。
清单 5. 确定写双引号的方法#if __STDC_ISO_10646__
printf("%lc", 0x201c);
#else
putchar('"');
#fi
|
语言环境
激活 UTF-8 的恰当的办法是 POSIX 语言环境机制。语言环境是一种包含有关软件行为特定文化约定的配置设定。它包含了字符编码、日期/时间符号、分类规则以及度量系统。语言环境的名称通常由 ISO 639-1 语言、ISO 3166-1 国家或地区代码以及可选的编码名称和其它限定符组成。您可以用命令 locale -a 获取所有安装在系统上的语言环境列表(通常在 /usr/lib/locale/)。
如果没有预安装 UTF-8 语言环境,你可以用 localedef 命令生成它。若要为某个特定用户生成并激活一个德语的 UTF-8 语言环境,请使用如下语句:
清单 6. 为特定用户生成语言环境localedef -v -c -i de_DE -f UTF-8 $HOME/local/locale/de_DE.UTF-8 export LOCPATH=$HOME/local/locale export LANG=de_DE.UTF-8 |
有时候为所有用户添加 UTF-8 语言环境会很有用。root 用户使用如下指令就可以完成:
清单 7. 为每个用户生成语言环境localedef -v -c -i de_DE -f UTF-8 /usr/share/locale/de_DE.UTF-8 |
若要为每个用户将这个语言环境设为缺省值,可以将以下行添加到 /etc/profile 文件中:
清单 8. 为所有用户设置缺省的语言环境export LANG=de_DE.UTF-8 |
处理多字节字符代码序列的函数行为依赖于当前语言环境的 LC_CTYPE 类别;它确定了依赖语言环境的多字节编码。值 LANG=de_DE(德语)会导致输出按 ISO 8859-1 被格式化。值 LANG=de_DE.UTF-8 会把输出格式化成 UTF-8。语言环境设置会导致 printf 中的 %ls 格式说明符调用 wcsrtombs() 函数以便于将宽字符的参数字符串转换成依赖语言环境的多字节编码。语言环境中的国家或地区标识符如:LC_CTYPE= en_GB (英国英语)和 LC_CTYPE= en_AU(澳大利亚英语),它们之间的差异只在 LC_MONETARY 类别中,原因在于货币的名称和打印货币数量的规则不同。
请给您首选的语言环境设置环境变量 LANG。当一个 C 程序执行 setlocale() 函数时:
清单 9. setlocale() 函数#include <stdio.h>
#include <locale.h>
//char *setlocale(int category, const char *locale);
int main()
{
if (!setlocale(LC_CTYPE, ""))
{
fprintf(stderr, "Locale not specified. Check LANG, LC_CTYPE, LC_ALL.
");
return 1;
}
|
C 语言库将会依次测试环境变量 LC_ALL、LC_CTYPE 和 LANG。其中第一个含值的环境变量将决定为 LC_CTYPE 类别装入哪种语言环境数据。语言环境数据分裂成独立的类别。值 LC_CTYPE 定义了字符编码,而 LC_COLLATE 定义了排序顺序。我们用 LANG 环境变量为所有类别设置缺省语言环境,但 LC_* 变量可以用来覆盖单个类别。
您可以用命令 locale charmap 查询当前语言环境中字符编码的名称。如果您从 LC_CTYPE 类别中成功选取了 UTF-8 语言环境,会输出 UTF-8。命令 locale -m 提供一张已安装的所有字符编码名称的列表。
如果您使用专门的 C 语言库的多字节函数来完成所有外部字符编码和内部使用的 wchar_t 编码之间的转换,那么 C 语言库将承担责任,根据 LC_CTYPE 使用正确的编码方式。这甚至不需要程序被明确的编码成当前的多字节编码。
如果需要一个应用程序能明确的支持 UTF-8(或其它编码)转换方法而不用 libc 多字节函数,则应用程序必须确定是否需要激活 UTF-8 模式。带有 <langinfo.h> 库头文件的与 X/Open 兼容系统可以用如下代码:
清单 10. 检测当前的语言环境是否使用了 UTF-8 编码BOOL utf8_mode = FALSE; if( ! strcmp(nl_langinfo(CODESET), "UTF-8") utf8_mode = TRUE; |
为检测当前语言环境是否使用了 UTF-8 编码。首先必须调用 setlocale(LC_CTYPE, "") 函数,依据环境变量设置语言环境。nl_langinfo(CODESET) 函数也是由 locale charmap 命令调用,从而查找当前语言环境指定的编码名称。
另一种可以使用的方法是查询语言环境变量:
清单 11. 查询语言环境变量char *s;
BOOL utf8_mode = FALSE;
if ((s = getenv("LC_ALL")) || (s = getenv("LC_CTYPE")) || (s = getenv ("LANG")))
{
if (strstr(s, "UTF-8"))
utf8_mode = TRUE;
}
|
这项测试假设 UTF-8 语言环境名称中有值"UTF-8",但实际情况并不总是如此,所以应该使用 nl_langinfo() 方法。
总结
为支持世界上的所有语言,需要一种具有八位字节字符编码策略的字符编码系统,它的字符应多于 ASCII(一种使用无符号字节的扩展版本)的 2^8 = 256 个字符。Unicode 就是这样一种字符编码系统,它具有由 128 个三维组(带有由大量字符编码方案的方法支持的 94,140 个定义好的字符值)组成的四维编码空间,在 Linux 中更流行的字符编码方案是 Unicode 转换格式 UTF-8。
RMAN中自动删除解决方案
rman $target $catalog msglog $delete_log cmdfile $cmdfile
定期把oracle表内容导出成文本
创建镜像备用数据库(翻译)
MySQL数据导入导出方法与工具介绍(2-import from sql files) davidullua(原作)
ORACLE 备份&恢复
一、8i EXP常用选项
1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:
exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。
一、8i EXP常用选项
1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:
exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。
需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。
如果你真想使用EXP直接到磁带,你可以参考Metalink文章"EXPORTING TO TAPE ON UNIX SYSTEMS"(文档号:30428.1),该文中有详细解释。
4、COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。
5、如何使用SYSDBA执行EXP/IMP?
这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:
exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n [u1]
6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义:
exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"
如果是windows平台,则使用下面的格式:
exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""
二、8i IMP常用选项
1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。
2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。
另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。
三、Oracle9i EXP功能描述
Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:
1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。
2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。
3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。
4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。
5、TEMPLATE - 用于支持iAS。
6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。
四、不同版本的EXP/IMP问题?
一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:
1、在高版本数据库上运行底版本的catexp.sql;
2、使用低版本的EXP来导出高版本的数据;
3、使用低版本的IMP将数据库导入到底版本数据库中;
4、在高版本数据库上重新运行高版本的catexp.sql脚本。
但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误:
EXP-00008: ORACLE error %lu encountered
ORA-00904: invalid column name
这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261722,你可以到METALINK上去查看有关此BUG的详细信息。
BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。
CREATE OR REPLACE view exu81rls
(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')
|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')
|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')
|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),
r.check_opt, r.enable_flag,
DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
from user$ u, obj$ o, rls$ r
where u.user# = o.owner#
and r.obj# = o.obj#
and (uid = 0 or
uid = o.owner# or
exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')
)
/
grant select on sys.exu81rls to public;
/
五、其他问题
本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X中,除了QUERY参数不能用外,其它差别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少,gototop不打算在此做详细解释了,如果读者朋友有需求,你可以参考Metalink文档:"Overview of Export and Import in Oracle7"(文档号:61949.1)。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。
另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。
[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.
[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.
在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度,可以在IMP的时候不建索引,这样只要内存允许,可以多跑几个,然后是SQL脚本创建需要的索引。[u1]带rows参数时只导出数据库结构,数据不导出
[u1]带rows参数时只导出数据库结构,数据不导出
向2004回头
还记着去年的这个时候,MM要参加考研 ,非要拉着我让我陪她去,那天天气特别的冷,还刮着点风,可以想象站在考场外一直到中午:其实也怪我,也是自己主动提出这个建议的,有一次MM生气,便对她说:"考研的时候,我陪你,祝你超常发挥!",MM一脸晴天的说"真的?!",我使劲点点头。MM开心的笑了。可那时站在考场外我,心里确暗暗下决心,下午一定回去,说服她。考完后,MM一脸开心的样子,说考场上怎么怎么样,我在下边应着,不敢破坏MM的心情,然后我说"今天的天气特别地冷,在外面冻坏了,太无聊了。。。",没想到 刚说到这里MM就不开心了,吃饭的时候,一脸怒气的样子。然后我说什么,她都不高兴。我一着急,一扭头就回去了。
那个时候我在大学的信息的中心兼职,已经有自己办公室。办公室的条件和在外面的冻着,那效果可以想象了。晚上我估计MM快要回来了,去找她,人家根本不理我,凭着我的找理由精神了,MM又原谅了我。事后,我才知道MM下午是流着泪去考场的,而且是考的英语。第二天,我还得充英雄,陪MM考了一天,所以有人如果问我考研了吗,我一定会说:恩,考了!"。至于,她的考试成绩,大家可以想象了。。