The win helped Houston avoid its worst start since going 0-9 to open the 1983 season.
Oswalt (1-0) struck out four and allowed one run to earn his 99th career win. It was the 12th complete game of his career and first since July 5, 2006.
When Oswalt, who finished with 94 pitches, realized late in the game that he was on pace to finish with less than 100, he tried to avoid Garner.
"I didn't really look at him," he said. "I just went up there. I wasn't going to come out of the game unless I got in trouble in the ninth or something ... I felt like I could finish the game."
Oswalt's performance left everyone impressed and had his new teammate Lee calling him "amazing."
"Roy did a masterful job," Garner said. "He just really threw the ball well. He had a nice scheme, did what he wanted to do."
Cardinals manager Tony La Russa agreed.
"He had excellent command on both edges of the plate and that's how you can go through a team and not throw very many pitches," he said. "He was very sharp."
Lee, who was signed to a six-year, $100 million contract in the offseason to boost an offense that ranked last in the National League in 2006, hit his first home run in the sixth inning. He hit reliever Brad Thompson's first pitch into the first row of the Crawford Boxes in left field.
Lee downplayed his home run, instead focusing on the victory.
"It feels good just to get a win," he said. "We pitched well, we hit well. That's what it's going to take. The home run ... it doesn't matter if you hit a home run and you lose. It doesn't mean anything."
Chris Burke got picked off at first by Anthony Reyes in the second inning. But Adam Everett and Brad Ausmus singled before Craig Biggio hit a two-run double that ricocheted off the left-field wall and made it 3-0.
"I think the key hit of tonight was the Biggio one with the two runs," Oswalt said. "It gives you a little cushion and you can throw a lot of first-pitch strikes and try to get ahead of hitters real quick."
Scott Spiezio doubled to open the fifth inning and Kennedy followed with a single. Oswalt retired the next nine batters before a single by Bennett in the eighth.
Oswalt said he got four or five outs on first-pitch changeups and believes using that pitch more this season will allow him to get into the eighth and ninth innings more often.
Berkman's home run, which was his 100th at Minute Maid Park, also was off Thompson and landed in the right-field bleachers.
"Anytime you lose four straight, whether it be at the beginning of the season or in the middle of the season, you start to get kind of a bad feeling and it's good the erase that and turn the page," Berkman said. "Now we can just focus on trying to win this series and go on the road and have a good road trip."
Reyes (0-1) allowed five hits and three runs in five innings in his 2007 debut. The 25-year-old struck out three and walked one.
"I thought it was OK," Reyes said. "I could have been better. I left a couple of pitches up and they hit them. It's just something to learn from and work off of for the next game."
Spiezio, who started his first game on Saturday after dealing with a sore back, fell down hard backward after crashing into the wall chasing a foul ball by Lee in the third. But he got up quickly and appeared to be OK.
- Everett has hit safely in all five games this season.
- Biggio's double was his first of the season.
- RHP Kip Wells, who will start for St. Louis on Sunday, is from Houston.
- Jeff Bagwell is the only other Astros player to have 100 home runs at Minute Maid Park with 108.