Solved

oracle 10g OWB linux and windows 2 databases on linux owb client on win setup

Posted on 2006-06-29
4
2,203 Views
Last Modified: 2012-05-05
overview
      install oracle 10g 10.2.0.1 on rh ent ed 4 for em64t
      install oracle owb 10.2.0.1 on rh ent ed 4 for em64t same box as above
      install oracle owb 10.2.0.1 on windows xp
      connect to a sqlServer database to suck out data
      
Problem
      I havent used oracle and linux/unix this millennium
      Verify my install steps or suggest better
      
boot linux and update the whole thing.
craete dir structure based on ofa /u01/app/products/oracle/database/10g/rdb_home
craete dir structure based on ofa /u01/app/products/oracle/owb/10g/owb_home
ok not the best names but i just want to figure things out and have a proof of concept

log in as oracle
export oraclehome = /u01/app/products/oracle/database/10g/rdb_home
set sid=""
set all other variables
install db software and create general database at same time named rdb
set sid = rdb
start database
select global name all is good

set sid = "" again
run dbca
create database named owb_repo
create sample schemas
if the sys password is not the same as above i get an error cant create tablespace
I dont think thats correct but maybe it is.  it does make sence but then again it doesnt
ok so i create the database's
set sid = owb_repo try to connect to sql plus and i get errors cant connect
--please help here i forget the format of the connect string to connect to a specific sid is it connect user@sid  or what?

so i hop over to windows and install owb
all is well i connect to both databases through EM fat client

back to linux
switch oracle home to /u01/app/products/oracle/owb/10g/owb_home
set sid = ""
install owb
all is good

back to windows
start owb/repo creation assistant
try to create repo on linux box sid = owb_repo
gets 75% complete and i get an error cant craete owb users

now thats where i stand
when all this is resolved i want to connect to a sqlServerdatabase and suck out data
no i dont want to use dts i already know how to do that :)
my question here is ---
      if i have owb fat client on windows and owb repo on linux
      do i need the linux odbc driver installed and set up on linux?  if so i understand i cant use the 64 bit linux and db.
      or can i just connect to the sql server via fat client on windows and suck data from sql server into oracle sid rdb
      
main q is when i use dbca does that create an instance which requires an new home? or just a schema in the existing instance. it appears to me that it is a seperate instance but i want to make sure.  

Can someone guide me on what environment vars to set before running dbca to create the 2nd database?  
and what environment vars to craete before running owb
and what to set to start each service on linux.

This seems fairly simple to me i just cant find the amswer anywhere and i am tired of looking and reading :)
So i will offer max points and if it requires more detail i will get that at the office around 9:00 EST  i can make it crash again :)
if this q needs splitting up i will do that as well, to give points to all who help

Thanks in advance
0
Comment
Question by:stevetheski
  • 2
4 Comments
 
LVL 16

Expert Comment

by:MohanKNair
ID: 17015482
See this link

Installing Oracle Database 10g Release 1 and 2 (32-bit/64-bit) on Red Hat Enterprise Linux AS 4, 3, 2.1, Red Hat Fedora Core 4, 3, 1, RH 9 on x86 and x86-64 (AMD64) Architecture
http://www.puschitz.com/InstallingOracle10g.shtml

Setting Oracle Environments
http://www.puschitz.com/InstallingOracle10g.shtml#SettingOracleEnvironments
0
 
LVL 47

Expert Comment

by:schwertner
ID: 17017049
Installing Oracle Database 10g Release 2 on Linux x86
by John Smiley
Learn the basics of installing Oracle Database 10g Release 2 on Red Hat Enterprise Linux or Novell SUSE Enterprise Linux, from the bare metal up (for evaluation purposes only).

http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html



The Oracle 10.1.0.3 Installation kit resides on many CDs. The Oracle server resides on only 1 CD. Find a partition on the machine (about 3GB), create a directory “stage” and download the contents of the disk there. FTP deletes the zip file if you choose false transfer direction. Make a spare copy of the file(s)!!
If you take the decision to download the kit from the OTN you will download the file
      ship.db.lnx32.cpio.gz
