В каком случае при вызове drivermanager getconnection появляется ошибка no suitable driver
I really need help to establish connection to a database. I have tried everything.
Here is the code:
//----------------------------------------------------------------------------------------------------------------------------
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:ms:sqlserver://ServerN:1433/Databse";
Connection con = java.sql.DriverManager.getConnection(url,"user","password");
//----------------------------------------------------------------------------------------------------------------------------
I am using SQL server 2000 on my computer. I installed its JDBC driver and set the classpath:
classpath
C:\j2sdk1.4.2_13\bin;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar;C:\Java\Database\build\classes
C:\Java\Database\build\classes\database\Main.class is the main class of my project whitch I named Database that is why I included C:\Java\Database\build\classes in the classpath which I think would be the root of my Database package. If I am wrong correct me please.
before I set the classpath, when I run in command prompt:
"javap com.microsoft.jdbc.sqlserver.SQLServerDriver"
I get:
"
C:\Documents and Settings\user>javap com.microsoft.jdbc.sqlserver.SQLServerD
iver
ERROR:Could not find com.microsoft.jdbc.sqlserver.SQLServerDriver
"
After I set the classpath I get:
"
C:\Documents and Settings\user>javap com.microsoft.jdbc.sqlserver.SQLServerDr
iver
Compiled from null
public class com.microsoft.jdbc.sqlserver.SQLServerDriver extends com.microsoft.
jdbc.base.BaseDriver static <>;
public com.microsoft.jdbc.sqlserver.SQLServerDriver();
public static void main(java.lang.String[]);
>
That means I must have done something right, right. After all that, when I run my code I still get:
"
Got an exception!
No suitable driver
java.sql.SQLException: No suitable driver
BUILD SUCCESSFUL (total time: 1 second)
I just don't know what to do because I think I have done everything required. Any help Pleaaaaase.
Я пытаюсь создать соединение с моей базой данных, когда я ставлю тестовый код с помощью основного метода, он работает без проблем. Однако при попытке получить доступ к нему через Tomcat 7 он терпит неудачу ошибка:
Я использую пул. Я поставил в mysql connector (5.1.15), dbcp(1.4) и пул (1.4.5) библиотеки в WEB-INF/lib и in .классов, а также. Я использую Eclipse IDE. Мой код для драйвера базы данных:
начало трассировки стека:
что вызывает эту ошибку?
Попробуйте поместить jar драйвера в папку lib сервера. ($CATALINA_HOME / lib)
Я считаю, что пул соединений должен быть настроен еще до создания экземпляра приложения. (По крайней мере, так это работает в JBoss)
причина, по которой вы получили эту ошибку:
это потому, что вы забыли зарегистрировать драйвер JDBC mysql с приложением java.
вот что вы написали:
должно быть:
вам нужно будет прочитать руководство по конкретному драйверу mysql JDBC, чтобы найти точную строку для размещения внутри класса.forName(". ") параметр.
класса.forName не требуется с JDBC V. 4
у меня была та же проблема с использованием Tomcat7 с mysql-connector-java-5.1.26, что я положил в оба моих $CATALINA_HOME/lib и WEB-INF/lib, на всякий случай. Но он не найдет его, пока я не использую один из этих двух операторов, прежде чем получить соединение:
затем я продолжил удаление mysql-connector-java-5.1.26 из $CATALINA_HOME / lib, и соединение все еще работает.
- нажмите "Open Launch Config" > вкладка Classpath установите местоположение MySQL connector/j jar. или
- расположение сервера > выберите опцию, которая говорит " использовать установку Tomcat (взять под контроль установку Tomcat)"
У меня была библиотека mysql jdbc как в $CATALINA_HOME/lib, так и в WEB-INF / lib, но я получил эту ошибку . Мне нужны были занятия.forName("com по.для MySQL.интерфейс jdbc.Водителя"); чтобы заставить его работать.
у меня была та же проблема, все, что вам нужно сделать, это определить переменную среды classpath для tomcat, вы можете сделать это, добавив файл, в моем случае C:\apache-tomcat-7.0.30\bin\setenv.bat , содержащих:
затем код, в моем случае:
Я запускаю Tomcat 7 в Eclipse с Java 7 и использую драйвер jdbc для MSSQL sqljdbc4.сосуд.
при запуске кода за пределами tomcat, из автономного приложения java, это сработало просто отлично:
однако, когда я попытался запустить тот же код внутри Tomcat 7, я обнаружил, что могу заставить его работать, только сначала зарегистрировав драйвер, изменив вышеизложенное на это:
добавить артефакт из maven.
Бро, вы также можете написать код, как показано ниже:
Если вы используете netbeans, вы должны добавить драйвер JDBC Mysql в список библиотек проекта, в свойствах вашего проекта
У меня также была та же проблема некоторое время назад, но я решил эту проблему.
для этого исключения могут быть разные причины. И один из них может заключаться в том, что банка, которую вы добавляете в свою папку lib, может быть старой.
попробуйте выяснить последняя версия mysql-connector-jar и добавьте это в свой путь к классам. Это может решить вашу проблему. Моя была решена вот так.
большую часть времени это происходит потому, что два mysql-connector-java-3.0.14-production-bin.файл jar. Один в папке lib tomcat, а другой в пути к классам проекта.
просто попробуйте удалить mysql-connector-java-3.0.14-production-bin.jar из папки lib.
таким образом, это работает для меня.
из того, что я заметил, Может быть две причины для этого исключения: (1)имя вашего водителя написано неправильно. (2)драйвер не был должным образом связан с проектом Java Шаги для выполнения в Eclipse: (1)Создайте новый проект Java. (2)скопируйте файл jar разъем (3)щелкните правой кнопкой мыши на проекте Java и вставьте его туда. (4)щелкните правой кнопкой мыши на проекте Java - > свойства - >путь сборки Java - >библиотеки - > добавить Jar - >выберите проект ur(выберите файл jar из раскрывающийся список) и нажмите ok.
убедитесь, что соединитель базы данных может быть достигнут вашим classpath, когда под управлением (не компилируется) программа, например:
кроме того, если вы используете старую версию Java (pre JDBC 4.0), прежде чем делать DriverManager.getConnection эта строка требуется:
при разработке с использованием Ubuntu (Xubuntu 12.04.1) мне "пришлось" сделать следующее:
Eclipse Juno (загружено, не установлено через программный центр), Tomcat 7 (загруженный в пользовательский каталог пользователя) также добавлен как сервер в Eclipse, Динамический веб-проект с сервлетом 3.0, Сервер MySQL на localhost настроен и протестирован с помощью пользователя и пароля (обязательно проверьте) MySQL драйвер разъема 5.1.24 jar,
Я "имел", и я повторяю "имел", нам класс.Загрузить ("com.для MySQL.интерфейс jdbc.Driver") оператор вместе с добавлением драйвера соединителя.jar должен быть в папке lib веб-проекта, чтобы он работал в этой ситуации.
важно. после копирования драйвера.jar to the lib убедитесь, что вы обновили свой проект в Eclipse перед запуском сервлета через Tomcat.
Я попытался добавить файл jar драйвера соединителя через Путь сборки с и без ClassLoad, но это не сработало!
надеюсь, это поможет кому-нибудь начать разработка с этой конкретной ситуацией: сообщество Java предоставляет "много" документации, но есть так много переменных, что его трудно охватить все из них, и это делает вещи очень трудными для нового парня.
Я думаю, если бы кто-нибудь мог объяснить, почему класс.Нагрузка требуется здесь (в этой ситуации), это было бы полезно.
поскольку никто не дал этого ответа, я также хотел бы добавить, что вы можете просто добавить файл драйвера jdbc ( mysql-connector-java-5.1.27-bin.jar в моем случае) в папку lib вашего сервера(Tomcat в моем случае). Перезапустите сервер и он должен работать.
проверьте наличие опечатки в url-адресе соединения, например
"jdbc: mysql: / / localhost:3306 / report "("отчет" - это имя БД)
добавьте класс драйвера в bootstrapclasspath. Проблема в java.язык SQL.DriverManager, который не видит драйверы, загруженные загрузчиками классов, отличными от загрузчика классов bootstrap.
из другого потока stackoverflow:
"во-вторых. Убедитесь, что у вас есть MySQL JDBC Driver aka Connector/J в пути к классам JMeter. Если нет-скачайте, распакуйте и отбросьте mysql-connector-java-x.xx.xx-bin.банку в папку JMeter /lib. Перезапуск JMeter потребуется, чтобы забрать библиотеку"
пожалуйста, убедитесь, что .jar-файл добавляется в папку lib.
вы можете вставить банку в путь времени выполнения jboss, как это:
C:\User\user\workspace\jboss-as-web-7.0.0.Final\standalone\deployments\MYapplicationEAR.ухо\тест.война\WEB-INF\lib ca marche 100%
Я пытаюсь добавить JSP с поддержкой базы данных в существующее приложение Tomcat 5.5 (GeoServer 2.0.0, если это помогает).
Само приложение прекрасно взаимодействует с Postgres, поэтому я знаю, что база данных работает, пользователь может получить к ней доступ и все такое хорошее. Я пытаюсь выполнить запрос к базе данных в добавленном мной JSP. Я использовал пример конфигурации в примере с источником данных Tomcat практически сразу после установки. Необходимые библиотеки тегов находятся в нужном месте - ошибок не возникает, если у меня есть только ссылки на библиотеки тегов, поэтому он находит эти JAR. Драйвер postgres jdbc, postgresql-8.4.701.jdbc3.jar находится в $ CATALINA_HOME / common / lib.
Соответствующий раздел из $ CATALINA_HOME / conf / server.xml, внутри которого, в свою очередь, находится внутри :
Эти строки являются последними в теге в webapps / gs2 / WEB-INF / web.xml:
Печально известный java.sql.SQLException: подходящий драйвер не найден
Это исключение может иметь две основные причины:
Вам необходимо убедиться, что драйвер JDBC находится в собственной /lib папке сервера .
В случае PostgreSQL это описано здесь .
- jdbc:postgresql:database
- jdbc:postgresql://host/database
- jdbc:postgresql://host:port/database
В случае MySQL это описано здесь .
Общий формат URL-адреса JDBC для подключения к серверу MySQL следующий, при этом элементы в квадратных скобках ( [ ] ) являются необязательными:
jdbc:mysql://[host1][:port1][,[host2][:port2]]. [/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]. ]
В случае Oracle это описано здесь .
Есть 2 синтаксиса URL: старый синтаксис, который будет работать только с SID, и новый синтаксис с именем службы Oracle.
Старый синтаксис jdbc:oracle:thin:@[HOST][:PORT]:SID
Новый синтаксис jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Смотрите также:
Спасибо ребята! Извините, 1-я попытка не была в OP, просто jdbc: postgresql: mmas (и я пробовал другие!). К сожалению, с URL-адресом araqnid результат тот же. Вчера вечером я поменял местами содержимое tablib на (ick) встроенную Java, и это отлично работает: попробуйте
Ах. Комментарии не так много с форматированием кода. Кхм. Показывает мой новичок? (ZIIP!) В любом случае, пример Джакарты был посвящен использованию синтаксиса
ИМХО, использование sql taglib лишь немного лучше, чем выполнение JDBC в скриптлетах . я предпочитаю шаблон контроллера / представления, где материал db выполняется заранее, а JSP просто отображает материал. Но каждый сам по себе, и использование sql: query
Я никогда не говорил, что согласен с использованием JSTL SQL taglib, но это не тема, о которой идет речь.
Имеется spring-mvc проект. На локальной системе через mvn tomcat7:run запускается без проблем. При попытке деплоя на удаленный сервер (centos7/tomcat7 из репозитория) получаю следующее:
Конфиги одинаковые. В pom.xml прописан драйвер, пробовала разные версии, на десктопе работает, на сервере нет:
В чем может быть проблема? Tomcat из репов centos привносит свою магию. Сначала билась над тем, что hibernate-validator шестой ветки с ним несовместим из-за старого tomcat-el, теперь вот это. Гуглёж ничего не дал.
Попробуй положить драйвер в $CATALINA_HOME/lib, а в pom.xml в dependency добавь
Если совет выше не проканает, попробуй встать удаленным отладчиком на строчку в `DriverManager.getConnection` и посмотреть, что там происходит
Настоятельно рекомендую выбросить все эти репы центоса, скачать томкат с сайта, распаковать куда душе угодно и попробовать запускать с ним. С JDK настоятельно рекомендую сделать то же самое (с сайта оракла), если не уже. Дистроделы частенько с жавой умудряются создать проблемы на ровном месте.
Попробуй положить драйвер в $CATALINA_HOME/lib, а в pom.xml в dependency добавь
provided
Этот вариант не помог.
И Java на сервере 1.8 или выше? Ваш артефакт собран для 1.8+: «Java JDBC 4.2 (JRE 8+) driver for PostgreSQL database». Чисто ради интереса попробуйте использовать 9.4.1212.jre7 или 9.4.1212.jre6 варианты, в зависимости от версии на сервере.
sanwashere ★★ ( 10.08.18 08:41:43 )
Последнее исправление: sanwashere 10.08.18 08:43:24 (всего исправлений: 1)
Настоятельно рекомендую выбросить все эти репы центоса, скачать томкат с сайта, распаковать куда душе угодно и попробовать запускать с ним. С JDK настоятельно рекомендую сделать то же самое (с сайта оракла), если не уже. Дистроделы частенько с жавой умудряются создать проблемы на ровном месте.
Развернула tomcat 9 скачанный с официального сайта. Картина та же самая. По части взаимодействия с СУБД через этот драйвер у жабки из репозитория проблем нет, ибо mvn tomcat7:run на удаленном сервере корректно запускает проект.
Да, java восьмая. Варианты драйвером для других версий вызывают ту же ошибку.
Это слишком сложно для меня. Удаленную разработку я еще не осилила =)
Этот jar вместе с остальными зависимостями проекта помещен автоматически мавеном в WEB-INF/lib. Так же я вручную копировала его в $CATALINA_HOME/lib.
там надо всего два параметра при запуске прописать и подцепиться отладчиком (та же IDE). погугли
Уберите из $CATALINA_HOME/lib во избежание путаницы между двумя библиотеками драйвера( оно ещё может быть неправильным, но если убрать оттуда, то это можно и не проверять). Если место правильное, то возможно, ошибка в Java коде загрузки JDBC драйвера, а именно в class.forMame() может быть задано неправильное имя класса. Я вообще не применяю class.forName(), это старомодный способ. Вместо этого использую DriverManager.getConnection(), при котором задавать имя класса драйвера не нужно.
У меня нет в проекте сервисного кода по загрузке драйверов. Я использую spring/jpa/hibernate.
Подключилась удаленно. Захожу в JdbcEnvironmentInitiator.initiateService, далее попадаю в DriverManagerDataSource.getConnectionFromDriverManager, из этого метода вызывается DriverManager.getConnection.
Внутри registeredDrivers оказывается пуст. Ведь прошли те времена, когда драйверы нужно было вручную подключать?
А, так ты не задаёшь класс драйвера. Хз, прошли ли, я всегда указываю. Попробуй указать driverClassName в DriverManagerDataSource-е. По крайней мере ошибка будет ближе к делу.
почему-то пакеты с джавасофтом в gnu-linux собирают одни шизики
джавасофт лучше всего качать с оффсайта и добавлять в $PATH
а ты прям в момент отладки попробуй сделать
в IntelliJ IDEA консоль для динамического ввода кода через Alt+F8 в Win (в маке так же) открывается, но я не помню, работает ли она для удаленной отладки :-)
или в код софтины пропиши, если ты сама его написала
если класс найдется - значит все-таки проблемы с настройкой Hibernate, и надо показать нам как ты его настраиваешь
если класс не найдется - надо продолжать шаманить с classpath твоего томката
вообще, имхо, вся эта история с сервелет-контейнерами и аппсерверами - жуткая срань, и пора бы уже им сдохнуть
вообще, имхо, вся эта история с сервелет-контейнерами и аппсерверами - жуткая срань, и пора бы уже им сдохнуть
А я думал в этом вся суть джавки
А, так ты не задаёшь класс драйвера. Хз, прошли ли, я всегда указываю. Попробуй указать driverClassName в DriverManagerDataSource-е. По крайней мере ошибка будет ближе к делу.
Бинго! Заработало! Ну елки-палки! Почему же запуская локально через mvn tomcat7:run указание драйвера не требовалось?
Спасибо всем, кто откликнулся.
Почему же запуская локально через mvn tomcat7:run указание драйвера не требовалось?
Я детали не знаю, но по идее DriverManager при запуске сканирует ClassPath, ковыряется во всех jar-файлах и ищет там всякие META-INF/services/java.sql.Driver. Если нашёл, то регистрирует драйвер. Значит на линуксе твоём по какой-то причине он этого поиска не производит или же драйвер не находит (ещё более странно). Тут надо ковыряться, в какой момент он этот поиск пытается делать, отладчиком цепляться и смотреть, почему не находит. Может там какой-нибудь флаг есть, чтобы пропустить этот поиск (перелопатить все jar-файлы это определённая работа, в частности из-за подобных технологий всякие томкаты так долго стартуют), который у тебя включён.
Что такое CLASSPATH для Tomcat-а - не так очевидно, поскольку Tomcat использует несколько загрузчиков классов (необходимо ознакомиться с ними в документации по Tomcat-у). В результате если класс есть и загружен, но не тем загрузчиком классов, то он может быть не найден программой. Поэтому иногда лучше обходиться без дубликатов jar-файлов в разных папках. Но это не недостаток Tomcat-а , сервлетов и Java, а факт, означающий, что для пользования ими нужны некоторые знания.
Эх, как же я рада! Настроила nginx с proxy на tomcat. Проект деплоится одной командой, красота Как же хороша и удобна жабка, когда все работает =)
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:timesten:direct:dsn=my_ttdb;LockLevel=1
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at level1.main(level1.java:14)
The Class path is set as
How to resolve it
Answers
Does your code load the TimesTen driver using:
If not then you need to add that call.
I did not add Class.forName("com.timesten.jdbc.TimesTenDriver"); previously, after adding the code i am getting the error as
Exception in thread "main" java.lang.ClassNotFoundException: com.timesten.jdbc.TimesTenDriver
Below is the code
public class Timesten
public static void main(String[] args) throws SQLException, ClassNotFoundException
Class.forName("com.timesten.jdbc.TimesTenDriver");
Connection conn = DriverManager.getConnection("jdbc:timesten:direct:dsn=my_ttdb;LockLevel=1");
try System.out.print(" Hi TimesTen");
conn.close();
> catch (SQLException ex) // "Handling errors"
>
>
>
This means that your CLASSPATH is not set properly or is not being picked up properly. Please double check that. Also, is this just pure Java (javac/java) or is this hosted in an appserver or some other framework? Appservers/frameworks usually do not pick up the CLASSPATH environment variable but instead have their own way to set CLASSPATH.
Hi Chris Thanks for the replay!
I am able to work on it, i added Classpath and Path environmental variable it works fine.
But i am getting error
SQLException: java.sql.SQLException: [TimesTen][TimesTen 11.2.2.2.0 ODBC Driver][TimesTen]TT0802: Database permanent space exhausted -- file "blk.c", lineno 3450, procedure "sbBlkAlloc"
This error occurs at the initial stage of configuration for me, i corrected by reducing Temp-size and perm-size of the database then i was able to load the data,where as now after populating some data's i am getting same error
*SQLException: java.sql.SQLException: [TimesTen][TimesTen 11.2.2.2.0 ODBC Driver][TimesTen]TT0802: Database permanent space exhausted -- file "blk.c", lineno 3450, procedure "sbBlkAlloc"*
what needs to be done , at present my Temp-size=64 and perm-size=100
Perm-size is located at D drive which is having 100 GB
Temp-size is located at E drive which is having 100 GB
OS:Win 2003
RAM:8GB
What is the configuration i need to do,in-order to work on java and on TTISQL command
I have gone the post of
414366
where it has been said as reduce the Temp-size and perm-size thats why i have reduced my current DSN in order to work on java,but if more and more data's are inserted into the database i am unable to proceed future
TimesTen is an in-memory database. The operational database (i.e. all data stored in TimesTen) is permanenrtly held in physical memory while the database is operational. The amount of memory needed is approximately PermSize + TempSize + LogBufMB + ~20MB. These values are all parameters set in the DSN attributes for the database. The permanent region is the one tht holds all persistent data; tables, indexes, sequences etc. while the temporary region is used to hold temporary/non persistent data such as sort space, locks, materialised results etc.
The message you are getting indicates that you have filled the permanent region so there is no room to add any addtional data. To resolve this you need to shutdown the database, increase PermSize, and then start the database up again. Note that the maximum size you can specify for PermSize + TempSize + LogBufMB is limited by (a) the amount of available physical memory installed in your machine and (b) on 32-bit platforms limitations due to 32-bit address space. On 32-bit Windows specifically you are unlikely to be able to use a PermSize much larger than 1 GB and possibly less (assuming that you have enough memory).
For disk stirage, TimesTen persists data to disk using a combination of checkpoint files (2 * PermSize) and transaction log files (variable size depending on workload and other factors but normally at least 2*PermSize). By default these go into the same location (Datastore Path + Name parameter) but yoiu can (and should) place the log files on a different disk (Transaction Log Directory) to avoid I/O contention.
Edited by: ChrisJenkins on Jul 3, 2012 9:06 AM
I am having the following things
Perm-size is located at D drive which is having 100 GB
Temp-size is located at E drive which is having 100 GB
OS:Win 2003 & 32 bit
RAM:8GB
and how much can i specify for PermSize & TempSize for a DSN creation.
1) even if your RAM is 8 Gb, because you are using Windows 2003 32 bit, its actually limited to ~1.75 GB max shared memory.
2) you wrote:
Perm-size is located at D drive which is having 100 GB
Temp-size is located at E drive which is having 100 GB
a) there is no '-' in the dsn names for these,
b) are you saying that is the disk space you set aside for perm and temp? or are is that what you were trying to use for permsize and tempsize values?
if disk space then for disk space its roughly checkpoint files (2 * PermSize) lets say for D drive, for E drive we would want to put the checkpoint files there,
which will be about 1gig each and really depends on how frequently you checkpoing, but 100 gb, means you can have 98 txn log files (+ the 2 we reserve as .res files)
thre is actually no concept of temp space being written to disk, its only around in memory (unless a core dump is written to the disk).
3) because you are limited to about 1.75 gb of shared memory by using a 32bit Windows.
I would suggest you would use something like permsize=1024, tempsize=200 (note these settings take units in mb, not sure you saw this in our documentation)
You could start with that and see if its sized well enough.
Jim Tong
TimesTen support
Edited by: jtongtttechsupport on Jul 3, 2012 3:59 PM
I) even if your RAM is 8 Gb, because you are using Windows 2003 32 bit, its actually limited to ~1.75 GB max shared memory.
Why it is limited to 1.75 Gb of shared memory.
II) Perm-size is located at D drive which is having 100 GB of free space in it
Temp-size is located at E drive which is having 100 GB of free space in it
I got the below error for my 4 dsn
837: Cannot attach data store shared-memory segment, error 8
703: Subdaemon connect to data store failed with error TT837
getting the error as
8521: Cannot attach PL/SQL shared memory; virtual memory at PLSQL_MEMORY_ADDRESS already in use by TimesTen
III) I have created 4 dsn already and after i tried to connect the 5th one i am getting below error
I have set the permsize=200, tempsize=50
12701: DatabaseCharacterSet attribute required for data store creation. Refer to the TimesTen documentation for information on selecting a character set.
The command failed.
so i modified the permsize=1024, tempsize=200
8521: Cannot attach PL/SQL shared memory; virtual memory at PLSQL_MEMORY_ADDRESS already in use by TimesTen
but i am not working on any dns when i tried to connect this 5th dsn all the other 4 dsn are not in use ,there is no connection,all the applications are closed.
32-bit Windows is limited at the system level to using no more than about 3.75 GB of RAM. Having 8 GB of RAM in a machien running 32-bit Windows is fairly pointless.
A TimesTen datastore consists of a shared mapping backed by the paging file. If PL/SQL is in use then an additional mapping is needed for the use oof PL/SQL. The datastore mapping is of size (PermSize + TempSize + LogBufMB + ~20MB). The PL/SQL mapping (if used) is of a size determiend by the DSN attribute PL/SQL Memory Size; default is 32 MB.
When a process connects to the datastore in direct mode, both these mappings have to be mapped into the process address space. The Timesten datastore mapping will be mapped at a 'system chosen' address while the PL/SQL mapping is mapped at a fixed address controlled by the DSN attribute PL/SQL Memory Address. In order to map these the process adress space must contain a free contiguous region large enough to contain the mapping and, in the case of the PL/SQL mapping, located at the specified address.
If either of these mappings fails, then you will not be able to connect to the datastore (required address not free, no large enough contiguous region) then you will fail to connect to the datastore. The error message '8521: Cannot attach PL/SQL shared memory; virtual memory at PLSQL_MEMORY_ADDRESS already in use by TimesTen' means that a preocess has attempted to connect to two different TimesTen databases concurrently but both databases specify the same value for PL/SQL Memory Address and hence they clash. If a process will connect to multiple databases at the same tiem then you must be sure to set PL/SQL Memory Address and PL/SQL Memory Size so that the Pl/SQL regioins for each database do not overlap with each other.
32-bit platforms are always a little challenging as the 32-bit address space is (a) limited (it is just 4 GB) and (b) is often 'clutterred' with many things such as DLLs/shared libraries etc. This is especially true on Windows 32-bit; the process memory map is a mess and there is often not a free region lkarger than around 1.7 GB, hence the limitation.
32-bit is really considered 'legacy' now; you would be much better off using a 64-bit platform and 64-bit TimesTen especially if you are using Windows and need large databases or need to connect to multiple databases concurrently. You will likely find thsi very hard to achieve successfully using 32-bit Windows and 32-bit TimesTen.
Читайте также: