oracle11g部署搭建

oracle11g部署搭建,第1张

1配置hostname

[root@oracledb ~]#hostnamectl set-hostname oracledb

[root@oracledb ~]#echo " 10100110 oracledb" >>/etc/hosts

2关闭selinux和防火墙

[root@oracledb ~]#sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

[root@oracledb ~]#setenforce 0

[root@oracledb ~]#systemctl stop firewalld

[root@oracledb ~]#systemctl disable firewalld

[root@oracledb ~]#systemctl status firewalld

3下载Oracle软件包 且上传到服务器上,进行解压缩

建议使用winSCP工具进行上传到服务器的/opt目录下

[root@oracledb ~]# ls -lh /opt/

-rw-r--r-- 1 root root 12G Mar 30 16:12 linuxx64_11gR2_database_1of2zip

-rw-r--r-- 1 root root 11G Mar 30 16:11 linuxx64_11gR2_database_2of2zip

4安装oracle环境所需要的依赖包-配置YUM源

安装依赖包之前,一定要设置好服务器上的安装源,原因是:可以在没有互联网的时候安装服务所需依赖包;常用的安装源有两种方式:

(1) 配置本地yum源

新建配置文件vi /etc/yumreposd/localsourcerepo输入如下内容:

[localsource]
name=localsource
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

(2) 生成本地yum 缓存

注意:从Oracle 11g 11202版本开始,在Linux x86_64上安装时,只需要安装64位的软件包,但是,对于11202之前的任何Oracle database 11g,下表中列出的32位和64位的安装包都必须安装

5安装oracle环境所需要的依赖包-安装依赖包

(1)安装依赖包

[root@oracledb ~]# yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel zlib zlib-devel pcre-devel unzip

(2)安装完成后,检查依赖是否全部安装成功

[root@oracledb ~]# rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel zlib zlib-devel pcre-devel unzip | grep "not installed"

(3)创建所需的用户组和用户

如果要安装Oracle数据库,通常需要以下本地 *** 作系统用户组和用户:

Oracle inventory组(通常为 oinstall)

OSDBA组 (通常为 dba)

OSOPER组 (通常为 oper)

Oracle软件所有者(通常为 oracle)

创建用户组和用户:

[root@oracledb ~]# groupadd oinstall

[root@oracledb ~]# groupadd dba

[root@oracledb ~]# groupadd oper

[root@oracledb ~]# useradd -g oinstall -G dba oracle

(4)修改oracle用户密码:建议密码配置为字符+数字+特殊字符

[root@oracledb ~]# passwd oracle

6配置内核参数和资源限制

(1)编辑配置文件vi /etc/sysctlconf添加如下参数:

vmmax_map_count = 655360

fsaio-max-nr = 1048576

fsfile-max = 6815744

kernelshmall = 2097152

kernelshmmax = 2147483648 ###最小值: 536870912

kernelshmmni = 4096

kernelsem = 250 32000 100 128

netipv4ip_local_port_range = 9000 65500

netcorermem_default = 262144

netcorermem_max = 4194304

netcorewmem_default = 262144

netcorewmem_max = 1048576

注意:如果系统中某个参数高于上面的参数的值 ,保留较大的值,上面的数值只是官方要求的最小值,可以根据系统调整数值,以优化系统性能

(2)使内核参数生效

[root@oracledb ~]# sysctl -p

7创建oracle安装目录

如下目录,根据自己的实际情况可做修改:

[root@oracledb ~]# mkdir -p /data/app/oracle/product/1120

[root@oracledb ~]# cd /data/app/oracle/

[root@oracledb oracle]# mkdir oradata inventory fast_recovery_area

[root@oracledb ~]# chown -R oracle:oinstall /data/app/oracle

[root@oracledb ~]# chmod -R 775 /data/app/oracle

8配置oracle用户环境变量

编辑配置文件vi /home/oracle/bash_profile添加如下内容:

export ORACLE_BASE=/data/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/1120

export ORACLE_SID=orcl

export PATH=$PATH:$ORACLE_HOME/bin


9 解压下载好的两个Oracle数据库文件

[root@oracledb ~]# cd /opt

[root@oracledb ~]# unzip linuxx64_11gR2_database_1of2zip -d /data

[root@oracledb ~]# unzip linuxx64_11gR2_database_2of2zip -d /data

10 编辑静默安装响应文件

(1)切换到oracle用户执行

[root@oracledb ~]# su - oracle

(2)切换到响应文件的目录下

[oracle@oracledb ~]$ cp -R /data/database/response/

[oracle@oracledb ~]$ cd response/

[oracle@oracledb response]$ ls

dbcarsp db_installrsp netcarsp

11修改配置文件:vi /home/oracle/response/db_installrsp,修改以下变量的值

oracleinstalloption=INSTALL_DB_SWONLY

UNIX_GROUP_NAME=oinstall

INVENTORY_LOCATION=/data/app/oracle/inventory

SELECTED_LANGUAGES=en,zh_CN

ORACLE_HOME=/data/app/oracle/product/1120

ORACLE_BASE=/data/app/oracle

oracleinstalldbInstallEdition=EE

oracleinstalldbDBA_GROUP=dba

oracleinstalldbOPER_GROUP=dba

DECLINE_SECURITY_UPDATES=true


12 开始静默安装Oracle 11g

(1)开始安装oracle数据库

[oracle@oracledb ~]$ cd /data/database

[oracle@oracledb ~]$ /runInstaller -silent -responseFile /home/oracle/response/db_installrsp -ignorePrereq


注意:安装期间可以使用tail命令查看oracle的安装日志,且日志文件名称是根

据自己的实际执行时间确定的,安装日志文件会在安装时提示,需要等待3分钟左右,注意不要停止运行;安装完成后有如下提示,如果有类似如下提示,说明安装完成。

The following configuration scripts need to be executed as the "root" user

#!/bin/sh

#Root scripts to run

/data/app/oraInventory/orainstRootsh

/data/app/oracle/product/1120/db_1/rootsh

To execute the configuration scripts:

1 Open a terminal window

2 Log in as "root"

3 Run the scripts

4 Return to this window and hit "Enter" key to continue

Successfully Setup Software


13使用 root用户执行脚本

(1)切换到root用户执行

[root@oracledb ~]# su - root

(2)执行两个用户脚本

[root@oracledb ~]# sh /data/app/oracle/inventory/orainstRootsh

[root@oracledb ~]# sh /data/app/oracle/product/1120/rootsh

14配置监听程序

(1)切换到oracle用户执行(建议退出重进oracle用户)

[root@oracledb ~]# su - oracle

(2)配置监听,查看输出结果

[oracle@oracledb ~]$ netca /silent /responsefile /home/oracle/response/netcarsp

(3)查看监听服务状态,若没启动需要启动

[oracle@oracledb ~]$ lsnrctl status

[oracle@oracledb ~]$ lsnrctl start


查看结果:

Parsing command line arguments:

Parameter "silent" = true

Parameter "responsefile" = /data/etc/netcarsp

Done parsing command line arguments

Oracle Net Services Configuration:

Profile configuration complete

Oracle Net Listener Startup:

Running Listener Control:

/data/app/oracle/product/1120/bin/lsnrctl start LISTENER

Listener Control complete

Listener started successfully

Listener configuration complete

Oracle Net Services configuration successful The exit code is 0

(4)查看监听端口

[oracle@oracledb ~]$ netstat -tnpl | grep 1521

15静默创建数据库

GDBNAME = "orcl"

SID = "orcl"

SYSPASSWORD = "oracle"

SYSTEMPASSWORD = "oracle"

SYSMANPASSWORD = "oracle"

DBSNMPPASSWORD = "oracle"

DATAFILEDESTINATION =/data/app/oracle/oradata

RECOVERYAREADESTINATION=/data/app/oracle/fast_recovery_area

CHARACTERSET = "ZHS16GBK"

TOTALMEMORY = " 6552 "

##其中TOTALMEMORY = " 6552 " 为6552 MB,物理内存8G80%

(2)切换到oracle用户执行

[root@oracledb ~]# su - oracle

(3)执行静默建库

[oracle@oracledb ~]$ dbca -silent -responseFile /home/oracle/response/dbcarsp

执行过程如下:

Copying database files

1% complete

3% complete

11% complete

18% complete

26% complete

37% complete

Creating and starting Oracle instance

40% complete

45% complete

50% complete

55% complete

56% complete

60% complete

62% complete

Completing Database Creation

66% complete

70% complete

73% complete

85% complete

96% complete

100% complete

Look at the log file "/data/app/oracle/cfgtoollogs/dbca/orcl/orcllog" for further details


(4)查看进程

[oracle@oracledb ~]$ ps -ef | grep ora_ | grep -v grep

(5)再次查看监听状态进行确认

[oracle@oracledb ~]$ lsnrctl status

结果显示:

The command completed successfully


16至此数据库就安装成功了,下面我们登录下数据库

(1)切换到oracle用户执行

[root@oracledb ~]# su - oracle

(2)登录数据库

[oracle@oracledb ~]$ sqlplus / as sysdba

(3)查询实例状态

SQL>select status from v$instance;

(4)查看数据库版本

SQL> select from v$version;

(5)激活scott用户

SQL>alter user scott account unlock;

SQL>alter user scott identified by tiger;

SQL>select username,account_status from dba_users;

17设置Oracle开机启动

(1)修改配置文件vi /data/app/oracle/product/1120/bin/dbstart 修改如下内容:

将脚本中的ORACLE_HOME_LISTNER=$1,修改为ORACLE_HOME_LISTNER=$ORACLE_HOME

(2)修改配置文件vi /data/app/oracle/product/1120/bin/dbshut 修改如下内容:

将脚本中的ORACLE_HOME_LISTNER=$1,修改为ORACLE_HOME_LISTNER=$ORACLE_HOME

(3)修改配置文件 vi /etc/oratab修改如下内容,

orcl:/data/app/oracle/product/1120:Y

(4)新建文件:vi /etc/rcd/initd/oracle 注意:建议全部复制脚本内容

#! /bin/bash

# oracle: Start/Stop Oracle Database 11g R2

# chkconfig: 345 90 10

# description: The Oracle Database is an Object-Relational Database Management System

# processname: oracle

/etc/rcd/initd/functions

LOCKFILE=/var/lock/subsys/oracle

ORACLE_HOME=/data/app/oracle/product/1120

ORACLE_USER=oracle

case "$1" in

start)

if [ -f $LOCKFILE ]; then

echo $0 already running

exit 1

fi

echo -n #34;Starting Oracle Database:"

su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"

su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"

su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"

touch $LOCKFILE

;;

stop)

if [ ! -f $LOCKFILE ]; then

echo $0 already stopping

exit 1

fi

echo -n #34;Stopping Oracle Database:"

su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"

su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"

su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"

rm -f $LOCKFILE

;;

restart)

$0 stop

$0 start

;;

status)

if [ -f $LOCKFILE ]; then

echo $0 started

else

echo $0 stopped

fi

;;

)

echo "Usage: $0 [start|stop|status]"

exit 1

esac

exit 0


(5)给 /etc/initd/oracle添加执行权限

[root@oracledb ~]# chmod +x /etc/initd/oracle

(6)开机启动oracle

[root@oracledb ~]# chkconfig oracle on

(7)给启动文件加权限

[root@oracledb ~]# cd /data/app/oracle/product/1120/bin/

[root@oracledb bin]# chmod 6751 oracle

[root@oracledb bin]# cd /var/tmp

[root@oracledb tmp]# chown -R oracle:oinstall oracle

(8)重启测试

[root@oracledb ~]# reboot

(9)切换到oracle用户登录状态下

[root@oracledb ~]# su - oracle

[oracle@oracledb ~]$ sqlplus / as sysdba

(10)解除锁定

SQL> alter user SYSTEM account unlock;

(11)这时候就可以用Navicat连接了