Put him in the directory “stage”. Do not create subdirectory “Disk1, it will be created by unzipping.
Compute a cyclic redundancy check (CRC) checksum for the downloaded files and compare the checksum numbers against the numbers posted on OTN's website. For example:
cksum ship.db.cpio.gz

Unzip the file running “gunzip” command, e.g.
gunzip       ship.db.lnx32..cpio.gz
This creates subdirectory /database ready for installation.
In the old versions we had to execute also:
Extract the “cpio” archives (this will create the “Disk1” directory) e.g.
cpio  –idmv  < ship.db.lnx32.cpio

 
Each step should be done in the order that it is listed.  
These steps are the bare minimum that is necessary for a typical install of the Oracle 10g RDBMS.
 
 
Verification of Version Certification:
===========================
 
Currently (February 2005), Oracle 10g is certified ONLY on the following
Intel Based Server Linux distributions:
 
    - Red Hat Advanced Server 2.1
    - Suse   SLES8, SLES9
    - United Linux 1.0
 
For the latest certification and other related information, use the "Certify & Availability" link in Metalink.
 
Installations on distributions and versions not listed in the Certify link is not supported.
 

C/C++ compiler installation
===========================

Check whether C/C++ compiler is installed. “gcc --version” will show “gcc
(GCC) 3.3.3 (SUSE LINUX)”. If gcc is not installed ( “gcc --version” shows that there is not such command), then use YaST setup tool to install “C/C++ Compiler and Tools”.

To get the picture bellow run Yast2 and:

1.      Check  ‘software’ -à “install and Remove Software”
2.      On the left menu “Filter” choose “Selections”
3.      See “C/C++ Compilers and tools”
4.      If they are not installed, check the checkbox and do the installation, using CD2 and CD3
 
Pre-requisite Requirements for System Administrator:
=========================================
 
The following steps are required to verify your operating system meets minimum requirements for installation, and should be performed by the root user.  
For assistance with system administration issues, please contact your system administrator or operating system vendor.
 
Use these steps to manually check the operating system requirements before attempting to install Oracle RDBMS software, or you may choose to use the convenient "Unix InstallPrep script" which automates these checks for you.  
 
 
Users must have /bin/utils installed for the operating system.  
This is part of the developers option on RedHat Advanced Server 2.1.
 
The Following Steps Need to be Performed by the Root User:
 
1. Configure System Resources:
 
      Ensure that the system has at least the following resources:

o      400 MB in /tmp *

% df /temp

o      512 MB of Physical Memory (RAM)

      % /usr/sbin/dmesg | grep "Physical:"
 
o      Two  times the amount of Physical Memory for Swap space  
   (unless the system exceeds 2 GB of Physical Memory, where
   one to two times the amount of Physical Memory for Swap space is
   sufficient)
 

             %  /sbin/swapon -s

 
·      You may also redirect /tmp by setting the TEMP environment
   variable.

   This is only recommended in rare circumstances where /tmp
   cannot be expanded to meet free space requirements.

·      Disk space requirements for the Oracle10g database software and seed database.
 
             Database software            2.5 GB
             Seed database            1.2 GB

·      Operating system version required
SuSE Linux Enterprise Server 9 (or SLES-9) with
kernel 2.6.5-7.97-default, and gcc (GCC) 3.3.3 (SUSE LINUX).

 % uname -a
 
 
 
2. Create a Software Owner and Group:
 
     Create a Unix user and groups that will own the Oracle software.  
     (Typically user = oracle, groups = dba, oinstall)
 
     You may use a GUI tool for this if your distribution provides
     one, or the 'useradd' and 'groupadd' command line utilities.
 
     Please make sure the user and group you use are defined in the local /etc/passwd and /etc/group files rather than resolved via a network service such as NIS.
 
3. Create a Software Mount Point and Data File Mount Points:
 
      Create a mount point for the Oracle software installation  
      (at least 2.5 GB, typically /u01)
 
      Create a second, third and fourth mount point for the database files, control files, and log files to be created (typically /u02, /u03, /u04).
 
·      The oracle user should own these mount points and all of the directories below the mount point.

4. Test the Permissions:
   
      Ensure that the oracle user can write to the new mount points
 

·      As a test, change directories to each of the new mount point directories as the oracle user and create a file ordirectory.
   Example:        
   % touch /u01/test
 
5.      Configure Kernel Resources:


For Oracle10g, the following kernel parameters have to be set to values greater than or equal to the recommended values which can be changed in the proc filesystem:

shmmax  = 2147483648     (To verify, execute: cat /proc/sys/kernel/shmmax)
shmmni  = 4096           (To verify, execute: cat /proc/sys/kernel/shmmni)
shmall  = 2097152        (To verify, execute: cat /proc/sys/kernel/shmall)
shmmin  = 1              (To verify, execute: ipcs -lm |grep "min seg size")
shmseg  = 10             (It's hardcoded in the kernel - the default is much higher)

semmsl  = 250            (To verify, execute: cat /proc/sys/kernel/sem | awk '{print $1}')
semmns  = 32000          (To verify, execute: cat /proc/sys/kernel/sem | awk '{print $2}')
semopm  = 100            (To verify, execute: cat /proc/sys/kernel/sem | awk '{print $3}')
semmni  = 128            (To verify, execute: cat /proc/sys/kernel/sem | awk '{print $4}')

file-max = 65536         (To verify, execute: cat /proc/sys/fs/file-max)

ip_local_port_range = 1024 65000
                         (To verify, execute: cat /proc/sys/net/ipv4/ip_local_port_range)

NOTE: Do not change the value of any kernel parameter on a system where it is already higher than listed as minimum requirement.

Values      To verify, execute:
shmmax  = 2147483648           cat  /proc/sys/kernel/shmmax
shmmni  = 4096                 cat /proc/sys/kernel/shmmni)
shmall  = 2097152              cat /proc/sys/kernel/shmall
shmmin  = 1          ipcs -lm |grep "min seg size"
shmseg  = 10                   
semmsl  = 250                  cat /proc/sys/kernel/sem | awk '{print $1}'
semmns  = 32000                cat /proc/sys/kernel/sem | awk '{print $2}'
semopm  = 100      cat /proc/sys/kernel/sem | awk '{print $3}'
semmni  = 128                  cat /proc/sys/kernel/sem | awk '{print $4}'
file-max = 65536               cat /proc/sys/fs/file-max
ip_local_port_range = 1024 65000      cat /proc/sys/net/ipv4/ip_local_port_range
      
      
      
The following parameters were set bad:
Shmmax                   33554432
Semopn                  32
File-max                  54420
Ip_local_port_range      1024  61000

The following doesn’t work because this file doesn’t exist.
I added the following lines to the /etc/sysctl.conf file which is used during the boot process:
kernel.shmmax=2147483648
kernel.sem=250 32000 100 128
fs.file-max=65536
net.ipv4.ip_local_port_range=1024 65000
Adding these lines to the /etc/sysctl.conf file will cause the system to change these kernel parameters after each boot using the /etc/rc.d/rc.sysinit script which is invoked by /etc/inittab. But in order that these new added lines or settings in /etc/sysctl.conf become effective immediately, execute the following command:
su - root
sysctl -p

So I used the excerpt for SUSE 8 from: (find it in 9.2.0 Installation Notes, Page 6):
http://www.oracle.com/technology/pub/artic...stall.html#sles
http://www.oracle.com/technology/tech/linux/install/index.html
DBA: Linux
Installing Oracle Database 10g on Linux x86
by John Smiley

Also I commented ports 1830 through 1849 in /etc/services to install correctly OEM 10g.

