如何使用 C++ 获取 SQL 数据库的总大小
How to get the total size of a SQL database using C++
问题: 我希望使用 C++ 代码获取 SQL 服务器 and/or Oracle 数据库的总大小(最好以 MB 为单位)。
我试过的:
目前,我正在使用 SQLGetInfo()
来检索有关当前数据库连接的信息。我传入一个包含所有数据库信息的 struct
。然后我使用该结构向用户显示数据库信息。
//Used to gather information about the connected database
HRESULT GetInfo(DB_CONN_INFO &info)
{
SWORD cbValue;
SQLGetInfo(sqlc.g_hdbc, SQL_DATA_SOURCE_NAME,
info.szDSN, sizeof(info.szDSN), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DATABASE_NAME,
info.szDatabase, sizeof(info.szDatabase), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DBMS_NAME,
info.szDbmsName, sizeof(info.szDbmsName), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DBMS_VER,
info.szDbmsVer, sizeof(info.szDbmsVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DRIVER_NAME,
info.szDriverName, sizeof(info.szDriverName), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DRIVER_VER,
info.szDriverVer, sizeof(info.szDriverVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DRIVER_ODBC_VER,
info.szDriverOdbcVer, sizeof(info.szDriverOdbcVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_ODBC_VER,
info.szOdbcVer, sizeof(info.szOdbcVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_SERVER_NAME,
info.szServerName, sizeof(info.szServerName), &cbValue);
return S_OK;
}
据我所知,SQLGetInfo()
无法确定数据库的总大小。还有别的办法吗?
我在 Visual Studio 2010 年使用 MFC C++。
对于 SQL 服务器,您可以使用 sp_spaceused
。对于 Oracle,您可以从数据文件中获取大小:select sum(bytes)/1024/1024 from dba_data_files;
(或 v$datafile
)。这是表的大小(对于日志文件:select sum(bytes)/1024/1024 from v$log;
)
问题: 我希望使用 C++ 代码获取 SQL 服务器 and/or Oracle 数据库的总大小(最好以 MB 为单位)。
我试过的:
目前,我正在使用 SQLGetInfo()
来检索有关当前数据库连接的信息。我传入一个包含所有数据库信息的 struct
。然后我使用该结构向用户显示数据库信息。
//Used to gather information about the connected database
HRESULT GetInfo(DB_CONN_INFO &info)
{
SWORD cbValue;
SQLGetInfo(sqlc.g_hdbc, SQL_DATA_SOURCE_NAME,
info.szDSN, sizeof(info.szDSN), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DATABASE_NAME,
info.szDatabase, sizeof(info.szDatabase), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DBMS_NAME,
info.szDbmsName, sizeof(info.szDbmsName), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DBMS_VER,
info.szDbmsVer, sizeof(info.szDbmsVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DRIVER_NAME,
info.szDriverName, sizeof(info.szDriverName), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DRIVER_VER,
info.szDriverVer, sizeof(info.szDriverVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_DRIVER_ODBC_VER,
info.szDriverOdbcVer, sizeof(info.szDriverOdbcVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_ODBC_VER,
info.szOdbcVer, sizeof(info.szOdbcVer), &cbValue);
SQLGetInfo(sqlc.g_hdbc, SQL_SERVER_NAME,
info.szServerName, sizeof(info.szServerName), &cbValue);
return S_OK;
}
据我所知,SQLGetInfo()
无法确定数据库的总大小。还有别的办法吗?
我在 Visual Studio 2010 年使用 MFC C++。
对于 SQL 服务器,您可以使用 sp_spaceused
。对于 Oracle,您可以从数据文件中获取大小:select sum(bytes)/1024/1024 from dba_data_files;
(或 v$datafile
)。这是表的大小(对于日志文件:select sum(bytes)/1024/1024 from v$log;
)