SQL> conn;


用户名:SYSTEM
密码:oracle


如果不能正确连接,改下密码试试

alter user system identified by 新密码


[root@oracledb ~]# mkdir -p /data/szzt


[root@oracledb ~]# cd /data/

[root@oracledb data]# chown oracle:oinstall -R szzt

[root@oracledb data]# ll

total 0

drwxr-xr-x 3 root root 20 Apr 8 21:14 app

drwxr-xr-x 8 root root 128 Aug 21 2009 database

drwxr-xr-x 2 oracle oinstall 6 Apr 14 16:17 szzt


[root@oracledb ~]# su - oracle

[oracle@oracledb ~]$ sqlplus / as sysdba

SQL> conn cshi

Enter password: 登录失败

Connected

SQL> create temporary tablespace DB_DATA_TMP tempfile'/data/szzt/DB_DATA_TMPdbf' size 500m autoextend on next 100m maxsize 10240m extent management local;

显示结果:

Tablespace created

SQL> create tablespace DB_DATA logging datafile'/data/szzt/DB_DATAdbf' size 2048m autoextend on next 100m maxsize 10240m extent management local;

显示结果:

Tablespace created

SQL> create user ceshi identified by ceshi default tablespace DB_DATA temporary tablespace DB_DATA_TMP;

显示结果:

User created

SQL> grant dba to ceshi;

显示结果:

Grant succeeded

SQL> conn ceshi ###用户名和密码一样,此时登录成功

[oracle@oracledb ~]$ cd /data/app/oracle/product/1120/bin/


注意:数据库导出 *** 作是在 源服务器 上进行

[oracle@oracledb bin]$ exp 用户名/密码@ IP地址 /orcl file =/data/szzt/ceshidmp owner='用户名'

Export terminated successfully without warnings

注意:数据库导入 *** 作是在 目标服务器 上进行

[oracle@oracledb bin]$ imp ceshi/ceshi@ 10100110 /orcl file=/data/szzt/ceshidmp fromuser=ceshi touser=ceshi

显示结果:可以看到导入的表过程(10100110是自己的目标数据库服务器)

Import terminated successfully without warnings

(1)、数据导入完毕后,我们可以使用DBeaver对数据库进行远程管理

(2)、测试连接,没问题后完成新建

(3)、连接上来后,我们就可以使用工具来进行管理数据库

这个问题相当专业了,之前我去周立功那边了解过的。

按照以下步骤进行安装:

1) 安装32位的兼容库和libncurses5-dev库

在安装交叉编译工具之前需要先安装32位的兼容库和libncurses5-dev库,安装32兼容库需要从ubuntu的源库中下载,所以需要在Linux主机系统联网的条件下,通过终端使用如下命令安装:

vmuser@Linux-host ~$sudo apt-get install ia32-libs

若Linux主机系统没有安装32位兼容库,在使用交叉编译工具的时候可能会出现错误:

-bash: /arm-fsl-linux-gnueabi-gcc: 没有那个文件或目录

在终端中使用如下命令则可以安装libncurses5-dev库。

vmuser@Linux-host ~$sudo apt-get install libncurses5-dev

如果没有安装此库,在使用make menucofig时出现如下所示的错误:

Unableto find the ncurses libraries or the

required headerfiles

'makemenuconfig' requires the ncurses libraries

Installncurses (ncurses-devel) and try again

make[1]: [scripts/kconfig/dochecklxdialog] 错误 1

make: [menuconfig] 错误 2

2) 安装交叉编译工具链

将交叉编译工具“gcc-444-glibc-2111-multilib-10_EasyARM-iMX283tarbz2”文件通过U盘的方式拷贝到Linux主机的“/tmp”目录下,然后执行如下命令进行解压安装交叉编译工具链:

vmuser@Linux-host ~$ cd /tmp

vmuser@Linux-host ~$ sudo tar -jxvfgcc-444-glibc-2111-multilib-10_EasyARM-iMX283tarbz2 -C /opt/

vmuser@Linux-host /tmp$ # 输入vmuser用户的密码“vmuser”