##################################################
EXCERT BEGINS HERE:
Configuring the Linux Kernel Parameters
The Linux kernel is a wonderful thing. Unlike most other *NIX systems, Linux allows modification of most kernel parameters while the system is up and running. There's no need to reboot the system after making kernel parameter changes. Oracle Database 10g requires the kernel parameter settings shown below. The values given are minimums, so if your system uses a larger value, don't change it.
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
If you're following along and have just installed Linux, the kernel parameters will all be at their default values and you can just cut and paste the following commands while logged in as root.
cat >> /etc/sysctl.conf <<EOF
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
EOF
/sbin/sysctl -p

Ex:
# cat >> /etc/sysctl.conf <<EOF
> kernel.shmall = 2097152
> kernel.shmmax = 2147483648
> kernel.shmmni = 4096
> kernel.sem = 250 32000 100 128
> fs.file-max = 65536
> net.ipv4.ip_local_port_range = 1024 65000
> EOF
# /sbin/sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
kernel.sysrq = 0
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
Run the following commands as root to verify your settings:
/sbin/sysctl -a | grep shm
/sbin/sysctl -a | grep sem
/sbin/sysctl -a | grep file-max
/sbin/sysctl -a | grep ip_local_port_range

Ex:
# /sbin/sysctl -a | grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shm-use-bigpages = 0
# /sbin/sysctl -a | grep sem
kernel.sem = 250        32000   100     128
# /sbin/sysctl -a | grep file-max
fs.file-max = 65536
# /sbin/sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 1024     65000
If any of the parameters on your system are set lower than those shown, edit the /etc/sysctl.conf file and add or change the parameters. When you're finished, run the following command to activate the changes:
/sbin/sysctl -p
For SLES 8 only, run the following command after completing the step above.
/sbin/chkconfig boot.sysctl on
Setting Shell Limits for the oracle User
Oracle recommends setting limits on the number of processes and open files each Linux account may use. To make these changes, cut and paste the following commands as root:
cat >> /etc/security/limits.conf <<EOF
oracle               soft    nproc   2047
oracle               hard    nproc   16384
oracle               soft    nofile  1024
oracle               hard    nofile  65536
EOF

cat >> /etc/pam.d/login <<EOF
session    required     /lib/security/pam_limits.so
EOF
For RHEL 2.1 and 3, use the following:
cat >> /etc/profile <<EOF
if [ \$USER = "oracle" ]; then  
   if [ \$SHELL = "/bin/ksh" ]; then
       ulimit -p 16384
       ulimit -n 65536
   else
       ulimit -u 16384 -n 65536
   fi
   umask 022
fi
EOF

cat >> /etc/csh.login <<EOF
if ( \$USER == "oracle" ) then
   limit maxproc 16384
   limit descriptors 65536
   umask 022
endif
EOF
For SLES 8, use the following:
cat >> /etc/profile.local <<EOF
if [ \$USER = "oracle" ]; then  
   if [ \$SHELL = "/bin/ksh" ]; then
       ulimit -p 16384
       ulimit -n 65536
   else
       ulimit -u 16384 -n 65536
   fi
   umask 022
fi
EOF

cat >> /etc/csh.login.local <<EOF
if ( \$USER == "oracle" ) then
   limit maxproc 16384
   limit descriptors 65536
   umask 022
endif
EOF
Avoid the Bug! (SLES 8 Only)
There is a bug in the installation of Oracle Enterprise Manager 10g on SLES 8 that causes it to fail due to required ports that are reserved in /etc/services. The OEM DBConsole needs port 1830, and in SLES8 environments, this port is already reserved in /etc/services. This bug is documented on MetaLink as bug# 3513603.
To avoid problems during the installation, log in as root and comment out the lines for ports 1830 through 1849 in the /etc/services file prior to installing the Oracle 10g software. (Note: It's probably a good idea to reboot the server at this point, to ensure that the above changes are in effect.)

EXCERT ENDS HERE.
##############################################################



On RedHat Advanced Server 2.1, these parameters can be entered into the file /etc/sysctl.conf.  These parameters in this file are set each time the system is booted.
Example:
      $ more /etc/sysctl.conf
      # Disables packet forwarding
      net.ipv4.ip_forward = 0
      # Enables source route verification
      net.ipv4.conf.default.rp_filter = 1
      # Disables the magic-sysrq key
      kernel.sysrq = 0
      kernel.shmmax=256000000
      kernel.shmmin=1
      kernel.shmmni=100
      kernel.sem= 250 32000   32      128
 
 
7. Mount CD-ROM:
Depending on your Linux distribution the cdrom device is typically either "/cdrom" or "/mnt/cdrom".  
 
Please substitute the appropriate value when "<cdrom>" appears in the examples.
        #  mount  <cdrom>
Installs can be done from either the CD or by copying the contents of each CD’s to a stage area on the local disk (/stage/Disk1, /stage/Disk2, /stage/DiskN)
 
8. This is required to run as root: /tmp/orainstRoot.sh  
   (but during the installation process, not now)

First question of oracle installation. If no other versions of Oracle 8i or 9i have been installed before.  
 
You will be ask to run /tmp/orainstRoot.sh to create the oraInventory location pointer. Usually found in /etc on Linux Files that are located in /etc are /etc/oratab and /etc/oraInst.loc  
 
 
Installation Steps for the Oracle User
=======================================
The Following Steps need to be performed by the Oracle User:
This can be done from either a Telnet or an SSH connection.  
It is NOT recommended to perform installations from a su - oracle connection.
 
  1. Set Environment Variables
     Environment variables should be set in the login script for the oracle user.  
     
     If the oracle user's default shell is the C-shell (/usr/bin/csh),
     then the login script will be named ".login".  
     
     If the oracle user's default shell is the Bourne-shell
     (/usr/bin/bsh) or the Korn-shell (/usr/bin/sh or /usr/bin/ksh),  
     then the login script will be named ".profile".  
     
     In either case, the login script will be located in the oracle user's home directory ($HOME).
 
     The examples below assume that your software mount point is /u01.
 
            Parameter                           Value
            -----------                         ------  
            ORACLE_BASE            /u02/oradata
            ORACLE_SID                o10f
                                                  Set this to what you will call your  
                                                  database instance.  
                                                 (4 - 8 characters in length)
      
If you are not on the console, you may need to set the following
 
            DISPLAY               <ip-address>:0.0  
 
            ENSURE THAT CLASS_PATH IS NOT SET IN THE ENVIRONMENT


ORACLE_BASE=/u02/oradata; export ORACLE_BASE

ORACLE_SID =o10f; export ORACLE_SID


Delete ORACLE_HOME and PATH settings in regard to ORACLE_HOME subpart.
 
2. Set the umask:
Enter or edit the following line, specifying a value of 022 for the default file mode creation mask:

umask 022
 
     Set the oracle user's umask to "022" in you ".profile" or ".login" file.
 
     Example:
       umask 022
 
3. Verify the Environment
Log off and log on as the oracle user to ensure all environment variables are set correctly.  Use the following command to view them:
 
       % env | more
 
Before attempting to run the Oracle Universal Installer,  
verify that you can successfully run the following command:
 
        % /usr/bin/X11/xclock
 
 
4. Start the Oracle Universal Installer and install the RDBMS software:
 
     Use the following commands to start the installer:
 
       % cd /tmp
       % /cdrom/runInstaller
 
       Or cd to /stage/Disk1 and run ./runInstaller:

% sh ./runInstaller

The installation may crash on the very beginning with the message:
               SIGSEGV RECEIVED AT BFFFD528 while installing.
In this case the DBA should unset in the environment the LANG                environment variable in the shell (not in root) before starting the Oracle Universal Installer as follows:
               
                $ unset LANG

 
     Respond to the installer prompts as shown below:
 
 Caution: the database is created without asking the DB Character Set. Try to figure out where the AL32UTF8 character set can be set. By default WE8ISO8859P1 character set is used.

-      At the "Welcome Screen", click Next.
-      Choose ORACLE_HOME location (in 10g we not create ORACLE_HOME environment variable): /u01/app/oracle/product/10.1.0
-      enter the "UNIX Group Name" for the oracle user (oinstall  or dba).

-      Enter Global Database name:  o10f

-      Enter the common password for SYS, SYSTEM, SYSMAN, DBSNMP accounts:    reksreks
 
-      Enter the directory to use for the "Inventory Location". This can be any directory, but is usually not under ORACLE_HOME because the oraInventory is shared with all Oracle products on the system.
          Accept the default:
               /home/oracle/oraInventory             or
               /u01/app/oracle/oraInventory      
 FAILD (10.2.0.1):

     - At the "Summary Screen", review your choices, then click Install.
 
     The install will begin.  Follow instructions regarding running "root.sh" and any other prompts.  When completed, the install will have created a default database, configured a Listener, and started both for you.
 
 Your Oracle10g Release 2 (10.1.0.3.0) RDBMS installation is now complete and ready for use.
 

Post-Installation Activities

           
Set in the profile file the settings for the following environment variables:

 ORACLE_HOME            /u01/app/oracle/product/10.1.0
 PATH                        PATH=$PATH:$ORACLE_HOME/bin
      NLS_LANG                   .UTF8

Check the character set of the DB. If it is not AL32UTF8 then using DBCA delete the old DB and create new one AL32UTF8 character set.

User Passwords
Oracle Corporation recommends that you change the password for user names
immediately after installation.
To change a password:
1. Start SQL*Plus:
$ sqlplus
2. Connect with the user name and password that you want to change:
Enter user-name: username/password
3. Change the password:
SQL> ALTER USER USERNAME IDENTIFIED BY PASSWORD;

0
 
LVL 4

Author Comment

by:stevetheski
ID: 17017693
folks,

Thanks for the articles but I am able to get the first database set up and running without a problem.  It is when i create a 2nd database with dbca. is this creating an entire new instance that will run on a different port or is it just adding an additional schema to my first database that i created with dbca during the install of the database sotware?
in either case I would like to know if it is an instance or schema
and then how to start enterprise manager and look at the new database.
once that is resolved i guess we can then look at the owb if i need to open another question.

Thanks steve
0
 
LVL 47

Accepted Solution

by:
schwertner earned 500 total points
ID: 17018778
If you use DBCA, this means that you create a brand new instance.
The Listener is common for the both DBs and is listenning on 1521 port.
Going back to your original posting I see that you are using 10g on Windows.
Oracle relays on "dynamic registration of the service" in 10g.
The investigations shows that this doesn't work on Windows.
The workaround is to use "static registratiuon of the serviece" as
described below:

For STATIC registration of the Oracle service to the Listener:

Go to the remote 10g installation.
In ...\network\admin open listener.ora

see

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\Ora10g)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = test)
      (ORACLE_HOME = D:\Ora10g)
    )
  )

Add the entry
    (SID_DESC =
      (SID_NAME = test)
      (ORACLE_HOME = D:\Ora10g)
    )
with regard to the particular Oracle Home and SID Name.

Restart the listener:
c:>lsnrctl stop
c:>lsnctl start

Thats all.

If you succeed to connect to both instances (every instance need an entry in LISTENER.ORA)
we can go ahead!

Have a nice weekned!

Joseph Schwertner
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Suggested Solutions

Working with Network Access Control Lists in Oracle 11g (part 1) Part 2: http://www.e-e.com/A_9074.html So, you upgraded to a shiny new 11g database and all of a sudden every program that used UTL_MAIL, UTL_SMTP, UTL_TCP, UTL_HTTP or any oth…
Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
Via a live example show how to connect to RMAN, make basic configuration settings changes and then take a backup of a demo database
This video shows how to Export data from an Oracle database using the Original Export Utility.  The corresponding Import utility, which works the same way is referenced, but not demonstrated.

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now