执行完解压命令后,交叉编译工具链将被安装到“/opt/gcc-444-glibc-2111-multilib-10”目录下。交叉编译器的具体目录是“/opt/gcc-444-glibc-2111-multilib-10/arm-fsl-linux-gnueabi/bin”,为了方便使用,还需将该路径添加到PATH环境变量中,其方法为:修改“/etc/profile”文件,具体 *** 作方法如下:

在终端中输入如下指令

vmuser@Linux-host ~$ sudo vi /etc/profile # 若提示输入密码,则输入“vmuser”

用vi编辑器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:

export PATH=$PATH:/opt/gcc-444-glibc-2111-multilib-10/arm-fsl-linux-gnueabi/bin

文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效。

vmuser@Linux-host ~$source /etc/profile

在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux-gnueabi-前缀的命令,则基本可以确定交叉编译器安装正确,如下图所示。

在 SSH 下远程使用 IDE 编译和调试步骤如下:
本地机安装运行xming,运行putty,设置putty的Enable X11 forwarding
跳板机上解压一个eclipse cdt,目录无所谓,哪有权限哪方便就丢哪,这解压到/opt目录,修改自己主目录下的profile文件,添加eclipse的执行文件目录到PATH环境中
putty用ssh登录到跳板机,直接输入命令eclipse &运行
至于eclipse的remote gdb就直接贴网上的了
linux下用eclipse和gdbserver远程调试嵌入式linux上(目标机)的程序_BBKK_新浪博客
默认的xming显示出来的界面可能字体会比较小,修改启动参数,在后面加-dip 100
有时会需要开多个session,或者还得用putty连开发板,这样用putty会开很多个窗口出来,推荐一个mtputty,可以把putty当作标签显示,切换方便很多,看起来也舒服很多
再继续就是本地和跳板之间的文件共享传输了,在跳板机上配置samba服务器,本地直接映射网络硬盘,访问跳板机跟访问本地硬盘一样方便,如果开机够快而且服务器从不关机的,还可以勾选登陆时重连

从开发平台到服务器的向上适化

适化概述

所谓适化就是将桌面应用转化为Client/Server应用

适化是一个很复杂的主题 这里不详细讲述 本节将介绍适化Delphi 应用程序中最重要的方面

适化的主要方面有

● 将数据库从桌面平台到服务器的适化

● 将应用程序转化为Client/Server的适化

适化还需要实现从桌面环境到Client/Server环境的转化

桌面数据库和SQL服务器数据库在许多方面有不同之处 例如

● 桌面数据库用于同一时刻单用户的访问 而服务器用于多用户访问

● 桌面数据库是面向记录的 而服务器是面向集合的

● 桌面数据库将每个表存储在独立的文件中 而服务器将所有的表存储在数据库中Client/Server应用必须解决更新的问题 最复杂的是联接 网络和事务控制

适化数据库

适化数据库包含下列步骤

● 在桌面数据库结构的基础上 定义服务器上的元数据

● 将数据从桌面转化到服务器中

● 解决下列问题

● 数据类型差异

● 数据安全性和完整性

● 事务控制

● 数据访问权

● 数据合法性

● 锁定

Delphi提供了两种方法适化一个数据库

● 使用Database Desktop工具 选择菜单Tools/Utilities/Copy to命令将数据库表从桌面方式拷贝到SQL格式

● 建立应用TBatchMove部件的应用程序

这两种方法都可以将表结构和数据从桌面数据源转化到服务器上 依靠这些数据库 可能需要改变结果表 例如 可能想进行不同数据类型的映射

也可以将下列特征加入数据库

● 完整性约束

● 索引

● 检测约束

● 存储过程和触发器

● 其它服务器特征

如果用SQL脚本和服务器数据定义工具定义元数据会更有效 然后用前面介绍的两种方法转移数据 因为如果是手工定义数据库表 Database Desktop和TBatchMove 部件将只拷贝数据

适化应用程序

在理论上 设计用来访问局部数据的Delphi应用程序做很少的修改就可以访问远程服务器上的数据 如果在服务器上定义适合的数据源 你就能将应用程序指向访问它 这只需简单地改变应用程序中TTable或TQuery部件的DatabaseName属性

实际上 在访问局部和过程数据源之间有许多重要的不同之处 Client/Server应用程序必须解决大量的在桌面应用中所没有的问题

任何Delphi应用程序都能用TTable或TQuery部件访问数据 桌面应用程序通常都是使用TTable部件 当适化到SQL服务器上时 用TQuery会更有效 如果应用程序要检索大量记录 则TQuery部件要略胜一筹

如果应用程序使用统计或数学函数 那么在服务器上通过存储过程执行这些函数会更有效 因为存储过程执行更快 使用存储过程还可以减少网络负载 特别是大量行数据的函数

例如 计算大量记录的标准差

● 如果该函数在客户端执行 所有的值从服务器上检索出来并送到客户端 导致网络拥塞

● 如果该函数在服务器端执行 则应用程序只需要服务器上的答案

Delphi客户/服务器应用实例分析

本节中采用的实例是Delphi 数据库的例子CSDEMO CSDEMO是Delphi客户/服务器编程的示例程序 它采用的数据库服务器是Local InterBase Server

CSDEMO较好地示范了BDE环境的配置 InterBASE Server高级功能应用 SQL服务器联接 触发器应用 存储过程编程和事务控制技术等 具有较高的参考价值 本节讲述下列内容

● 数据库环境介绍

● TDatabase的应用

● 不同数据库表的切换

● 触发器编程

● 存储过程编程

● 事务控制应用

数据库环境介绍

本例中采用的数据库服务器是Local InterBase Server Local InterBase是InterBase Server的单用户版 位 兼容ANSI SQL Local InterBase支持客户/服务器应用在单机上的开发和测试 并且可以很容易地适化到InterBase Server上 因此 开发客户/服务器应用采用Local InterBase作为原型开发环境是很方便的

IBLOCAL的BDE参数

本例中的SQL数据库是IBLOCAL 它是由BDE配置工具(BDECFG EXE)设置参数值 它的各项参数值列于下表

表 IBLOCAL的各项参数值

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

参 数 名 参 数 值

────────────────────────────────────

TYPE INTRBASE

PATH

SERVER NAME C:\INTRBASE\EXAMPLES\EMPLOYEE GDB

USER NAME SYSDBA

OPEN MODE READ/WRITE

SCHEMA CACHE SIZE

LANGDRIVER

SQLQRYMODE

SQLPASSTHRU MODE SHARED AUTOMIT

SCHEMA CHCHE TIME

MAX ROWS

BATCH COUNT

ENABLE SCHEMA CACHE FALSE

SCHEMA CACHE DIR

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

数据库结构介绍

IBLOCAL数据库的结构都是由InterBase服务器工具交互式SQL工具(ISQL)定义的

用ISQL定义数据库 首先要用Create Database命令建立数据库 建立的新数据库一般是以GDB为扩展名 建立好后 就可以用SQL语言定义数据库表 例如建立EMPLOYEE表的SQL语句如下

定义域名数据类型

CREATE DOMAIN FIRSTNAME AS VARCHAR( )

CREATE DOMAIN LASTNAME AS VARCHAR( )

CREATE DOMAIN COUNTRYNAME AS VARCHAR( )

CREATE DOMAIN EMPNO AS SMALLINT;

CREATE DOMAIN DEPTNO AS CHAR( )

CHECK (VALUE = OR (VALUE > AND VALUE <= ) OR VALUE IS NULL)

CREATE DOMAIN JOBCODE AS VARCHAR( )

CHECK (VALUE > )

CREATE DOMAIN JOBGRADE AS SMALLINT

CHECK (VALUE BEEEN AND )

CREATE DOMAIN SALARY AS NUMERIC( )

DEFAULT

CHECK (VALUE > )

建立EMPLOYEE表

lishixinzhi/Article/program/Delphi/201311/25125


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10624929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存